PageRenderTime 40ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/scp/ajax.php

https://gitlab.com/milo-ft/osTicket
PHP | 269 lines | 238 code | 8 blank | 23 comment | 4 complexity | 9158bf6d846f148234223191add8aca9 MD5 | raw file
  1. <?php
  2. /*********************************************************************
  3. ajax.php
  4. Ajax utils interface.
  5. Peter Rotich <peter@osticket.com>
  6. Copyright (c) 2006-2013 osTicket
  7. http://www.osticket.com
  8. Released under the GNU General Public License WITHOUT ANY WARRANTY.
  9. See LICENSE.TXT for details.
  10. vim: expandtab sw=4 ts=4 sts=4:
  11. **********************************************************************/
  12. # Override staffLoginPage() defined in staff.inc.php to return an
  13. # HTTP/Forbidden status rather than the actual login page.
  14. # XXX: This should be moved to the AjaxController class
  15. function staffLoginPage($msg='Unauthorized') {
  16. Http::response(403,'Must login: '.Format::htmlchars($msg));
  17. exit;
  18. }
  19. define('AJAX_REQUEST', 1);
  20. require('staff.inc.php');
  21. //Clean house...don't let the world see your crap.
  22. ini_set('display_errors','0'); //Disable error display
  23. ini_set('display_startup_errors','0');
  24. //TODO: disable direct access via the browser? i,e All request must have REFER?
  25. if(!defined('INCLUDE_DIR')) Http::response(500, 'Server configuration error');
  26. require_once INCLUDE_DIR.'/class.dispatcher.php';
  27. require_once INCLUDE_DIR.'/class.ajax.php';
  28. $dispatcher = patterns('',
  29. url('^/kb/', patterns('ajax.kbase.php:KbaseAjaxAPI',
  30. # Send ticket-id as a query arg => canned-response/33?ticket=83
  31. url_get('^canned-response/(?P<id>\d+).(?P<format>json|txt)', 'cannedResp'),
  32. url('^faq/(?P<id>\d+)/access', 'manageFaqAccess'),
  33. url_get('^faq/(?P<id>\d+)$', 'faq')
  34. )),
  35. url('^/content/', patterns('ajax.content.php:ContentAjaxAPI',
  36. url_get('^log/(?P<id>\d+)', 'log'),
  37. url_get('^context$', 'context'),
  38. url_get('^ticket_variables', 'ticket_variables'),
  39. url_get('^signature/(?P<type>\w+)(?:/(?P<id>\d+))?$', 'getSignature'),
  40. url_get('^(?P<id>\d+)/(?:(?P<lang>\w+)/)?manage$', 'manageContent'),
  41. url_get('^(?P<id>[\w-]+)/(?:(?P<lang>\w+)/)?manage$', 'manageNamedContent'),
  42. url_post('^(?P<id>\d+)(?:/(?P<lang>\w+))?$', 'updateContent')
  43. )),
  44. url('^/config/', patterns('ajax.config.php:ConfigAjaxAPI',
  45. url_get('^scp', 'scp'),
  46. url_get('^links', 'templateLinks'),
  47. url_get('^date-format', 'dateFormat')
  48. )),
  49. url('^/form/', patterns('ajax.forms.php:DynamicFormsAjaxAPI',
  50. url_get('^help-topic/(?P<id>\d+)$', 'getFormsForHelpTopic'),
  51. url_get('^field-config/(?P<id>\d+)$', 'getFieldConfiguration'),
  52. url_post('^field-config/(?P<id>\d+)$', 'saveFieldConfiguration'),
  53. url_delete('^answer/(?P<entry>\d+)/(?P<field>\d+)$', 'deleteAnswer'),
  54. url_post('^upload/(\d+)?$', 'upload'),
  55. url_post('^upload/(\w+)?$', 'attach'),
  56. url_get('^(?P<id>\d+)/fields/view$', 'getAllFields')
  57. )),
  58. url('^/filter/', patterns('ajax.filter.php:FilterAjaxAPI',
  59. url_get('^action/(?P<type>\w+)/config$', 'getFilterActionForm')
  60. )),
  61. url('^/list/', patterns('ajax.forms.php:DynamicFormsAjaxAPI',
  62. url_get('^(?P<list>\w+)/items$', 'getListItems'),
  63. url_get('^(?P<list>\w+)/items/search$', 'searchListItems'),
  64. url_get('^(?P<list>\w+)/item/(?P<id>\d+)/update$', 'getListItem'),
  65. url_post('^(?P<list>\w+)/item/(?P<id>\d+)/update$', 'saveListItem'),
  66. url_get('^(?P<list>\w+)/items/(?P<id>\d+)/preview$', 'previewListItem'),
  67. url('^(?P<list>\w+)/item/add$', 'addListItem'),
  68. url('^(?P<list>\w+)/import$', 'importListItems'),
  69. url('^(?P<list>\w+)/manage$', 'massManageListItems'),
  70. url_post('^(?P<list>\w+)/delete$', 'deleteItems'),
  71. url_post('^(?P<list>\w+)/disable$', 'disableItems'),
  72. url_post('^(?P<list>\w+)/enable$', 'undisableItems')
  73. )),
  74. url('^/report/overview/', patterns('ajax.reports.php:OverviewReportAjaxAPI',
  75. # Send
  76. url_get('^graph$', 'getPlotData'),
  77. url_get('^table/groups$', 'enumTabularGroups'),
  78. url_get('^table/export$', 'downloadTabularData'),
  79. url_get('^table$', 'getTabularData')
  80. )),
  81. url('^/users', patterns('ajax.users.php:UsersAjaxAPI',
  82. url_get('^$', 'search'),
  83. url_get('^/local$', 'search', array('local')),
  84. url_get('^/remote$', 'search', array('remote')),
  85. url_get('^/(?P<id>\d+)$', 'getUser'),
  86. url_post('^/(?P<id>\d+)$', 'updateUser'),
  87. url_get('^/(?P<id>\d+)/preview$', 'preview'),
  88. url_get('^/(?P<id>\d+)/edit$', 'editUser'),
  89. url('^/lookup$', 'getUser'),
  90. url_get('^/lookup/form$', 'lookup'),
  91. url_post('^/lookup/form$', 'addUser'),
  92. url_get('^/add$', 'addUser'),
  93. url('^/import$', 'importUsers'),
  94. url_get('^/select$', 'selectUser'),
  95. url_get('^/select/(?P<id>\d+)$', 'selectUser'),
  96. url_get('^/select/auth:(?P<bk>\w+):(?P<id>.+)$', 'addRemoteUser'),
  97. url_get('^/(?P<id>\d+)/register$', 'register'),
  98. url_post('^/(?P<id>\d+)/register$', 'register'),
  99. url_get('^/(?P<id>\d+)/delete$', 'delete'),
  100. url_post('^/(?P<id>\d+)/delete$', 'delete'),
  101. url_get('^/(?P<id>\d+)/manage(?:/(?P<target>\w+))?$', 'manage'),
  102. url_post('^/(?P<id>\d+)/manage(?:/(?P<target>\w+))?$', 'manage'),
  103. url_get('^/(?P<id>\d+)/org(?:/(?P<orgid>\d+))?$', 'updateOrg'),
  104. url_post('^/(?P<id>\d+)/org$', 'updateOrg'),
  105. url_get('^/staff$', 'searchStaff'),
  106. url_post('^/(?P<id>\d+)/note$', 'createNote'),
  107. url_get('^/(?P<id>\d+)/forms/manage$', 'manageForms'),
  108. url_post('^/(?P<id>\d+)/forms/manage$', 'updateForms')
  109. )),
  110. url('^/orgs', patterns('ajax.orgs.php:OrgsAjaxAPI',
  111. url_get('^$', 'search'),
  112. url_get('^/search$', 'search'),
  113. url_get('^/(?P<id>\d+)$', 'getOrg'),
  114. url_post('^/(?P<id>\d+)$', 'updateOrg'),
  115. url_post('^/(?P<id>\d+)/profile$', 'updateOrg', array(true)),
  116. url_get('^/(?P<id>\d+)/edit$', 'editOrg'),
  117. url_get('^/lookup/form$', 'lookup'),
  118. url_post('^/lookup$', 'lookup'),
  119. url_get('^/add$', 'addOrg'),
  120. url_post('^/add$', 'addOrg'),
  121. url_get('^/select$', 'selectOrg'),
  122. url_get('^/select/(?P<id>\d+)$', 'selectOrg'),
  123. url_get('^/(?P<id>\d+)/add-user(?:/(?P<userid>\d+))?$', 'addUser'),
  124. url_get('^/(?P<id>\d+)/add-user(?:/auth:(?P<userid>.+))?$', 'addUser', array(true)),
  125. url_post('^/(?P<id>\d+)/add-user$', 'addUser'),
  126. url('^/(?P<id>\d+)/import-users$', 'importUsers'),
  127. url_get('^/(?P<id>\d+)/delete$', 'delete'),
  128. url_delete('^/(?P<id>\d+)/delete$', 'delete'),
  129. url_post('^/(?P<id>\d+)/note$', 'createNote'),
  130. url_get('^/(?P<id>\d+)/forms/manage$', 'manageForms'),
  131. url_post('^/(?P<id>\d+)/forms/manage$', 'updateForms')
  132. )),
  133. url('^/lock/', patterns('ajax.tickets.php:TicketsAjaxAPI',
  134. url_post('^ticket/(?P<tid>\d+)$', 'acquireLock'),
  135. url_post('^(?P<id>\d+)/ticket/(?P<tid>\d+)/renew', 'renewLock'),
  136. url_post('^(?P<id>\d+)/release', 'releaseLock')
  137. )),
  138. url('^/tickets/', patterns('ajax.tickets.php:TicketsAjaxAPI',
  139. url_get('^(?P<tid>\d+)/change-user$', 'changeUserForm'),
  140. url_post('^(?P<tid>\d+)/change-user$', 'changeUser'),
  141. url_get('^(?P<tid>\d+)/user$', 'viewUser'),
  142. url_post('^(?P<tid>\d+)/user$', 'updateUser'),
  143. url_get('^(?P<tid>\d+)/preview', 'previewTicket'),
  144. url_get('^(?P<tid>\d+)/forms/manage$', 'manageForms'),
  145. url_post('^(?P<tid>\d+)/forms/manage$', 'updateForms'),
  146. url_get('^(?P<tid>\d+)/canned-resp/(?P<cid>\w+).(?P<format>json|txt)', 'cannedResponse'),
  147. url_get('^(?P<tid>\d+)/status/(?P<status>\w+)(?:/(?P<sid>\d+))?$', 'changeTicketStatus'),
  148. url_post('^(?P<tid>\d+)/status$', 'setTicketStatus'),
  149. url('^(?P<tid>\d+)/thread/(?P<thread_id>\d+)/(?P<action>\w+)$', 'triggerThreadAction'),
  150. url_get('^status/(?P<status>\w+)(?:/(?P<sid>\d+))?$', 'changeSelectedTicketsStatus'),
  151. url_post('^status/(?P<state>\w+)$', 'setSelectedTicketsStatus'),
  152. url_get('^(?P<tid>\d+)/tasks$', 'tasks'),
  153. url('^(?P<tid>\d+)/add-task$', 'addTask'),
  154. url_get('^(?P<tid>\d+)/tasks/(?P<id>\d+)/view$', 'task'),
  155. url_post('^(?P<tid>\d+)/tasks/(?P<id>\d+)$', 'task'),
  156. url_get('^lookup', 'lookup'),
  157. url('^mass/(?P<action>\w+)(?:/(?P<what>\w+))?', 'massProcess'),
  158. url('^(?P<tid>\d+)/transfer$', 'transfer'),
  159. url('^(?P<tid>\d+)/assign(?:/(?P<to>\w+))?$', 'assign'),
  160. url('^(?P<tid>\d+)/claim$', 'claim'),
  161. url('^search', patterns('ajax.search.php:SearchAjaxAPI',
  162. url_get('^$', 'getAdvancedSearchDialog'),
  163. url_post('^$', 'doSearch'),
  164. url_get('^quick$', 'doQuickSearch'),
  165. url_get('^/(?P<id>\d+)$', 'loadSearch'),
  166. url_post('^/(?P<id>\d+)$', 'saveSearch'),
  167. url_delete('^/(?P<id>\d+)$', 'deleteSearch'),
  168. url_post('^/create$', 'createSearch'),
  169. url_get('^/field/(?P<id>[\w_!:]+)$', 'addField')
  170. ))
  171. )),
  172. url('^/tasks/', patterns('ajax.tasks.php:TasksAjaxAPI',
  173. url_get('^(?P<tid>\d+)/preview$', 'preview'),
  174. url_get('^(?P<tid>\d+)/edit', 'edit'),
  175. url_post('^(?P<tid>\d+)/edit$', 'edit'),
  176. url_get('^(?P<tid>\d+)/transfer', 'transfer'),
  177. url_post('^(?P<tid>\d+)/transfer$', 'transfer'),
  178. url('^(?P<tid>\d+)/assign(?:/(?P<to>\w+))?$', 'assign'),
  179. url('^(?P<tid>\d+)/claim$', 'claim'),
  180. url_get('^(?P<tid>\d+)/delete', 'delete'),
  181. url_post('^(?P<tid>\d+)/delete$', 'delete'),
  182. url('^(?P<tid>\d+)/close', 'close'),
  183. url('^(?P<tid>\d+)/reopen', 'reopen'),
  184. url_get('^(?P<tid>\d+)/view$', 'task'),
  185. url_post('^(?P<tid>\d+)$', 'task'),
  186. url('^add$', 'add'),
  187. url('^lookup', 'lookup'),
  188. url('^mass/(?P<action>\w+)(?:/(?P<what>\w+))?', 'massProcess')
  189. )),
  190. url('^/thread/', patterns('ajax.thread.php:ThreadAjaxAPI',
  191. url_get('^(?P<tid>\d+)/collaborators/preview$', 'previewCollaborators'),
  192. url_get('^(?P<tid>\d+)/collaborators$', 'showCollaborators'),
  193. url_post('^(?P<tid>\d+)/collaborators$', 'updateCollaborators'),
  194. url_get('^(?P<tid>\d+)/add-collaborator/(?P<uid>\d+)$', 'addCollaborator'),
  195. url_get('^(?P<tid>\d+)/add-collaborator/auth:(?P<bk>\w+):(?P<id>.+)$', 'addRemoteCollaborator'),
  196. url('^(?P<tid>\d+)/add-collaborator$', 'addCollaborator'),
  197. url_get('^(?P<tid>\d+)/collaborators/(?P<cid>\d+)/view$', 'viewCollaborator'),
  198. url_post('^(?P<tid>\d+)/collaborators/(?P<cid>\d+)$', 'updateCollaborator')
  199. )),
  200. url('^/draft/', patterns('ajax.draft.php:DraftAjaxAPI',
  201. url_post('^(?P<id>\d+)$', 'updateDraft'),
  202. url_delete('^(?P<id>\d+)$', 'deleteDraft'),
  203. url_post('^(?P<id>\d+)/attach$', 'uploadInlineImage'),
  204. url_post('^(?P<namespace>[\w.]+)/attach$', 'uploadInlineImageEarly'),
  205. url_get('^(?P<namespace>[\w.]+)$', 'getDraft'),
  206. url_post('^(?P<namespace>[\w.]+)$', 'createDraft'),
  207. url_get('^images/browse$', 'getFileList')
  208. )),
  209. url('^/note/', patterns('ajax.note.php:NoteAjaxAPI',
  210. url_get('^(?P<id>\d+)$', 'getNote'),
  211. url_post('^(?P<id>\d+)$', 'updateNote'),
  212. url_delete('^(?P<id>\d+)$', 'deleteNote'),
  213. url_post('^attach/(?P<ext_id>\w\d+)$', 'createNote')
  214. )),
  215. url('^/sequence/', patterns('ajax.sequence.php:SequenceAjaxAPI',
  216. url_get('^(?P<id>\d+)$', 'current'),
  217. url_get('^manage$', 'manage'),
  218. url_post('^manage$', 'manage')
  219. )),
  220. url_post('^/upgrader', array('ajax.upgrader.php:UpgraderAjaxAPI', 'upgrade')),
  221. url('^/help/', patterns('ajax.tips.php:HelpTipAjaxAPI',
  222. url_get('^tips/(?P<namespace>[\w_.]+)$', 'getTipsJson'),
  223. url_get('^(?P<lang>[\w_]+)?/tips/(?P<namespace>[\w_.]+)$', 'getTipsJsonForLang')
  224. )),
  225. url('^/i18n/', patterns('ajax.i18n.php:i18nAjaxAPI',
  226. url_get('^langs/all$', 'getConfiguredLanguages'),
  227. url_get('^langs$', 'getSecondaryLanguages'),
  228. url_get('^translate/(?P<tag>\w+)$', 'getTranslations'),
  229. url_post('^translate/(?P<tag>\w+)$', 'updateTranslations'),
  230. url_get('^(?P<lang>[\w_]+)/(?P<tag>\w+)$', 'getLanguageFile')
  231. )),
  232. url('^/admin', patterns('ajax.admin.php:AdminAjaxAPI',
  233. url('^/quick-add', patterns('ajax.admin.php:AdminAjaxAPI',
  234. url('^/department$', 'addDepartment'),
  235. url('^/team$', 'addTeam'),
  236. url('^/role$', 'addRole'),
  237. url('^/staff$', 'addStaff')
  238. )),
  239. url_get('^/role/(?P<id>\d+)/perms', 'getRolePerms')
  240. )),
  241. url('^/staff', patterns('ajax.staff.php:StaffAjaxAPI',
  242. url('^/(?P<id>\d+)/set-password$', 'setPassword'),
  243. url('^/(?P<id>\d+)/change-password$', 'changePassword'),
  244. url_get('^/(?P<id>\d+)/perms', 'getAgentPerms'),
  245. url('^/reset-permissions', 'resetPermissions'),
  246. url('^/change-department', 'changeDepartment'),
  247. url('^/(?P<id>\d+)/avatar/change', 'setAvatar')
  248. ))
  249. );
  250. Signal::send('ajax.scp', $dispatcher);
  251. # Call the respective function
  252. $rv = $dispatcher->resolve($ost->get_path_info());
  253. // Indicate JSON response content-type
  254. if (is_string($rv) && $rv[0] == '{')
  255. Http::response(200, $rv, 'application/json');
  256. print $rv;
  257. ?>