PageRenderTime 49ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/upload/include/class.config.php

https://bitbucket.org/fstech/osticket
PHP | 607 lines | 455 code | 125 blank | 27 comment | 47 complexity | c90e408f87ce464629034bb914575d12 MD5 | raw file
  1. <?php
  2. /*********************************************************************
  3. class.config.php
  4. osTicket config info manager.
  5. Peter Rotich <peter@osticket.com>
  6. Copyright (c) 2006-2010 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. $Id: $
  12. **********************************************************************/
  13. require_once(INCLUDE_DIR.'class.email.php');
  14. class Config {
  15. var $id=0;
  16. var $mysqltzoffset=0;
  17. var $config=array();
  18. var $defaultDept; //Default Department
  19. var $defaultEmail; //Default Email
  20. var $alertEmail; //Alert Email
  21. var $defaultSMTPEmail; //Default SMTP Email
  22. function Config($id) {
  23. $this->load($id);
  24. }
  25. function load($id) {
  26. if($id && is_numeric($id)):
  27. $this->id=$id;
  28. $this->config=array();
  29. $res=db_query('SELECT * FROM '.CONFIG_TABLE.' WHERE id='.$id);
  30. if($res && db_num_rows($res))
  31. $this->config=db_fetch_array($res);
  32. endif;
  33. return $this->config?true:false;
  34. }
  35. //Initialize some default values.
  36. function init(){
  37. list($mysqltz)=db_fetch_row(db_query('SELECT @@session.time_zone '));
  38. $this->setMysqlTZ($mysqltz);
  39. }
  40. function reload() {
  41. if($this->load($this->id))
  42. $this->init();
  43. }
  44. function isHelpDeskOffline() {
  45. return $this->config['isonline']?false:true;
  46. }
  47. function getAPIPassphrase(){
  48. return $this->config['api_passphrase'];
  49. }
  50. function getVersion(){
  51. return $this->config['ostversion'];
  52. }
  53. function setMysqlTZ($tz){
  54. //TODO: Combine the 2 replace regex
  55. $this->mysqltzoffset=($tz=='SYSTEM')?preg_replace('/([+-]\d{2})(\d{2})/','\1',date('O')):preg_replace('/([+-]\d{2})(:)(\d{2})/','\1',$tz);
  56. }
  57. function getMysqlTZoffset() {
  58. return $this->mysqltzoffset;
  59. }
  60. /* Date & Time Formats */
  61. function observeDaylightSaving() {
  62. return $this->config['enable_daylight_saving']?true:false;
  63. }
  64. function getTimeFormat(){
  65. return $this->config['time_format'];
  66. }
  67. function getDateFormat(){
  68. return $this->config['date_format'];
  69. }
  70. function getDateTimeFormat(){
  71. return $this->config['datetime_format'];
  72. }
  73. function getDayDateTimeFormat(){
  74. return $this->config['daydatetime_format'];
  75. }
  76. function getId() {
  77. return $this->config['id'];
  78. }
  79. function getTitle() {
  80. return $this->config['helpdesk_title'];
  81. }
  82. function getUrl() {
  83. return $this->config['helpdesk_url'];
  84. }
  85. function getBaseUrl(){ //Same as above with no trailing slash.
  86. return rtrim($this->getUrl(),'/');
  87. }
  88. function getConfig() {
  89. return $this->config;
  90. }
  91. function getTZOffset(){
  92. return $this->config['timezone_offset'];
  93. }
  94. function getPageSize() {
  95. return $this->config['max_page_size'];
  96. }
  97. function getGracePeriod() {
  98. return $this->config['overdue_grace_period'];
  99. }
  100. function getClientTimeout() {
  101. return $this->getClientSessionTimeout();
  102. }
  103. function getClientSessionTimeout() {
  104. return $this->config['client_session_timeout']*60;
  105. }
  106. function getClientLoginTimeout() {
  107. return $this->config['client_login_timeout']*60;
  108. }
  109. function getClientMaxLogins() {
  110. return $this->config['client_max_logins'];
  111. }
  112. function getStaffTimeout() {
  113. return $this->getStaffSessionTimeout();
  114. }
  115. function getStaffSessionTimeout() {
  116. return $this->config['staff_session_timeout']*60;
  117. }
  118. function getStaffLoginTimeout() {
  119. return $this->config['staff_login_timeout']*60;
  120. }
  121. function getStaffMaxLogins() {
  122. return $this->config['staff_max_logins'];
  123. }
  124. function getLockTime() {
  125. return $this->config['autolock_minutes'];
  126. }
  127. function getDefaultDeptId(){
  128. return $this->config['default_dept_id'];
  129. }
  130. function getDefaultDept(){
  131. if(!$this->defaultDept && $this->getDefaultDeptId())
  132. $this->defaultDept= new Dept($this->getDefaultDeptId());
  133. return $this->defaultDept;
  134. }
  135. function getDefaultEmailId(){
  136. return $this->config['default_email_id'];
  137. }
  138. function getDefaultEmail(){
  139. if(!$this->defaultEmail && $this->getDefaultEmailId())
  140. $this->defaultEmail= new Email($this->getDefaultEmailId());
  141. return $this->defaultEmail;
  142. }
  143. function getDefaultEmailAddress() {
  144. $email=$this->getDefaultEmail();
  145. return $email?$email->getAddress():null;
  146. }
  147. function getAlertEmailId() {
  148. return $this->config['alert_email_id'];
  149. }
  150. function getAlertEmail(){
  151. if(!$this->alertEmail && $this->config['alert_email_id'])
  152. $this->alertEmail= new Email($this->config['alert_email_id']);
  153. return $this->alertEmail;
  154. }
  155. function getDefaultSMTPEmail(){
  156. if(!$this->defaultSMTPEmail && $this->config['default_smtp_id'])
  157. $this->defaultSMTPEmail= new Email($this->config['default_smtp_id']);
  158. return $this->defaultSMTPEmail;
  159. }
  160. function allowSMTPSpoofing() {
  161. return $this->config['spoof_default_smtp'];
  162. }
  163. function getDefaultPriorityId(){
  164. return $this->config['default_priority_id'];
  165. }
  166. function getDefaultTemplateId() {
  167. return $this->config['default_template_id'];
  168. }
  169. function getMaxOpenTickets() {
  170. return $this->config['max_open_tickets'];
  171. }
  172. function getMaxFileSize(){
  173. return $this->config['max_file_size'];
  174. }
  175. function getLogLevel(){
  176. return $this->config['log_level'];
  177. }
  178. function getLogGracePeriod(){
  179. return $this->config['log_graceperiod'];
  180. }
  181. function logTicketActivity(){
  182. return $this->config['log_ticket_activity'];
  183. }
  184. function clickableURLS() {
  185. return $this->config['clickable_urls']?true:false;
  186. }
  187. function canFetchMail() {
  188. return $this->config['enable_mail_fetch']?true:false;
  189. }
  190. function enableStaffIPBinding(){
  191. return $this->config['staff_ip_binding']?true:false;
  192. }
  193. function enableCaptcha() {
  194. //Checking it in real time!
  195. if(!extension_loaded('gd') || !function_exists('gd_info'))
  196. return false;
  197. return $this->config['enable_captcha']?true:false;
  198. }
  199. function enableAutoCron() {
  200. return $this->config['enable_auto_cron']?true:false;
  201. }
  202. function enableEmailPiping() {
  203. return $this->config['enable_email_piping']?true:false;
  204. }
  205. function allowPriorityChange() {
  206. return $this->config['allow_priority_change']?true:false;
  207. }
  208. function useEmailPriority() {
  209. return $this->config['use_email_priority']?true:false;
  210. }
  211. function getAdminEmail(){
  212. return $this->config['admin_email'];
  213. }
  214. function getReplySeparator() {
  215. return $this->config['reply_separator'];
  216. }
  217. function stripQuotedReply() {
  218. return $this->config['strip_quoted_reply']?true:false;
  219. }
  220. function saveEmailHeaders() {
  221. return true; //No longer an option...hint: big plans for headers coming!!
  222. }
  223. function useRandomIds() {
  224. return $this->config['random_ticket_ids']?true:false;
  225. }
  226. /* autoresponders & Alerts */
  227. function autoRespONNewTicket() {
  228. return $this->config['ticket_autoresponder']?true:false;
  229. }
  230. function autoRespONNewMessage() {
  231. return $this->config['message_autoresponder']?true:false;
  232. }
  233. function notifyONNewStaffTicket(){
  234. return $this->config['ticket_notice_active']?true:false;
  235. }
  236. function alertONNewMessage() {
  237. return $this->config['message_alert_active']?true:false;
  238. }
  239. function alertLastRespondentONNewMessage() {
  240. return $this->config['message_alert_laststaff']?true:false;
  241. }
  242. function alertAssignedONNewMessage() {
  243. return $this->config['message_alert_assigned']?true:false;
  244. }
  245. function alertDeptManagerONNewMessage() {
  246. return $this->config['message_alert_dept_manager']?true:false;
  247. }
  248. function alertONNewNote() {
  249. return $this->config['note_alert_active']?true:false;
  250. }
  251. function alertLastRespondentONNewNote() {
  252. return $this->config['note_alert_laststaff']?true:false;
  253. }
  254. function alertAssignedONNewNote() {
  255. return $this->config['note_alert_assigned']?true:false;
  256. }
  257. function alertDeptManagerONNewNote() {
  258. return $this->config['note_alert_dept_manager']?true:false;
  259. }
  260. function alertONNewTicket() {
  261. return $this->config['ticket_alert_active']?true:false;
  262. }
  263. function alertAdminONNewTicket() {
  264. return $this->config['ticket_alert_admin']?true:false;
  265. }
  266. function alertDeptManagerONNewTicket() {
  267. return $this->config['ticket_alert_dept_manager']?true:false;
  268. }
  269. function alertDeptMembersONNewTicket() {
  270. return $this->config['ticket_alert_dept_members']?true:false;
  271. }
  272. function alertONOverdueTicket() {
  273. return $this->config['overdue_alert_active']?true:false;
  274. }
  275. function alertAssignedONOverdueTicket() {
  276. return $this->config['overdue_alert_assigned']?true:false;
  277. }
  278. function alertDeptManagerONOverdueTicket() {
  279. return $this->config['overdue_alert_dept_manager']?true:false;
  280. }
  281. function alertDeptMembersONOverdueTicket() {
  282. return $this->config['overdue_alert_dept_members']?true:false;
  283. }
  284. function autoCloseTicketOnReply() {
  285. return $this->config['auto_close_ticket_on_reply']?true:false;
  286. }
  287. function autoAssignReopenedTickets() {
  288. return $this->config['auto_assign_reopened_tickets']?true:false;
  289. }
  290. function showAssignedTickets() {
  291. return $this->config['show_assigned_tickets']?true:false;
  292. }
  293. function showAnsweredTickets() {
  294. return $this->config['show_answered_tickets']?true:false;
  295. }
  296. function hideStaffName() {
  297. return $this->config['hide_staff_name']?true:false;
  298. }
  299. function sendOverLimitNotice() {
  300. return $this->config['overlimit_notice_active']?true:false;
  301. }
  302. /* Error alerts sent to admin email when enabled */
  303. function alertONSQLError() {
  304. return $this->config['send_sql_errors']?true:false;
  305. }
  306. function alertONLoginError() {
  307. return $this->config['send_login_errors']?true:false;
  308. }
  309. function alertONMailParseError() {
  310. return $this->config['send_mailparse_errors']?true:false;
  311. }
  312. /* Attachments */
  313. function emailAttachments() {
  314. return $this->config['email_attachments']?true:false;
  315. }
  316. function allowAttachments() {
  317. return $this->config['allow_attachments']?true:false;
  318. }
  319. function allowOnlineAttachments() {
  320. return ($this->allowAttachments() && $this->config['allow_online_attachments'])?true:false;
  321. }
  322. function allowAttachmentsOnlogin() {
  323. return ($this->allowOnlineAttachments() && $this->config['allow_online_attachments_onlogin'])?true:false;
  324. }
  325. function allowEmailAttachments() {
  326. return ($this->allowAttachments() && $this->config['allow_email_attachments'])?true:false;
  327. }
  328. function getUploadDir() {
  329. return $this->config['upload_dir'];
  330. }
  331. //simply checking if destination dir is usable..nothing to do with permission to upload!
  332. function canUploadFiles() {
  333. $dir=$this->config['upload_dir'];
  334. return ($dir && is_writable($dir))?TRUE:FALSE;
  335. }
  336. function canUploadFileType($filename) {
  337. $ext = strtolower(preg_replace("/.*\.(.{3,4})$/", "$1", $filename));
  338. $allowed=$this->config['allowed_filetypes']?array_map('trim',explode(',',strtolower($this->config['allowed_filetypes']))):null;
  339. return ($ext && is_array($allowed) && (in_array(".$ext",$allowed) || in_array(".*",$allowed)))?TRUE:FALSE;
  340. }
  341. function updatePref($var,&$errors) {
  342. if(!$var || $errors)
  343. return false;
  344. $f=array();
  345. $f['helpdesk_url']=array('type'=>'string', 'required'=>1, 'error'=>'Helpdesk URl required'); //TODO: Add url validation
  346. $f['helpdesk_title']=array('type'=>'string', 'required'=>1, 'error'=>'Helpdesk title required');
  347. $f['default_dept_id']=array('type'=>'int', 'required'=>1, 'error'=>'Default Dept. required');
  348. $f['default_email_id']=array('type'=>'int', 'required'=>1, 'error'=>'Default email required');
  349. $f['default_template_id']=array('type'=>'int', 'required'=>1, 'error'=>'You must select template.');
  350. $f['staff_session_timeout']=array('type'=>'int', 'required'=>1, 'error'=>'Enter idle time in minutes');
  351. $f['client_session_timeout']=array('type'=>'int', 'required'=>1, 'error'=>'Enter idle time in minutes');
  352. $f['time_format']=array('type'=>'string', 'required'=>1, 'error'=>'Time format required'); //TODO: Add date format validation
  353. $f['date_format']=array('type'=>'string', 'required'=>1, 'error'=>'Date format required');
  354. $f['datetime_format']=array('type'=>'string', 'required'=>1, 'error'=>'Datetime format required');
  355. $f['daydatetime_format']=array('type'=>'string', 'required'=>1, 'error'=>'Day, Datetime format required');
  356. $f['admin_email']=array('type'=>'email', 'required'=>1, 'error'=>'Valid email required');
  357. $f['autolock_minutes']=array('type'=>'int', 'required'=>1, 'error'=>'Enter lock time in minutes');
  358. //TODO: check option fields for validity.
  359. //do the validation.
  360. $val = new Validator();
  361. $val->setFields($f);
  362. if(!$val->validate($var)){
  363. $errors=array_merge($errors,$val->errors());
  364. }
  365. if($var['ticket_alert_active']
  366. && (!isset($var['ticket_alert_admin'])
  367. && !isset($var['ticket_alert_dept_manager'])
  368. && !isset($var['ticket_alert_dept_members']))){
  369. $errors['ticket_alert_active']='No target recipient(s) selected';
  370. }
  371. if($var['message_alert_active']
  372. && (!isset($var['message_alert_laststaff'])
  373. && !isset($var['message_alert_assigned'])
  374. && !isset($var['message_alert_dept_manager']))){
  375. $errors['message_alert_active']='No target recipient(s) selected';
  376. }
  377. if($var['note_alert_active']
  378. && (!isset($var['note_alert_laststaff'])
  379. && !isset($var['note_alert_assigned'])
  380. && !isset($var['note_alert_dept_manager']))){
  381. $errors['note_alert_active']='No target recipient(s) selected';
  382. }
  383. if($var['strip_quoted_reply'] && !$var['reply_separator'])
  384. $errors['reply_separator']='Reply separator required (?)';
  385. if($var['enable_captcha']){
  386. if (!extension_loaded('gd'))
  387. $errors['enable_captcha']='The GD extension required';
  388. elseif(!function_exists('imagepng'))
  389. $errors['enable_captcha']='PNG support required for Image Captcha';
  390. }
  391. if(!$errors['admin_email'] && Email::getIdByEmail($var['admin_email'])) //Make sure admin email is not also a system email.
  392. $errors['admin_email']='Email already setup as system email';
  393. if($errors) return false; //No go!
  394. //We are good to go...blanket update!
  395. $sql= 'UPDATE '.CONFIG_TABLE.' SET isonline='.db_input($var['isonline']).
  396. ',timezone_offset='.db_input($var['timezone_offset']).
  397. ',enable_daylight_saving='.db_input(isset($var['enable_daylight_saving'])?1:0).
  398. ',staff_ip_binding='.db_input(isset($var['staff_ip_binding'])?1:0).
  399. ',staff_max_logins='.db_input($var['staff_max_logins']).
  400. ',staff_login_timeout='.db_input($var['staff_login_timeout']).
  401. ',staff_session_timeout='.db_input($var['staff_session_timeout']).
  402. ',client_max_logins='.db_input($var['client_max_logins']).
  403. ',client_login_timeout='.db_input($var['client_login_timeout']).
  404. ',client_session_timeout='.db_input($var['client_session_timeout']).
  405. ',max_page_size='.db_input($var['max_page_size']).
  406. ',log_level='.db_input($var['log_level']).
  407. ',log_graceperiod='.db_input($var['log_graceperiod']).
  408. ',max_open_tickets='.db_input($var['max_open_tickets']).
  409. ',autolock_minutes='.db_input($var['autolock_minutes']).
  410. ',overdue_grace_period='.db_input($var['overdue_grace_period']).
  411. ',alert_email_id='.db_input($var['alert_email_id']).
  412. ',default_email_id='.db_input($var['default_email_id']).
  413. ',default_dept_id='.db_input($var['default_dept_id']).
  414. ',default_priority_id='.db_input($var['default_priority_id']).
  415. ',default_template_id='.db_input($var['default_template_id']).
  416. ',default_smtp_id='.db_input($var['default_smtp_id']).
  417. ',spoof_default_smtp='.db_input(($var['default_smtp'] && isset($var['spoof_default_smtp']))?1:0).
  418. ',clickable_urls='.db_input(isset($var['clickable_urls'])?1:0).
  419. ',allow_priority_change='.db_input(isset($var['allow_priority_change'])?1:0).
  420. ',use_email_priority='.db_input(isset($var['use_email_priority'])?1:0).
  421. ',enable_captcha='.db_input(isset($var['enable_captcha'])?1:0).
  422. ',enable_auto_cron='.db_input(isset($var['enable_auto_cron'])?1:0).
  423. ',enable_mail_fetch='.db_input(isset($var['enable_mail_fetch'])?1:0).
  424. ',enable_email_piping='.db_input(isset($var['enable_email_piping'])?1:0).
  425. ',send_sql_errors='.db_input(isset($var['send_sql_errors'])?1:0).
  426. ',send_login_errors='.db_input(isset($var['send_login_errors'])?1:0).
  427. ',save_email_headers='.db_input(isset($var['save_email_headers'])?1:0).
  428. ',strip_quoted_reply='.db_input(isset($var['strip_quoted_reply'])?1:0).
  429. ',log_ticket_activity='.db_input(isset($var['log_ticket_activity'])?1:0).
  430. ',ticket_autoresponder='.db_input($var['ticket_autoresponder']).
  431. ',message_autoresponder='.db_input($var['message_autoresponder']).
  432. ',ticket_notice_active='.db_input($var['ticket_notice_active']).
  433. ',ticket_alert_active='.db_input($var['ticket_alert_active']).
  434. ',ticket_alert_admin='.db_input(isset($var['ticket_alert_admin'])?1:0).
  435. ',ticket_alert_dept_manager='.db_input(isset($var['ticket_alert_dept_manager'])?1:0).
  436. ',ticket_alert_dept_members='.db_input(isset($var['ticket_alert_dept_members'])?1:0).
  437. ',message_alert_active='.db_input($var['message_alert_active']).
  438. ',message_alert_laststaff='.db_input(isset($var['message_alert_laststaff'])?1:0).
  439. ',message_alert_assigned='.db_input(isset($var['message_alert_assigned'])?1:0).
  440. ',message_alert_dept_manager='.db_input(isset($var['message_alert_dept_manager'])?1:0).
  441. ',note_alert_active='.db_input($var['note_alert_active']).
  442. ',note_alert_laststaff='.db_input(isset($var['note_alert_laststaff'])?1:0).
  443. ',note_alert_assigned='.db_input(isset($var['note_alert_assigned'])?1:0).
  444. ',note_alert_dept_manager='.db_input(isset($var['note_alert_dept_manager'])?1:0).
  445. ',overdue_alert_active='.db_input($var['overdue_alert_active']).
  446. ',overdue_alert_assigned='.db_input(isset($var['overdue_alert_assigned'])?1:0).
  447. ',overdue_alert_dept_manager='.db_input(isset($var['overdue_alert_dept_manager'])?1:0).
  448. ',overdue_alert_dept_members='.db_input(isset($var['overdue_alert_dept_members'])?1:0).
  449. ',auto_assign_reopened_tickets='.db_input(isset($var['auto_assign_reopened_tickets'])?1:0).
  450. ',auto_close_ticket_on_reply='.db_input(isset($var['auto_close_ticket_on_reply'])?1:0).
  451. ',show_assigned_tickets='.db_input(isset($var['show_assigned_tickets'])?1:0).
  452. ',show_answered_tickets='.db_input(isset($var['show_answered_tickets'])?1:0).
  453. ',hide_staff_name='.db_input(isset($var['hide_staff_name'])?1:0).
  454. ',overlimit_notice_active='.db_input($var['overlimit_notice_active']).
  455. ',random_ticket_ids='.db_input($var['random_ticket_ids']).
  456. ',time_format='.db_input($var['time_format']).
  457. ',date_format='.db_input($var['date_format']).
  458. ',datetime_format='.db_input($var['datetime_format']).
  459. ',daydatetime_format='.db_input($var['daydatetime_format']).
  460. ',reply_separator='.db_input(trim($var['reply_separator'])).
  461. ',admin_email='.db_input($var['admin_email']).
  462. ',helpdesk_title='.db_input($var['helpdesk_title']).
  463. ',helpdesk_url='.db_input($var['helpdesk_url']).
  464. ' WHERE id='.$this->getId();
  465. //echo $sql;
  466. if(db_query($sql)) {
  467. if(db_affected_rows()) {//Something actually changed!!!!
  468. $this->reload();//Reload the new info.
  469. require_once(INCLUDE_DIR.'class.cron.php');
  470. Sys::purgeLogs(); //Cleanup the logs --- too bad if it was a mistaken config.
  471. Cron::TicketMonitor(); //Age & cleanup
  472. }
  473. return true;
  474. }
  475. return false;
  476. }
  477. }
  478. ?>