2015-11-29 22:25:01 +01:00
|
|
|
<div class="header">
|
|
|
|
<div class="title">
|
|
|
|
<div class="submenu">
|
|
|
|
<a ng-click="newDialog()" os-perms="agenda.can_manage" class="btn btn-primary btn-sm">
|
|
|
|
<i class="fa fa-plus fa-lg"></i>
|
|
|
|
<translate>New</translate>
|
|
|
|
</a>
|
|
|
|
<a ui-sref="agenda.item.sort" os-perms="agenda.can_manage" class="btn btn-default btn-sm">
|
|
|
|
<i class="fa fa-sitemap fa-lg"></i>
|
|
|
|
<translate>Sort agenda</translate>
|
|
|
|
</a>
|
2016-09-18 22:14:24 +02:00
|
|
|
<a ui-sref="topics.topic.import" os-perms="agenda.can_manage" class="btn btn-default btn-sm">
|
2015-11-29 22:25:01 +01:00
|
|
|
<i class="fa fa-download fa-lg"></i>
|
|
|
|
<translate>Import</translate>
|
|
|
|
</a>
|
|
|
|
<a ui-sref="core.tag.list" os-perms="core.can_manage_tags" class="btn btn-default btn-sm">
|
|
|
|
<i class="fa fa-tags fa-lg"></i>
|
|
|
|
<translate>Tags</translate>
|
|
|
|
</a>
|
|
|
|
<a ui-sref="agenda_pdf" target="_blank" class="btn btn-default btn-sm">
|
|
|
|
<i class="fa fa-file-pdf-o fa-lg"></i>
|
|
|
|
<translate>PDF</translate>
|
|
|
|
</a>
|
|
|
|
</div>
|
|
|
|
<h1 translate>Agenda</h1>
|
|
|
|
</div>
|
2015-03-09 15:40:54 +01:00
|
|
|
</div>
|
|
|
|
|
2015-11-29 22:25:01 +01:00
|
|
|
<div class="details">
|
|
|
|
<div class="row">
|
2016-01-25 21:22:22 +01:00
|
|
|
<div class="col-sm-7">
|
|
|
|
<div class="form-inline">
|
|
|
|
<!-- delete mode -->
|
|
|
|
<button os-perms="agenda.can_manage" class="btn"
|
|
|
|
ng-class="$parent.isDeleteMode ? 'btn-primary' : 'btn-default'"
|
|
|
|
ng-click="$parent.isDeleteMode = !$parent.isDeleteMode; uncheckAll()">
|
|
|
|
<i class="fa fa-check-square-o"></i>
|
|
|
|
<translate>Select ...</translate>
|
|
|
|
</button>
|
2015-11-29 22:25:01 +01:00
|
|
|
<!-- project agenda button -->
|
2016-09-12 11:05:34 +02:00
|
|
|
<div class="btn-group" uib-dropdown
|
|
|
|
uib-tooltip="{{ 'Projector' | translate }} {{ isAgendaProjected(mainListTree) }}"
|
|
|
|
tooltip-enable="isAgendaProjected(mainListTree) > 0"
|
|
|
|
os-perms="core.can_manage_projector">
|
|
|
|
<button type="button" class="btn btn-default"
|
2016-02-24 21:01:52 +01:00
|
|
|
title="{{ 'Project agenda' | translate }}"
|
2016-09-12 11:05:34 +02:00
|
|
|
ng-click="projectAgenda(defaultProjectorId_all_items, mainListTree)"
|
|
|
|
ng-class="{ 'btn-primary': isAgendaProjected(mainListTree) > 0 && isAgendaProjected(mainListTree) == defaultProjectorId_all_items}">
|
2016-02-24 21:01:52 +01:00
|
|
|
<i class="fa fa-video-camera"></i>
|
|
|
|
<translate>Agenda</translate>
|
|
|
|
</button>
|
2016-09-12 11:05:34 +02:00
|
|
|
<button type="button" class="btn btn-default" uib-dropdown-toggle
|
|
|
|
ng-class="{ 'btn-primary': isAgendaProjected(mainListTree) > 0 && isAgendaProjected(mainListTree) != defaultProjectorId_all_items}">
|
2016-02-24 21:01:52 +01:00
|
|
|
<span class="caret"></span>
|
|
|
|
</button>
|
2016-09-12 11:05:34 +02:00
|
|
|
<ul class="dropdown-menu" role="menu" aria-labelledby="split-button">
|
|
|
|
<li role="menuitem" ng-show="agendaHasSubitems">
|
|
|
|
<a href="" ng-click="changeMainListTree(); $event.stopPropagation();">
|
|
|
|
<i class="fa" ng-class="mainListTree ? 'fa-square-o' : 'fa-check-square-o'"></i>
|
|
|
|
<translate>Only main agenda items</translate>
|
|
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="divider" ng-show="agendaHasSubitems"></li>
|
|
|
|
<li role="menuitem" ng-repeat="projector in projectors">
|
|
|
|
<a href="" ng-click="projectAgenda(projectorId=projector.id, tree=mainListTree)"
|
|
|
|
ng-class="{ 'projected': isAgendaProjected(mainListTree) == projector.id }">
|
|
|
|
<i class="fa fa-video-camera" ng-show="isAgendaProjected(mainListTree) == projector.id"></i>
|
|
|
|
{{ projector.name }}
|
|
|
|
<span ng-if="projector.id == defaultProjectorId_all_items">(<translate>Standard</translate>)</span>
|
|
|
|
</a>
|
|
|
|
</li>
|
2016-02-24 21:01:52 +01:00
|
|
|
</ul>
|
|
|
|
</div>
|
2015-11-29 22:25:01 +01:00
|
|
|
<!-- auto numbering button -->
|
|
|
|
<a os-perms="core.can_manage_projector"
|
2016-01-25 21:22:22 +01:00
|
|
|
class="btn btn-default"
|
2015-11-29 22:25:01 +01:00
|
|
|
ng-click="autoNumbering()">
|
|
|
|
<i class="fa fa-sort-numeric-asc"></i>
|
2016-01-25 21:22:22 +01:00
|
|
|
<translate>Numbering</translate>
|
2015-11-29 22:25:01 +01:00
|
|
|
</a>
|
2016-07-27 14:32:52 +02:00
|
|
|
<!--current list of speakers button-->
|
|
|
|
<a os-perms="users.can_see_name" class="btn btn-default"
|
|
|
|
ui-sref="agenda.current-list-of-speakers">
|
|
|
|
<i class="fa fa-microphone"></i>
|
2016-09-12 11:05:34 +02:00
|
|
|
<translate>Current list of speakers</translate>
|
2016-07-27 14:32:52 +02:00
|
|
|
</a>
|
2016-01-25 21:22:22 +01:00
|
|
|
</div>
|
2015-11-29 22:25:01 +01:00
|
|
|
</div>
|
2016-01-25 21:22:22 +01:00
|
|
|
<div class="col-sm-5">
|
2015-11-29 22:25:01 +01:00
|
|
|
<div class="form-inline text-right">
|
|
|
|
<div class="form-group">
|
|
|
|
<div class="input-group">
|
|
|
|
<div class="input-group-addon"><i class="fa fa-search"></i></div>
|
2016-04-17 19:50:26 +02:00
|
|
|
<input type="text" ng-model="filter.search" class="form-control"
|
2015-11-29 22:25:01 +01:00
|
|
|
placeholder="{{ 'Search' | translate}}">
|
|
|
|
</div>
|
|
|
|
</div>
|
2016-01-21 20:43:04 +01:00
|
|
|
<button class="btn btn-default" ng-click="isFilterOpen = !isFilterOpen"
|
|
|
|
ng-class="isFilterOpen ? 'btn-primary' : 'btn-default'">
|
2015-11-29 22:25:01 +01:00
|
|
|
<i class="fa fa-filter"></i>
|
2015-12-11 20:04:05 +01:00
|
|
|
<translate>Filter ...</translate>
|
2015-11-29 22:25:01 +01:00
|
|
|
</button>
|
2015-09-05 16:30:55 +02:00
|
|
|
</div>
|
2015-11-29 22:25:01 +01:00
|
|
|
</div>
|
2015-03-09 15:40:54 +01:00
|
|
|
</div>
|
2015-12-11 19:50:50 +01:00
|
|
|
<div uib-collapse="!isFilterOpen" class="row spacer">
|
2015-11-29 22:25:01 +01:00
|
|
|
<div class="col-sm-12 text-right">
|
|
|
|
<!-- hidden item filter -->
|
2016-01-09 16:24:37 +01:00
|
|
|
<input type="checkbox" ng-model="filter.showHiddenItems" ng-true-value="" ng-false-value="false">
|
|
|
|
<translate> Show internal items</translate>
|
2015-11-29 22:25:01 +01:00
|
|
|
<!-- closed filter -->
|
2016-01-09 16:24:37 +01:00
|
|
|
<input type="checkbox" ng-model="filter.showClosedItems" ng-true-value="" ng-false-value="false">
|
|
|
|
<translate> Show closed items</translate>
|
2015-11-29 22:25:01 +01:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div uib-collapse="!isDeleteMode" class="row spacer">
|
|
|
|
<div class="col-sm-12 text-left">
|
|
|
|
<!-- delete button -->
|
2016-09-21 14:43:46 +02:00
|
|
|
<a ng-show="isDeleteMode" os-perms="agenda.can_manage"
|
|
|
|
ng-bootbox-confirm="{{ 'Are you sure you want to delete all selected agenda items?' | translate }}"
|
|
|
|
ng-bootbox-confirm-action="deleteMultiple()"
|
|
|
|
class="btn btn-primary">
|
2015-11-29 22:25:01 +01:00
|
|
|
<i class="fa fa-trash fa-lg"></i>
|
|
|
|
<translate>Delete selected items</translate>
|
|
|
|
</a>
|
2015-09-05 16:30:55 +02:00
|
|
|
</div>
|
2015-03-09 15:40:54 +01:00
|
|
|
</div>
|
|
|
|
|
2015-12-04 12:25:39 +01:00
|
|
|
<div class="spacer-top-lg italic">
|
2016-01-21 20:43:04 +01:00
|
|
|
<span os-perms="agenda.can_see_hidden_items">{{ itemsFiltered.length }} /</span>
|
2015-11-29 22:25:01 +01:00
|
|
|
{{ items.length }} {{ "items" | translate }}<span ng-if="(items|filter:{selected:true}).length > 0">,
|
|
|
|
{{(items|filter:{selected:true}).length}} {{ "selected" | translate }}</span>
|
2015-12-04 12:25:39 +01:00
|
|
|
</div>
|
2015-11-29 22:25:01 +01:00
|
|
|
<table class="table table-striped table-bordered table-hover">
|
|
|
|
<thead>
|
|
|
|
<tr>
|
|
|
|
<!-- projector column -->
|
|
|
|
<th ng-show="!isDeleteMode" os-perms="core.can_manage_projector" class="minimum"></th>
|
|
|
|
<!-- delete selection column -->
|
2016-01-10 00:52:37 +01:00
|
|
|
<th ng-show="isDeleteMode" os-perms="agenda.can_manage" class="minimum deleteColumn"
|
2015-11-29 22:25:01 +01:00
|
|
|
ng-click="$event.stopPropagation();">
|
2016-01-10 00:52:37 +01:00
|
|
|
<input type="checkbox" ng-model="$parent.selectedAll" ng-change="checkAll()">
|
2015-11-29 22:25:01 +01:00
|
|
|
<!-- agenda item column -->
|
|
|
|
<th>
|
|
|
|
<translate>Agenda item</translate>
|
2016-04-17 19:50:26 +02:00
|
|
|
<th os-perms="agenda.can_see_hidden_items" class="optional">
|
2015-11-29 22:25:01 +01:00
|
|
|
<translate>Duration</translate>
|
2016-09-22 13:19:11 +02:00
|
|
|
<span ng-if="sumDurations() > 0">
|
|
|
|
{{ sumDurations() | osMinutesToTime }}h
|
|
|
|
<span ng-if="config('agenda_start_event_date_time')">
|
|
|
|
(<translate>Estimated end:</translate> {{ calculateEndTime() }})
|
|
|
|
</span>
|
|
|
|
</span>
|
2016-04-17 19:50:26 +02:00
|
|
|
<th class="minimum optional">
|
2015-11-29 22:25:01 +01:00
|
|
|
<translate>Done</translate>
|
|
|
|
<tbody>
|
2016-01-21 20:43:04 +01:00
|
|
|
<tr ng-repeat="item in itemsFiltered = (items | filter: filter.search |
|
2016-02-02 20:54:03 +01:00
|
|
|
filter: {is_hidden: filter.showHiddenItems} | filter: {closed: filter.showClosedItems}) |
|
|
|
|
limitTo : itemsPerPage : limitBegin"
|
2015-11-29 22:25:01 +01:00
|
|
|
class="animate-item"
|
2016-01-09 16:24:37 +01:00
|
|
|
ng-class="{ 'activeline': item.isProjected(), 'selected': item.selected, 'hiddenrow': item.is_hidden}">
|
2015-11-29 22:25:01 +01:00
|
|
|
<!-- projector column -->
|
|
|
|
<td ng-show="!isDeleteMode" os-perms="core.can_manage_projector">
|
2016-09-12 11:05:34 +02:00
|
|
|
<div class="btn-group" style="min-width:54px;" uib-dropdown
|
|
|
|
uib-tooltip="{{ 'Projector' | translate }} {{ item.isProjected(item.tree) }}"
|
|
|
|
tooltip-enable="item.isProjected(item.tree) > 0">
|
|
|
|
<button class="btn btn-default btn-sm"
|
2016-02-24 21:01:52 +01:00
|
|
|
title="{{ 'Project item' | translate }}"
|
2016-09-12 11:05:34 +02:00
|
|
|
ng-click="item.project(getProjectionDefault(item), item.tree)"
|
|
|
|
ng-class="{ 'btn-primary': item.isProjected(item.tree) > 0 && item.isProjected(item.tree) == getProjectionDefault(item)}">
|
2016-02-24 21:01:52 +01:00
|
|
|
<i class="fa fa-video-camera"></i>
|
|
|
|
</button>
|
|
|
|
<button type="button" class="btn btn-default btn-sm slimDropDown"
|
2016-09-12 11:05:34 +02:00
|
|
|
ng-class="{ 'btn-primary': item.isProjected(item.tree) > 0 && item.isProjected(item.tree) != getProjectionDefault(item)}"
|
|
|
|
ng-show="item.hasSubitems(items) || projectors.length > 1"
|
2016-02-24 21:01:52 +01:00
|
|
|
uib-dropdown-toggle>
|
|
|
|
<span class="caret"></span>
|
|
|
|
</button>
|
2016-09-12 11:05:34 +02:00
|
|
|
<ul class="dropdown-menu" role="menu" aria-labelledby="split-button">
|
|
|
|
<li role="menuitem" ng-show="item.hasSubitems(items)">
|
|
|
|
<a href="" ng-click="changeItemTree(item); $event.stopPropagation();">
|
|
|
|
<i class="fa" ng-class="item.tree ? 'fa-check-square-o' : 'fa-square-o'"></i>
|
|
|
|
<translate>Include all sub items</translate>
|
|
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="divider" ng-show="item.hasSubitems(items)"></li>
|
|
|
|
<li role="menuitem" ng-repeat="projector in projectors">
|
|
|
|
<a href="" ng-click="item.project(projector.id, item.tree)"
|
|
|
|
ng-class="{ 'projected': item.isProjected(item.tree) == projector.id }">
|
|
|
|
<i class="fa fa-video-camera" ng-show="item.isProjected(item.tree) == projector.id"></i>
|
|
|
|
{{ projector.name }}
|
|
|
|
<span ng-if="projector.id == getProjectionDefault(item)">(<translate>Standard</translate>)</span>
|
|
|
|
</a>
|
|
|
|
</li>
|
2016-02-24 21:01:52 +01:00
|
|
|
</ul>
|
|
|
|
</div>
|
2015-11-29 22:25:01 +01:00
|
|
|
<!-- delete selection column -->
|
|
|
|
<td ng-show="isDeleteMode" os-perms="agenda.can_manage" class="deleteColumn">
|
|
|
|
<input type="checkbox" ng-model="item.selected">
|
|
|
|
<!-- agenda data columns -->
|
2016-01-18 21:40:50 +01:00
|
|
|
<td ng-if="!item.quickEdit" ng-mouseover="item.hover=true" ng-mouseleave="item.hover=false"
|
|
|
|
style="padding-left: calc(8px + {{ item.parentCount }}*15px)">
|
2015-11-29 22:25:01 +01:00
|
|
|
<strong>
|
2016-09-17 11:44:33 +02:00
|
|
|
<a ui-sref="{{ item.content_object.collection.replace('/','.') }}.detail({id: item.content_object.id})" ng-show="isAllowedToSeeOpenLink(item)">
|
2016-01-25 21:22:22 +01:00
|
|
|
{{ item.getListViewTitle() }}
|
2015-11-29 22:25:01 +01:00
|
|
|
</a>
|
2016-01-27 21:18:15 +01:00
|
|
|
<span ng-hide="isAllowedToSeeOpenLink(item)">
|
|
|
|
{{ item.getListViewTitle() }}
|
|
|
|
</span>
|
2015-11-29 22:25:01 +01:00
|
|
|
</strong>
|
2016-01-09 16:24:37 +01:00
|
|
|
<span ng-if="item.is_hidden" title="{{ 'Internal item' | translate }}"><i class="fa fa-ban"></i></span>
|
2015-11-29 22:25:01 +01:00
|
|
|
<div ng-if="item.comment">
|
|
|
|
<small><i class="fa fa-info-circle"></i> {{ item.comment }}</small>
|
|
|
|
</div>
|
2016-01-25 21:22:22 +01:00
|
|
|
<div os-perms="agenda.can_see" class="hoverActions" ng-class="{'hiddenDiv': !item.hover}">
|
|
|
|
<a ui-sref="agenda.item.detail({id: item.id})" translate>List of speakers</a>
|
|
|
|
<span os-perms="agenda.can_manage"> |
|
2016-09-17 11:44:33 +02:00
|
|
|
<a ui-sref="{{ item.content_object.collection.replace('/','.') }}.detail.update({id: item.content_object.id})"
|
|
|
|
translate>Edit</a> |
|
2016-02-08 21:07:35 +01:00
|
|
|
<a href="" ng-click="item.quickEdit=true" translate>QuickEdit</a> |
|
|
|
|
<a href="" class="text-danger"
|
|
|
|
ng-bootbox-confirm="{{ 'Are you sure you want to delete this entry?' | translate }}<br>
|
|
|
|
<b>{{ item.getTitle() }}</b>"
|
|
|
|
ng-bootbox-confirm-action="deleteRelatedItem(item)" translate>Delete</a>
|
2015-11-29 22:25:01 +01:00
|
|
|
</span>
|
2015-11-21 20:14:19 +01:00
|
|
|
</div>
|
2016-01-10 00:52:37 +01:00
|
|
|
<td ng-show="!item.quickEdit" os-perms="agenda.can_see_hidden_items" class="optional">
|
2016-09-22 13:19:11 +02:00
|
|
|
{{ item.duration | osMinutesToTime }}
|
2015-12-05 21:40:29 +01:00
|
|
|
<span ng-if="item.duration" translate-comment="'h' means time in hours" translate>h</span>
|
2016-04-17 19:50:26 +02:00
|
|
|
<td ng-if="!item.quickEdit" class="optional">
|
2016-01-25 21:22:22 +01:00
|
|
|
<span os-perms="!agenda.can_manage">
|
|
|
|
<i ng-if="item.closed" class="fa fa-check-square-o"></i>
|
|
|
|
</span>
|
2016-09-18 22:14:24 +02:00
|
|
|
<input os-perms="agenda.can_manage" type="checkbox" ng-model="item.closed" ng-change="save(item);">
|
2015-11-29 22:25:01 +01:00
|
|
|
<!-- quickEdit columns -->
|
2016-01-10 13:47:59 +01:00
|
|
|
<td ng-show="item.quickEdit" os-perms="agenda.can_manage" colspan="3">
|
2015-11-29 22:25:01 +01:00
|
|
|
<h4>{{ item.getTitle() }} <span class="text-muted">– QuickEdit</span></h4>
|
2016-09-18 21:09:37 +02:00
|
|
|
<div uib-alert ng-show="alert.show" ng-class="'alert-' + (alert.type || 'warning')" ng-click="alert={}" close="alert={}">
|
2016-02-08 21:19:13 +01:00
|
|
|
{{ alert.msg }}
|
2016-09-18 21:09:37 +02:00
|
|
|
</div>
|
2016-02-08 21:19:13 +01:00
|
|
|
<div class="row">
|
|
|
|
<div class="col-xs-6">
|
|
|
|
<label for="inputItemNumber" translate>Item number</label>
|
|
|
|
<input type="text" ng-model="item.item_number" class="form-control input-sm" id="inputItemNumber">
|
2015-11-21 20:14:19 +01:00
|
|
|
</div>
|
2016-02-08 21:19:13 +01:00
|
|
|
<div class="col-xs-6">
|
|
|
|
<label for="inputComment" translate>Comment</label>
|
|
|
|
<input type="text" ng-model="item.comment" class="form-control input-sm" id="inputComment">
|
2015-11-21 20:14:19 +01:00
|
|
|
</div>
|
2016-02-08 21:19:13 +01:00
|
|
|
</div>
|
|
|
|
<div class="row">
|
|
|
|
<div class="col-xs-6">
|
|
|
|
<!-- item type: AGENDA_ITEM = 1, HIDDEN_ITEM = 2 -->
|
|
|
|
<input type="checkbox" ng-model="item.type" ng-true-value="1" ng-false-value="2">
|
|
|
|
<translate>Show as agenda item</translate>
|
|
|
|
</div>
|
|
|
|
<div class="col-xs-6">
|
|
|
|
<label for="inputDuration" translate>Duration</label>
|
2016-09-22 13:19:11 +02:00
|
|
|
<input type="text" ng-model="item.duration" placeholder="hh:mm" hour-min-format
|
|
|
|
class="form-control input-sm" id="inputDuration">
|
2015-11-21 20:14:19 +01:00
|
|
|
</div>
|
2016-02-08 21:19:13 +01:00
|
|
|
</div>
|
|
|
|
<div class="spacer">
|
|
|
|
<button ng-click="cancelQuickEdit(item)" class="btn btn-default pull-left" translate>
|
|
|
|
Cancel
|
|
|
|
</button>
|
|
|
|
<button ng-click="save(item)" class="btn btn-primary" translate>
|
|
|
|
Update
|
|
|
|
</button>
|
2016-09-17 11:44:33 +02:00
|
|
|
<a ui-sref="{{ item.content_object.collection.replace('/','.') }}.detail.update({id: item.content_object.id})"
|
|
|
|
class="pull-right"><translate>Edit ...</translate></a>
|
2016-02-08 21:19:13 +01:00
|
|
|
</div>
|
2015-11-29 22:25:01 +01:00
|
|
|
</table>
|
2016-06-07 14:17:36 +02:00
|
|
|
<uib-pagination ng-show="itemsFiltered.length > itemsPerPage" total-items="itemsFiltered.length" items-per-page="itemsPerPage" ng-model="currentPage"
|
2016-02-17 13:46:20 +01:00
|
|
|
ng-change="pageChanged()"
|
|
|
|
class="pagination-sm" direction-links="false" boundary-links="true" first-text="«" last-text="»">
|
|
|
|
</uib-pagination>
|
2015-11-29 22:25:01 +01:00
|
|
|
</div>
|