session_list.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. $language_file = 'admin';
  4. $cidReset = true;
  5. require_once '../inc/global.inc.php';
  6. $this_section = SECTION_PLATFORM_ADMIN;
  7. api_protect_admin_script(true);
  8. //Add the JS needed to use the jqgrid
  9. $htmlHeadXtra[] = api_get_jqgrid_js();
  10. $htmlHeadXtra[] = api_get_js('json-js/json2.js');
  11. $htmlHeadXtra = api_get_datetime_picker_js($htmlHeadXtra);
  12. $action = $_REQUEST['action'];
  13. $idChecked = $_REQUEST['idChecked'];
  14. if ($action == 'delete') {
  15. SessionManager::delete_session($idChecked);
  16. header('Location: session_list.php');
  17. exit();
  18. } elseif ($action == 'copy') {
  19. SessionManager::copy_session($idChecked);
  20. header('Location: session_list.php');
  21. exit();
  22. }
  23. $interbreadcrumb[] = array("url" => "index.php","name" => get_lang('PlatformAdmin'));
  24. $tool_name = get_lang('SessionList');
  25. Display::display_header($tool_name);
  26. $error_message = ''; // Avoid conflict with the global variable $error_msg (array type) in add_course.conf.php.
  27. if (isset($_GET['action']) && $_GET['action'] == 'show_message') {
  28. $error_message = Security::remove_XSS($_GET['message']);
  29. }
  30. if (!empty($error_message)) {
  31. Display::display_normal_message($error_message, false);
  32. }
  33. //jqgrid will use this URL to do the selects
  34. $url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_sessions';
  35. if (isset($_REQUEST['keyword'])) {
  36. //Begin with see the searchOper param
  37. $url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_sessions&_search=true&rows=20&page=1&sidx=&sord=asc&filters=&searchField=name&searchString='.Security::remove_XSS($_REQUEST['keyword']).'&searchOper=bw';
  38. }
  39. //The order is important you need to check the the $column variable in the model.ajax.php file
  40. $columns = array(
  41. get_lang('Name'),
  42. get_lang('display_start_date'),
  43. get_lang('display_end_date'),
  44. get_lang('SessionCategoryName'),
  45. get_lang('StartDate'),
  46. get_lang('EndDate'),
  47. get_lang('Coach'),
  48. get_lang('Status'),
  49. get_lang('Visibility'),
  50. get_lang('Actions'));
  51. //$activeurl = '?sidx=session_active';
  52. //Column config
  53. $column_model = array (
  54. array('name'=>'name', 'index'=>'name', 'width'=>'120', 'align'=>'left', 'search' => 'true'),
  55. // array('name'=>'nbr_courses', 'index'=>'nbr_courses', 'width'=>'30', 'align'=>'left', 'search' => 'true'),
  56. // array('name'=>'nbr_users', 'index'=>'nbr_users', 'width'=>'30', 'align'=>'left', 'search' => 'true'),
  57. array('name'=>'display_start_date', 'index'=>'display_start_date', 'hidden' => 'true', 'width'=>'70', 'align'=>'left', 'search' => 'true', 'searchoptions' => array('searchhidden' =>'true')),
  58. array('name'=>'display_end_date', 'index'=>'display_end_date', 'hidden' => 'true', 'width'=>'70', 'align'=>'left', 'search' => 'true', 'searchoptions' => array('searchhidden' =>'true')),
  59. array('name'=>'category_name', 'index'=>'category_name', 'hidden' => 'true', 'width'=>'70', 'align'=>'left', 'search' => 'true', 'searchoptions' => array('searchhidden' =>'true')),
  60. array('name'=>'access_start_date', 'index'=>'access_start_date', 'width'=>'60', 'align'=>'left', 'search' => 'true', 'searchoptions' => array()),
  61. array('name'=>'access_end_date', 'index'=>'access_end_date', 'width'=>'60', 'align'=>'left', 'search' => 'true'),
  62. array('name'=>'coach_name', 'index'=>'coach_name', 'width'=>'70', 'align'=>'left', 'search' => 'false'),
  63. array('name'=>'status', 'index'=>'session_active','width'=>'40', 'align'=>'left', 'search' => 'true', 'stype'=>'select',
  64. //for the bottom bar
  65. 'searchoptions' => array(
  66. 'defaultValue' => '1',
  67. 'value' => '1:'.get_lang('Active').';0:'.get_lang('Inactive')),
  68. //for the top bar
  69. // 'editoptions' => array('value' => '" ":'.get_lang('All').';1:'.get_lang('Active').';0:'.get_lang('Inactive'))
  70. ),
  71. array('name'=>'visibility', 'index'=>'visibility', 'width'=>'40', 'align'=>'left', 'search' => 'false'),
  72. array('name'=>'actions', 'index'=>'actions', 'width'=>'80', 'align'=>'left','formatter'=>'action_formatter','sortable'=>'false', 'search' => 'false')
  73. );
  74. //Inject extra session fields
  75. $session_field = new SessionField();
  76. $session_field_option = new SessionFieldOption();
  77. $fields = $session_field->get_all();
  78. $rules = array();
  79. $rules[] = array( "field" => "display_start_date", "op" => "eq", "data" => "");
  80. $rules[] = array( "field" => "display_end_date", "op" => "eq", "data" => "");
  81. if (!empty($fields)) {
  82. foreach ($fields as $field) {
  83. $type = 'text';
  84. if ($field['field_type'] == UserManager::USER_FIELD_TYPE_SELECT) {
  85. $type = 'select';
  86. }
  87. $search_options = array();
  88. $search_options['searchhidden'] = true;
  89. $search_options['defaultValue'] = $search_options['field_default_value'];
  90. $search_options['value'] = $session_field_option->get_field_options_to_string($field['id']);
  91. $column_model[] = array(
  92. 'name' => $field['field_variable'],
  93. 'index' => 'extra_'.$field['field_variable'],
  94. 'width' => '100',
  95. 'hidden' => 'true',
  96. 'search' => 'true',
  97. 'stype' => $type,
  98. 'searchoptions' => $search_options
  99. );
  100. $columns[] = $field['field_display_text'];
  101. $rules[] = array('field' => 'extra_'.$field['field_variable'], 'op' => 'eq', 'data' => '');
  102. }
  103. $groups = array(
  104. 'groupOp'=> 'OR',
  105. 'rules' => $rules
  106. );
  107. }
  108. //Autowidth
  109. $extra_params['autowidth'] = 'true';
  110. //height auto
  111. $extra_params['height'] = 'auto';
  112. //$extra_params['excel'] = 'excel';
  113. $extra_params['rowList'] = array(10, 20 ,30);
  114. $extra_params['postData'] =array (
  115. 'filters' => array(
  116. "groupOp" => "AND",
  117. "rules" => $rules,
  118. /*array(
  119. array( "field" => "display_start_date", "op" => "gt", "data" => ""),
  120. array( "field" => "display_end_date", "op" => "gt", "data" => "")
  121. ),*/
  122. //'groups' => $groups
  123. ),
  124. );
  125. /*
  126. $filters = array('filters' => array( "groupOp" => "AND",
  127. "rules" => $rules));
  128. $filters = json_encode($filters);
  129. var_dump($filters);*/
  130. //With this function we can add actions to the jgrid (edit, delete, etc)
  131. $action_links = 'function action_formatter(cellvalue, options, rowObject) {
  132. return \'<a href="session_add.php?page=resume_session.php&id=\'+options.rowId+\'">'.Display::return_icon('edit.png',get_lang('Edit'),'',ICON_SIZE_SMALL).'</a>'.
  133. '&nbsp;<a href="add_users_to_session.php?page=session_list.php&id_session=\'+options.rowId+\'">'.Display::return_icon('user_subscribe_session.png',get_lang('SubscribeUsersToSession'),'',ICON_SIZE_SMALL).'</a>'.
  134. '&nbsp;<a href="add_courses_to_session.php?page=session_list.php&id_session=\'+options.rowId+\'">'.Display::return_icon('courses_to_session.png',get_lang('SubscribeCoursesToSession'),'',ICON_SIZE_SMALL).'</a>'.
  135. '&nbsp;<a onclick="javascript:if(!confirm('."\'".addslashes(api_htmlentities(get_lang("ConfirmYourChoice"),ENT_QUOTES))."\'".')) return false;" href="session_list.php?action=copy&idChecked=\'+options.rowId+\'">'.Display::return_icon('copy.png',get_lang('Copy'),'',ICON_SIZE_SMALL).'</a>'.
  136. '&nbsp;<a onclick="javascript:if(!confirm('."\'".addslashes(api_htmlentities(get_lang("ConfirmYourChoice"),ENT_QUOTES))."\'".')) return false;" href="session_list.php?action=delete&idChecked=\'+options.rowId+\'">'.Display::return_icon('delete.png',get_lang('Delete'),'',ICON_SIZE_SMALL).'</a>'.
  137. '\';
  138. }';
  139. ?>
  140. <script>
  141. function setSearchSelect(columnName) {
  142. $("#sessions").jqGrid('setColProp', columnName, {
  143. searchoptions:{
  144. dataInit:function(el){
  145. $("option[value='1']",el).attr("selected", "selected");
  146. setTimeout(function(){
  147. $(el).trigger('change');
  148. }, 1000);
  149. }
  150. }
  151. });
  152. }
  153. $(function() {
  154. <?php
  155. echo Display::grid_js('sessions', $url, $columns, $column_model, $extra_params, array(), $action_links,true);
  156. ?>
  157. setSearchSelect("status");
  158. var grid = $("#sessions"),
  159. prmSearch = {multipleSearch:true, overlay:false, width:600};
  160. grid.jqGrid('navGrid','#sessions_pager',
  161. {edit:false,add:false,del:false},
  162. {height:280,reloadAfterSubmit:false}, // edit options
  163. {height:280,reloadAfterSubmit:false}, // add options
  164. {reloadAfterSubmit:false},// del options
  165. prmSearch
  166. // {multipleSearch:true, overlay:false, width:500} // search options
  167. );
  168. // create the searching dialog
  169. grid.searchGrid(prmSearch);
  170. //var searchDialog = $("#fbox_"+grid[0].id);
  171. var searchDialog = $("#searchmodfbox_"+grid[0].id);
  172. searchDialog.addClass("ui-jqgrid ui-widget ui-widget-content ui-corner-all");
  173. searchDialog.css({position:"relative", "z-index":"auto", "float":"left"})
  174. var gbox = $("#gbox_"+grid[0].id);
  175. gbox.before(searchDialog);
  176. gbox.css({clear:"left"});
  177. /*
  178. // add custom button to export the data to excel
  179. jQuery("#sessions").jqGrid('navButtonAdd','#sessions_pager',{
  180. caption:"",
  181. onClickButton : function () {
  182. jQuery("#sessions").excelExport();
  183. }
  184. });
  185. jQuery('#sessions').jqGrid('navButtonAdd','#sessions_pager',{id:'pager_csv',caption:'',title:'Export To CSV',onClickButton : function(e)
  186. {
  187. try {
  188. jQuery("#sessions").jqGrid('excelExport',{tag:'csv', url:'grid.php'});
  189. } catch (e) {
  190. window.location= 'grid.php?oper=csv';
  191. }
  192. },buttonicon:'ui-icon-document'})
  193. */
  194. //Adding search options
  195. var options = {
  196. 'stringResult': true,
  197. 'autosearch' : true,
  198. 'searchOnEnter':false
  199. }
  200. grid.jqGrid('filterToolbar', options);
  201. var sgrid = $("#sessions")[0];
  202. sgrid.triggerToolbar();
  203. $("#start_date_start").datetimepicker({
  204. dateFormat: "yy-mm-dd",
  205. hour: 9,
  206. onSelect: function(selectedDateTime) {
  207. }
  208. });
  209. $("#start_date_end").datetimepicker({
  210. });
  211. $("#end_date_start").datetimepicker({
  212. });
  213. $("#end_date_end").datetimepicker({
  214. });
  215. $('form').submit(function() {
  216. var start = $("#start_date_start").datetimepicker("getDate");
  217. //var params = $(this).serialize();
  218. var filter = {
  219. "groupOp":"OR"
  220. }
  221. var rules = [];
  222. $.each($('form').serializeArray(), function(i, field) {
  223. rule = {'field': field.name,"op":"eq","data":field.value};
  224. rules.push(rule);
  225. });
  226. filter['rules'] = rules;
  227. filter = JSON.stringify(filter);
  228. console.log(filter);
  229. jQuery("#sessions").jqGrid('setGridParam',{
  230. url:"<?php echo $url ?>&search_form=1&filters="+filter,
  231. page:1
  232. }).trigger("reloadGrid");
  233. console.log(start);
  234. return false;
  235. });
  236. });
  237. </script>
  238. <div class="actions">
  239. <?php
  240. echo '<a href="'.api_get_path(WEB_CODE_PATH).'admin/session_add.php">'.Display::return_icon('new_session.png',get_lang('AddSession'),'',ICON_SIZE_MEDIUM).'</a>';
  241. echo '<a href="'.api_get_path(WEB_CODE_PATH).'admin/add_many_session_to_category.php">'.Display::return_icon('session_to_category.png',get_lang('AddSessionsInCategories'),'',ICON_SIZE_MEDIUM).'</a>';
  242. echo '<a href="'.api_get_path(WEB_CODE_PATH).'admin/session_category_list.php">'.Display::return_icon('folder.png',get_lang('ListSessionCategory'),'',ICON_SIZE_MEDIUM).'</a>';
  243. echo '</div>';
  244. $form = new FormValidator('search');
  245. $form->addElement('header', get_lang('Filter'));
  246. $form->addElement('text', 'start_date_start', get_lang('Between'), array('id' =>'start_date_start'));
  247. $form->addElement('text', 'start_date_end', get_lang('And'), array('id' =>'start_date_end'));
  248. $renderer = $form->defaultRenderer();
  249. $renderer->setElementTemplate(get_lang('StartDate').' {label} {element}', 'start_date_start');
  250. $renderer->setElementTemplate('{label} {element}', 'start_date_end');
  251. $form->addElement('html', '<div class="clear"></div>');
  252. $form->addElement('text', 'end_date_start', get_lang('Between'), array('id' =>'end_date_start'));
  253. $form->addElement('text', 'end_date_end', get_lang('And'), array('id' =>'end_date_end'));
  254. $renderer->setElementTemplate(get_lang('EndDate').' {label} {element}', 'end_date_start');
  255. $renderer->setElementTemplate('{label} {element}', 'end_date_end');
  256. $options = CourseManager::get_course_list_of_user_as_course_admin(api_get_user_id());
  257. $form->addElement('select', 'course', get_lang('Course'), $options);
  258. //$session_field->add_elements($form);
  259. $form->addElement('button', 'submit', get_lang('Search'), array('id' => 'search_button'));
  260. //$form->display();
  261. echo Display::grid_html('sessions');
  262. Display::display_footer();