PageRenderTime 29ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 1ms

/src/action/www/callcenter/settings/queues.php

https://gitlab.com/xivo.solutions/xivo-web-interface
PHP | 412 lines | 314 code | 81 blank | 17 comment | 80 complexity | 02e5fcaf8947a657cf48b0e25ccf4d53 MD5 | raw file
  1. <?php
  2. #
  3. # XiVO Web-Interface
  4. # Copyright (C) 2006-2017 Avencall
  5. #
  6. # This program is free software: you can redistribute it and/or modify
  7. # it under the terms of the GNU General Public License as published by
  8. # the Free Software Foundation, either version 3 of the License, or
  9. # (at your option) any later version.
  10. #
  11. # This program is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. # GNU General Public License for more details.
  15. #
  16. # You should have received a copy of the GNU General Public License
  17. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. #
  19. dwho::load_class('dwho_prefs');
  20. $prefs = new dwho_prefs('queues');
  21. $act = isset($_QR['act']) === true ? $_QR['act'] : '';
  22. $page = dwho_uint($prefs->get('page', 1));
  23. $search = strval($prefs->get('search', ''));
  24. $context = strval($prefs->get('context', ''));
  25. $sort = $prefs->flipflop('sort', 'name');
  26. $appschedule = &$ipbx->get_application('schedule');
  27. $apppenalty = &$ipbx->get_application('queuepenalty');
  28. $param = array();
  29. $param['act'] = 'list';
  30. if($search !== '')
  31. $param['search'] = $search;
  32. $info = $result = array();
  33. switch($act)
  34. {
  35. case 'add':
  36. $appqueue = &$ipbx->get_application('queue');
  37. $fm_save = $error = null;
  38. $result = array();
  39. $pannounce = array();
  40. $pannounce['list'] = $appqueue->get_announce();
  41. $pannounce['slt'] = array();
  42. $user = $agent = array();
  43. $user['slt'] = $agent['slt'] = array();
  44. $userorder = array();
  45. $userorder['firstname'] = SORT_ASC;
  46. $userorder['lastname'] = SORT_ASC;
  47. $appuser = &$ipbx->get_application('user',null);
  48. $user['list'] = $appuser->get_users_list(null,$userorder,null,true);
  49. $appagent = &$ipbx->get_application('agent',null,false);
  50. $agent['list'] = $appagent->get_agents_list(null,
  51. array('firstname' => SORT_ASC,
  52. 'lastname' => SORT_ASC,
  53. 'number' => SORT_ASC,
  54. 'context' => SORT_ASC),
  55. null,
  56. true);
  57. if(isset($_QR['fm_send']) === true
  58. && dwho_issa('queuefeatures',$_QR) === true
  59. && dwho_issa('queue',$_QR) === true)
  60. {
  61. $err = false;
  62. if(isset($_QR['queue']['joinempty'])
  63. && is_array($_QR['queue']['joinempty']))
  64. $_QR['queue']['joinempty'] = implode(',', $_QR['queue']['joinempty']);
  65. if(isset($_QR['queue']['leavewhenempty'])
  66. && is_array($_QR['queue']['leavewhenempty']))
  67. $_QR['queue']['leavewhenempty'] = implode(',', $_QR['queue']['leavewhenempty']);
  68. if($appqueue->set_add($_QR) === false
  69. || $err === true
  70. || $appqueue->add() === false)
  71. {
  72. $fm_save = false;
  73. $result = $appqueue->get_result();
  74. $error = $appqueue->get_error();
  75. $result['dialaction'] = $appqueue->get_dialaction_result();
  76. }
  77. else
  78. $_QRY->go($_TPL->url('callcenter/settings/queues'),$param);
  79. }
  80. if($pannounce['list'] !== false
  81. && dwho_issa('queue',$result) === true
  82. && dwho_ak('periodic-announce',$result['queue']) === true
  83. && empty($result['queue']['periodic-announce']) === false)
  84. {
  85. if(is_array($result['queue']['periodic-announce']) === false)
  86. $pannounce['slt'] = explode(',',$result['queue']['periodic-announce']);
  87. else
  88. $pannounce['slt'] = $result['queue']['periodic-announce'];
  89. $pannounce['slt'] = dwho_array_intersect_key(array_flip($pannounce['slt']),
  90. $pannounce['list']);
  91. if(empty($pannounce['slt']) === false)
  92. $pannounce['list'] = dwho_array_diff_key($pannounce['list'],
  93. $pannounce['slt']);
  94. }
  95. dwho::load_class('dwho_sort');
  96. if($user['list'] !== false && dwho_issa('user',$result) === true
  97. && ($user['slt'] = dwho_array_intersect_key($result['user'],$user['list'],'userid')) !== false)
  98. $user['slt'] = array_keys($user['slt']);
  99. if($agent['list'] !== false && dwho_issa('agent',$result) === true
  100. && ($agent['slt'] = dwho_array_intersect_key($result['agent'],$agent['list'],'userid')) !== false)
  101. $agent['slt'] = array_keys($agent['slt']);
  102. if(empty($result) === false)
  103. {
  104. if(dwho_issa('dialaction',$result) === false || empty($result['dialaction']) === true)
  105. $result['dialaction'] = null;
  106. if(dwho_issa('callerid',$result) === false || empty($result['callerid']) === true)
  107. $result['callerid'] = null;
  108. }
  109. if(array_key_exists('queue',$result))
  110. {
  111. if(!is_null($result['queue']['joinempty']))
  112. $result['queue']['joinempty'] = explode(',', $result['queue']['joinempty']);
  113. if(!is_null($result['queue']['leavewhenempty']))
  114. $result['queue']['leavewhenempty'] = explode(',', $result['queue']['leavewhenempty']);
  115. }
  116. $dhtml = &$_TPL->get_module('dhtml');
  117. $dhtml->set_js('js/dwho/uri.js');
  118. $dhtml->set_js('js/dwho/http.js');
  119. $dhtml->set_js('js/dwho/suggest.js');
  120. $dhtml->set_js('js/service/ipbx/'.$ipbx->get_name().'/dialaction.js');
  121. $dhtml->set_js('js/service/ipbx/'.$ipbx->get_name().'/callerid.js');
  122. $dhtml->set_js('js/service/ipbx/'.$ipbx->get_name().'/queues.js');
  123. $dhtml->load_js_multiselect_files();
  124. $_TPL->set_var('info',$result);
  125. $_TPL->set_var('error',$error);
  126. $_TPL->set_var('fm_save',$fm_save);
  127. if(array_key_exists('dialaction',$result))
  128. $_TPL->set_var('dialaction',$result['dialaction']);
  129. $_TPL->set_var('dialaction_from','queue');
  130. $_TPL->set_var('element',$appqueue->get_elements());
  131. $_TPL->set_var('user',$user);
  132. $_TPL->set_var('agent',$agent);
  133. $_TPL->set_var('pannounce',$pannounce);
  134. $_TPL->set_var('destination_list',$appqueue->get_dialaction_destination_list());
  135. $_TPL->set_var('moh_list',$appqueue->get_musiconhold());
  136. $_TPL->set_var('announce_list',$appqueue->get_announce());
  137. $_TPL->set_var('context_list',$appqueue->get_context_list(null,null,null,false,'internal'));
  138. $_TPL->set_var('exit_context_list',$appqueue->get_exit_context_list(null,null,null,false,Array('internal', 'services')));
  139. $_TPL->set_var('qualification',$qualification);
  140. if(array_key_exists('schedule_id', $result))
  141. $_TPL->set_var('schedule_id', $result['schedule_id']);
  142. break;
  143. case 'edit':
  144. $appqueue = &$ipbx->get_application('queue');
  145. if(isset($_QR['id']) === false || ($info = $appqueue->get($_QR['id'])) === false)
  146. $_QRY->go($_TPL->url('callcenter/settings/queues'),$param);
  147. $result = $fm_save = $error = null;
  148. $return = &$info;
  149. $pannounce = array();
  150. $pannounce['list'] = $appqueue->get_announce();
  151. $pannounce['slt'] = array();
  152. $user = $agent = array();
  153. $user['slt'] = $agent['slt'] = array();
  154. $userorder = array();
  155. $userorder['firstname'] = SORT_ASC;
  156. $userorder['lastname'] = SORT_ASC;
  157. $appuser = &$ipbx->get_application('user',null);
  158. $user['list'] = $appuser->get_users_list(null,$userorder,null,true);
  159. $qualificationorder = array();
  160. $qualificationorder['slt'] = array();
  161. $qualificationorder['name'] = SORT_ASC;
  162. $qualification['list'] = $appqueue->get_qualifications_list(null,$qualificationorder,null,true);
  163. $appagent = &$ipbx->get_application('agent',null,false);
  164. $agent['list'] = $appagent->get_agents_list(null,
  165. array('firstname' => SORT_ASC,
  166. 'lastname' => SORT_ASC,
  167. 'number' => SORT_ASC,
  168. 'context' => SORT_ASC),
  169. null,
  170. true);
  171. if(isset($_QR['fm_send']) === true
  172. && dwho_issa('queuefeatures',$_QR) === true
  173. && dwho_issa('queue',$_QR) === true)
  174. {
  175. $return = &$result;
  176. $err = false;
  177. if(isset($_QR['queue']['joinempty'])
  178. && is_array($_QR['queue']['joinempty']))
  179. $_QR['queue']['joinempty'] = implode(',', $_QR['queue']['joinempty']);
  180. if(isset($_QR['queue']['leavewhenempty'])
  181. && is_array($_QR['queue']['leavewhenempty']))
  182. $_QR['queue']['leavewhenempty'] = implode(',', $_QR['queue']['leavewhenempty']);
  183. if($appqueue->set_edit($_QR) === false
  184. || $err === true
  185. || $appqueue->edit() === false)
  186. {
  187. $fm_save = false;
  188. $result = $appqueue->get_result();
  189. $error = $appqueue->get_error();
  190. $result['dialaction'] = $appqueue->get_dialaction_result();
  191. }
  192. else
  193. $_QRY->go($_TPL->url('callcenter/settings/queues'),$param);
  194. }
  195. if($pannounce['list'] !== false
  196. && dwho_issa('queue',$return) === true
  197. && dwho_ak('periodic-announce',$return['queue']) === true
  198. && empty($return['queue']['periodic-announce']) === false)
  199. {
  200. if(is_array($return['queue']['periodic-announce']) === false)
  201. $pannounce['slt'] = explode(',',$return['queue']['periodic-announce']);
  202. else
  203. $pannounce['slt'] = $return['queue']['periodic-announce'];
  204. $pannounce['slt'] = dwho_array_intersect_key(array_flip($pannounce['slt']),
  205. $pannounce['list']);
  206. if(empty($pannounce['slt']) === false)
  207. $pannounce['list'] = dwho_array_diff_key($pannounce['list'],
  208. $pannounce['slt']);
  209. }
  210. dwho::load_class('dwho_sort');
  211. if($user['list'] !== false && dwho_issa('user',$return) === true
  212. && ($user['slt'] = dwho_array_intersect_key($return['user'],$user['list'],'userid')) !== false)
  213. $user['slt'] = array_keys($user['slt']);
  214. if($qualification['list'] !== false && dwho_issa('queuequalification',$return) === true
  215. && ($qualification['slt'] = dwho_array_intersect_key($return['queuequalification'],$qualification['list'], 'id')) !== false)
  216. $qualification['slt'] = array_keys($qualification['slt']);
  217. if($agent['list'] !== false && dwho_issa('agent',$return) === true
  218. && ($agent['slt'] = dwho_array_intersect_key($return['agent'],$agent['list'],'userid')) !== false)
  219. $agent['slt'] = array_keys($agent['slt']);
  220. if(empty($return) === false)
  221. {
  222. if(dwho_issa('dialaction',$return) === false || empty($return['dialaction']) === true)
  223. $return['dialaction'] = null;
  224. if(dwho_issa('callerid',$return) === false || empty($return['callerid']) === true)
  225. $return['callerid'] = null;
  226. }
  227. if(!is_null($return['queue']['joinempty']))
  228. $return['queue']['joinempty'] = explode(',', $return['queue']['joinempty']);
  229. if(!is_null($return['queue']['leavewhenempty']))
  230. $return['queue']['leavewhenempty'] = explode(',', $return['queue']['leavewhenempty']);
  231. $dhtml = &$_TPL->get_module('dhtml');
  232. $dhtml->set_js('js/dwho/uri.js');
  233. $dhtml->set_js('js/dwho/http.js');
  234. $dhtml->set_js('js/dwho/suggest.js');
  235. $dhtml->set_js('js/service/ipbx/'.$ipbx->get_name().'/dialaction.js');
  236. $dhtml->set_js('js/service/ipbx/'.$ipbx->get_name().'/callerid.js');
  237. $dhtml->set_js('js/service/ipbx/'.$ipbx->get_name().'/queues.js');
  238. $dhtml->load_js_multiselect_files();
  239. $_TPL->set_var('id',$info['queuefeatures']['id']);
  240. $_TPL->set_var('info',$return);
  241. $_TPL->set_var('error',$error);
  242. $_TPL->set_var('fm_save',$fm_save);
  243. $_TPL->set_var('dialaction',$return['dialaction']);
  244. $_TPL->set_var('dialaction_from','queue');
  245. $_TPL->set_var('element',$appqueue->get_elements());
  246. $_TPL->set_var('user',$user);
  247. $_TPL->set_var('agent',$agent);
  248. $_TPL->set_var('pannounce',$pannounce);
  249. $_TPL->set_var('destination_list',$appqueue->get_dialaction_destination_list());
  250. $_TPL->set_var('moh_list',$appqueue->get_musiconhold());
  251. $_TPL->set_var('announce_list',$appqueue->get_announce());
  252. $_TPL->set_var('context_list',$appqueue->get_context_list(null,null,null,false,'internal'));
  253. $_TPL->set_var('exit_context_list',$appqueue->get_exit_context_list(null,null,null,false,Array('internal', 'services')));
  254. $_TPL->set_var('qualification',$qualification);
  255. if(array_key_exists('schedule_id',$return))
  256. $_TPL->set_var('schedule_id', $return['schedule_id']);
  257. break;
  258. case 'delete':
  259. $param['page'] = $page;
  260. $appqueue = &$ipbx->get_application('queue');
  261. if(isset($_QR['id']) === false || $appqueue->get($_QR['id']) === false)
  262. $_QRY->go($_TPL->url('callcenter/settings/queues'),$param);
  263. $appqueue->delete();
  264. $_QRY->go($_TPL->url('callcenter/settings/queues'),$param);
  265. break;
  266. case 'deletes':
  267. $param['page'] = $page;
  268. if(($values = dwho_issa_val('queues',$_QR)) === false)
  269. $_QRY->go($_TPL->url('callcenter/settings/queues'),$param);
  270. $appqueue = &$ipbx->get_application('queue');
  271. $nb = count($values);
  272. for($i = 0;$i < $nb;$i++)
  273. {
  274. if($appqueue->get($values[$i]) !== false)
  275. $appqueue->delete();
  276. }
  277. $_QRY->go($_TPL->url('callcenter/settings/queues'),$param);
  278. break;
  279. case 'disables':
  280. case 'enables':
  281. $param['page'] = $page;
  282. $disable = $act === 'disables';
  283. $invdisable = $disable === false;
  284. if(($values = dwho_issa_val('queues',$_QR)) === false)
  285. $_QRY->go($_TPL->url('callcenter/settings/queues'),$param);
  286. $queuefeatures = &$ipbx->get_module('queuefeatures');
  287. $queue = &$ipbx->get_module('queue');
  288. $nb = count($values);
  289. for($i = 0;$i < $nb;$i++)
  290. {
  291. if(($info = $queuefeatures->get($values[$i])) !== false)
  292. $queue->disable($info['name'],$disable);
  293. }
  294. $_QRY->go($_TPL->url('callcenter/settings/queues'),$param);
  295. break;
  296. default:
  297. $act = 'list';
  298. $prevpage = $page - 1;
  299. $nbbypage = XIVO_SRE_IPBX_AST_NBBYPAGE;
  300. $appqueue = &$ipbx->get_application('queue',null,false);
  301. $order = array();
  302. $order[$sort[1]] = $sort[0];
  303. $limit = array();
  304. $limit[0] = $prevpage * $nbbypage;
  305. $limit[1] = $nbbypage;
  306. if($search !== '')
  307. $list = $appqueue->get_queues_search($search,null,$order,$limit);
  308. else
  309. $list = $appqueue->get_queues_list(null,$order,$limit);
  310. $total = $appqueue->get_cnt();
  311. if($list === false && $total > 0 && $prevpage > 0)
  312. {
  313. $param['page'] = $prevpage;
  314. $_QRY->go($_TPL->url('callcenter/settings/queues'),$param);
  315. }
  316. $_TPL->set_var('pager',dwho_calc_page($page,$nbbypage,$total));
  317. $_TPL->set_var('list',$list);
  318. $_TPL->set_var('search',$search);
  319. $_TPL->set_var('sort',$sort);
  320. }
  321. $_TPL->set_var('act',$act);
  322. $_TPL->set_var('schedules',$appschedule->get_schedules_list());
  323. $_TPL->set_var('defaultrules',$apppenalty->get_queuepenalty_list());
  324. $menu = &$_TPL->get_module('menu');
  325. $menu->set_top('top/user/'.$_USR->get_info('meta'));
  326. $menu->set_left('left/callcenter/menu');
  327. $menu->set_toolbar('toolbar/callcenter/settings/queues');
  328. $_TPL->set_bloc('main','callcenter/settings/queues/'.$act);
  329. $_TPL->set_struct('service/ipbx/'.$ipbx->get_name());
  330. $_TPL->display('index');
  331. ?>