Skip to content
Snippets Groups Projects
class.config.php 32.3 KiB
Newer Older
Jared Hancock's avatar
Jared Hancock committed
<?php
/*********************************************************************
    class.config.php

    osTicket config info manager.
Jared Hancock's avatar
Jared Hancock committed

    Peter Rotich <peter@osticket.com>
    Copyright (c)  2006-2013 osTicket
Jared Hancock's avatar
Jared Hancock committed
    http://www.osticket.com

    Released under the GNU General Public License WITHOUT ANY WARRANTY.
    See LICENSE.TXT for details.

    vim: expandtab sw=4 ts=4 sts=4:
**********************************************************************/

require_once(INCLUDE_DIR.'class.email.php');

class Config {
    var $section = null;                    # Default namespace ('core')
    var $table = 'config';                  # Table name (with prefix)
    var $section_column = 'namespace';      # namespace column name
    var $session = null;                    # Session-backed configuration
    function Config($section=null) {
        if ($section)
            $this->section = $section;
        if ($this->section === null)
            return false;
        if (!isset($_SESSION['cfg:'.$this->section]))
            $_SESSION['cfg:'.$this->section] = array();
        $this->session = &$_SESSION['cfg:'.$this->section];

        $sql='SELECT id, `key`, value FROM '.$this->table
            .' WHERE `'.$this->section_column.'` = '.db_input($this->section);
        if(($res=db_query($sql)) && db_num_rows($res))
            while ($row = db_fetch_array($res))
                $this->config[$row['key']] = $row;
    function getNamespace() {
        return $this->section;
    }

    function get($key, $default=null) {
        if (isset($this->session[$key]))
            return $this->session[$key];
        elseif (isset($this->config[$key]))
            return $this->config[$key]['value'];
        elseif ($default !== null)
            return $this->set($key, $default);
        return null;
    function exists($key) {
        return $this->get($key, null) ? true : false;
    }

    function set($key, $value) {
        return ($this->update($key, $value)) ? $value : null;
    function persist($key, $value) {
        $this->session[$key] = $value;
        return true;
    }

    function create($key, $value) {
        $sql = 'INSERT INTO '.$this->table
            .' SET `'.$this->section_column.'`='.db_input($this->section)
            .', `key`='.db_input($key)
            .', value='.db_input($value);
        if (!db_query($sql) || !($id=db_insert_id()))
            return false;

        $this->config[$key] = array('key'=>$key, 'value'=>$value, 'id'=>$id);
        return true;
    }

    function update($key, $value) {
        if (!isset($this->config[$key]))
            return $this->create($key, $value);

        $setting = &$this->config[$key];
        if ($setting['value'] == $value)
            return true;

        if (!db_query('UPDATE '.$this->table.' SET updated=NOW(), value='
                .db_input($value).' WHERE id='.db_input($setting['id'])))
            return false;

        $setting['value'] = $value;
        return true;
    }

    function updateAll($updates) {
        foreach ($updates as $key=>$value)
            if (!$this->update($key, $value))
                return false;
        return true;
    }
}

class OsticketConfig extends Config {
    var $table = CONFIG_TABLE;
    var $section = 'core';

    var $defaultDept;   //Default Department
    var $defaultSLA;   //Default SLA
    var $defaultEmail;  //Default Email
    var $alertEmail;  //Alert Email
    var $defaultSMTPEmail; //Default  SMTP Email

    function OsticketConfig($section=null) {
        parent::Config($section);
        if (count($this->config) == 0) {
            // Fallback for osticket < 1.7@852ca89e
            $sql='SELECT * FROM '.$this->table.' WHERE id = 1';
            if (($res=db_query($sql)) && db_num_rows($res))
                foreach (db_fetch_array($res) as $key=>$value)
                    $this->config[$key] = array('value'=>$value);
        }

        //Get the default time zone
        // We can't JOIN timezone table above due to upgrade support.
        if ($this->get('default_timezone_id')) {
            if (!$this->exists('tz_offset'))
                $this->persist('tz_offset',
                    Timezone::getOffsetById($this->get('default_timezone_id')));
        } else
            // Previous osTicket versions saved the offset value instead of
            // a timezone instance. This is compatibility for the upgrader
            $this->persist('tz_offset', 0);
Jared Hancock's avatar
Jared Hancock committed
    function isHelpDeskOffline() {
        return ($this->get('isonline'));
    function isKnowledgebaseEnabled() {
Jared Hancock's avatar
Jared Hancock committed
        require_once(INCLUDE_DIR.'class.faq.php');
        return ($this->get('enable_kb') && FAQ::countPublishedFAQs());
Jared Hancock's avatar
Jared Hancock committed
    }

    function getVersion() {
    function getSchemaSignature($section=null) {
        if (!$section && ($v=$this->get('schema_signature')))
            return $v;

        // 1.7 after namespaced configuration, other namespace
        if ($section) {
            $sql='SELECT value FROM '.$this->table
                .' WHERE `key` = "schema_signature" and namespace='.db_input($section);
            if (($res=db_query($sql, false)) && db_num_rows($res))
                return db_result($res);
        }
Peter Rotich's avatar
Peter Rotich committed

        // 1.7 before namespaced configuration
        $sql='SELECT `schema_signature` FROM '.$this->table
            .' WHERE id=1';
        if (($res=db_query($sql, false)) && db_num_rows($res))
            return db_result($res);
        // old version 1.6
        return md5(self::getDBVersion());
        if (!$this->exists('db_tz_offset')) {
            $sql='SELECT (TIME_TO_SEC(TIMEDIFF(NOW(), UTC_TIMESTAMP()))/3600) as db_tz_offset';
            if(($res=db_query($sql)) && db_num_rows($res))
                $this->persist('db_tz_offset', db_result($res));
        return $this->get('db_tz_offset');
Jared Hancock's avatar
Jared Hancock committed
    }

    /* Date & Time Formats */
    function observeDaylightSaving() {
        return ($this->get('enable_daylight_saving'));
Jared Hancock's avatar
Jared Hancock committed
    }
    function getTimeFormat() {
        return $this->get('time_format');
Jared Hancock's avatar
Jared Hancock committed
    }
    function getDateFormat() {
        return $this->get('date_format');
Jared Hancock's avatar
Jared Hancock committed
    }

    function getDateTimeFormat() {
        return $this->get('datetime_format');
Jared Hancock's avatar
Jared Hancock committed
    }

    function getDayDateTimeFormat() {
        return $this->get('daydatetime_format');
    function getConfigInfo() {
        $info = array();
        foreach ($this->config as $key=>$setting)
            $info[$key] = $setting['value'];
        return $info;
Jared Hancock's avatar
Jared Hancock committed
    function getTitle() {
        return $this->get('helpdesk_title');
Jared Hancock's avatar
Jared Hancock committed
    function getUrl() {
        return $this->get('helpdesk_url');
Jared Hancock's avatar
Jared Hancock committed
    function getBaseUrl() { //Same as above with no trailing slash.
        return rtrim($this->getUrl(),'/');
    }

    function getTZOffset() {
        return $this->get('tz_offset');
Jared Hancock's avatar
Jared Hancock committed
    }

    function getPageSize() {
        return $this->get('max_page_size');
Jared Hancock's avatar
Jared Hancock committed
    }

    function getGracePeriod() {
        return $this->get('overdue_grace_period');
Jared Hancock's avatar
Jared Hancock committed
    }

    function getPasswdResetPeriod() {
        return $this->get('passwd_reset_period');

    function showRelatedTickets() {
        return $this->get('show_related_tickets');
        return $this->get('show_notes_inline');
Jared Hancock's avatar
Jared Hancock committed
    function getClientTimeout() {
        return $this->getClientSessionTimeout();
    }
Jared Hancock's avatar
Jared Hancock committed
    function getClientSessionTimeout() {
        return $this->get('client_session_timeout')*60;
Jared Hancock's avatar
Jared Hancock committed
    }

    function getClientLoginTimeout() {
        return $this->get('client_login_timeout')*60;
Jared Hancock's avatar
Jared Hancock committed
    }

    function getClientMaxLogins() {
        return $this->get('client_max_logins');
Jared Hancock's avatar
Jared Hancock committed
    }

    function getStaffTimeout() {
        return $this->getStaffSessionTimeout();
    }

    function getStaffSessionTimeout() {
        return $this->get('staff_session_timeout')*60;
Jared Hancock's avatar
Jared Hancock committed
    }

    function getStaffLoginTimeout() {
        return $this->get('staff_login_timeout')*60;
Jared Hancock's avatar
Jared Hancock committed
    }

    function getStaffMaxLogins() {
        return $this->get('staff_max_logins');
Jared Hancock's avatar
Jared Hancock committed
    }

    function getLockTime() {
        return $this->get('autolock_minutes');
Jared Hancock's avatar
Jared Hancock committed
    }

    function getDefaultDeptId() {
        return $this->get('default_dept_id');
Jared Hancock's avatar
Jared Hancock committed
    }

    function getDefaultDept() {

        if(!$this->defaultDept && $this->getDefaultDeptId())
            $this->defaultDept=Dept::lookup($this->getDefaultDeptId());

        return $this->defaultDept;
Jared Hancock's avatar
Jared Hancock committed

    function getDefaultEmailId() {
        return $this->get('default_email_id');
Jared Hancock's avatar
Jared Hancock committed
    }

    function getDefaultEmail() {

        if(!$this->defaultEmail && $this->getDefaultEmailId())
            $this->defaultEmail=Email::lookup($this->getDefaultEmailId());

        return $this->defaultEmail;
    }

    function getDefaultEmailAddress() {
        $email=$this->getDefaultEmail();
        return $email?$email->getAddress():null;
    }

    function getDefaultSLAId() {
        return $this->get('default_sla_id');
Jared Hancock's avatar
Jared Hancock committed
    }

    function getDefaultSLA() {

        if(!$this->defaultSLA && $this->getDefaultSLAId())
            $this->defaultSLA=SLA::lookup($this->getDefaultSLAId());

        return $this->defaultSLA;
    }

    function getAlertEmailId() {
        return $this->get('alert_email_id');
Jared Hancock's avatar
Jared Hancock committed
    }

    function getAlertEmail() {

        if(!$this->alertEmail && $this->get('alert_email_id'))
            $this->alertEmail= new Email($this->get('alert_email_id'));
Jared Hancock's avatar
Jared Hancock committed
        return $this->alertEmail;
    }

    function getDefaultSMTPEmail() {

        if(!$this->defaultSMTPEmail && $this->get('default_smtp_id'))
            $this->defaultSMTPEmail= new Email($this->get('default_smtp_id'));
Jared Hancock's avatar
Jared Hancock committed
        return $this->defaultSMTPEmail;
    }

    function getDefaultPriorityId() {
        return $this->get('default_priority_id');
Jared Hancock's avatar
Jared Hancock committed
    }

    function getDefaultTemplateId() {
        return $this->get('default_template_id');
Jared Hancock's avatar
Jared Hancock committed
    }

    function getDefaultTemplate() {
Jared Hancock's avatar
Jared Hancock committed
        if(!$this->defaultTemplate && $this->getDefaultTemplateId())
            $this->defaultTemplate = Template::lookup($this->getDefaultTemplateId());

        return $this->defaultTemplate;
    }

    function getLandingPageId() {
        return $this->get('landing_page_id');
    }

    function getLandingPage() {

        if(!$this->landing_page && $this->getLandingPageId())
            $this->landing_page = Page::lookup($this->getLandingPageId());

        return $this->landing_page;
    }

    function getOfflinePageId() {
        return $this->get('offline_page_id');
    }

    function getOfflinePage() {

        if(!$this->offline_page && $this->getOfflinePageId())
            $this->offline_page = Page::lookup($this->getOfflinePageId());

        return $this->offline_page;
    }

    function getThankYouPageId() {
        return $this->get('thank-you_page_id');
    }

    function getThankYouPage() {

        if(!$this->thankyou_page && $this->getThankYouPageId())
            $this->thankyou_page = Page::lookup($this->getThankYouPageId());

        return $this->thankyou_page;
    }

    function getDefaultPages() {
        /* Array of ids...as opposed to objects */
        return array(
                $this->getLandingPageId(),
                $this->getOfflinePageId(),
                $this->getThankYouPageId(),
                );
    }

Jared Hancock's avatar
Jared Hancock committed
    function getMaxOpenTickets() {
         return $this->get('max_open_tickets');
Jared Hancock's avatar
Jared Hancock committed
    }

    function getMaxFileSize() {
        return $this->get('max_file_size');
    function getStaffMaxFileUploads() {
        return $this->get('max_staff_file_uploads');
    function getClientMaxFileUploads() {
        //TODO: change max_user_file_uploads to max_client_file_uploads
        return $this->get('max_user_file_uploads');
Jared Hancock's avatar
Jared Hancock committed
    function getLogLevel() {
        return $this->get('log_level');
Jared Hancock's avatar
Jared Hancock committed
    }

    function getLogGracePeriod() {
        return $this->get('log_graceperiod');
Jared Hancock's avatar
Jared Hancock committed
    }

    function logTicketActivity() {
        return $this->get('log_ticket_activity');
Jared Hancock's avatar
Jared Hancock committed
    }

    function clickableURLS() {
        return ($this->get('clickable_urls'));
Jared Hancock's avatar
Jared Hancock committed
    function enableStaffIPBinding() {
        return ($this->get('staff_ip_binding'));
    function isCaptchaEnabled() {
        return (extension_loaded('gd') && function_exists('gd_info') && $this->get('enable_captcha'));
    function isAutoCronEnabled() {
        return ($this->get('enable_auto_cron'));

    function isEmailPollingEnabled() {
        return ($this->get('enable_mail_polling'));
Jared Hancock's avatar
Jared Hancock committed
    function allowPriorityChange() {
        return ($this->get('allow_priority_change'));
Jared Hancock's avatar
Jared Hancock committed
    function useEmailPriority() {
        return ($this->get('use_email_priority'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function getAdminEmail() {
         return $this->get('admin_email');
Jared Hancock's avatar
Jared Hancock committed
    }

    function getReplySeparator() {
        return $this->get('reply_separator');
Jared Hancock's avatar
Jared Hancock committed
    function stripQuotedReply() {
        return ($this->get('strip_quoted_reply'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function saveEmailHeaders() {
        return true; //No longer an option...hint: big plans for headers coming!!
    }
Jared Hancock's avatar
Jared Hancock committed
    function useRandomIds() {
        return ($this->get('random_ticket_ids'));
Jared Hancock's avatar
Jared Hancock committed
    }

    /* autoresponders  & Alerts */
    function autoRespONNewTicket() {
        return ($this->get('ticket_autoresponder'));
Jared Hancock's avatar
Jared Hancock committed
    function autoRespONNewMessage() {
        return ($this->get('message_autoresponder'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function notifyONNewStaffTicket() {
        return ($this->get('ticket_notice_active'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function alertONNewMessage() {
        return ($this->get('message_alert_active'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function alertLastRespondentONNewMessage() {
        return ($this->get('message_alert_laststaff'));
Jared Hancock's avatar
Jared Hancock committed
    function alertAssignedONNewMessage() {
        return ($this->get('message_alert_assigned'));
Jared Hancock's avatar
Jared Hancock committed
    function alertDeptManagerONNewMessage() {
        return ($this->get('message_alert_dept_manager'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function alertONNewNote() {
        return ($this->get('note_alert_active'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function alertLastRespondentONNewNote() {
        return ($this->get('note_alert_laststaff'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function alertAssignedONNewNote() {
        return ($this->get('note_alert_assigned'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function alertDeptManagerONNewNote() {
        return ($this->get('note_alert_dept_manager'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function alertONNewTicket() {
        return ($this->get('ticket_alert_active'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function alertAdminONNewTicket() {
        return ($this->get('ticket_alert_admin'));
Jared Hancock's avatar
Jared Hancock committed
    function alertDeptManagerONNewTicket() {
        return ($this->get('ticket_alert_dept_manager'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function alertDeptMembersONNewTicket() {
        return ($this->get('ticket_alert_dept_members'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function alertONTransfer() {
        return ($this->get('transfer_alert_active'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function alertAssignedONTransfer() {
        return ($this->get('transfer_alert_assigned'));
Jared Hancock's avatar
Jared Hancock committed
    function alertDeptManagerONTransfer() {
        return ($this->get('transfer_alert_dept_manager'));
Jared Hancock's avatar
Jared Hancock committed
    function alertDeptMembersONTransfer() {
        return ($this->get('transfer_alert_dept_members'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function alertONAssignment() {
        return ($this->get('assigned_alert_active'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function alertStaffONAssignment() {
        return ($this->get('assigned_alert_staff'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function alertTeamLeadONAssignment() {
        return ($this->get('assigned_alert_team_lead'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function alertTeamMembersONAssignment() {
        return ($this->get('assigned_alert_team_members'));
Jared Hancock's avatar
Jared Hancock committed
    }


    function alertONOverdueTicket() {
        return ($this->get('overdue_alert_active'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function alertAssignedONOverdueTicket() {
        return ($this->get('overdue_alert_assigned'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function alertDeptManagerONOverdueTicket() {
        return ($this->get('overdue_alert_dept_manager'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function alertDeptMembersONOverdueTicket() {
        return ($this->get('overdue_alert_dept_members'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function autoAssignReopenedTickets() {
        return ($this->get('auto_assign_reopened_tickets'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function showAssignedTickets() {
        return ($this->get('show_assigned_tickets'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function showAnsweredTickets() {
        return ($this->get('show_answered_tickets'));
Jared Hancock's avatar
Jared Hancock committed
    function hideStaffName() {
        return ($this->get('hide_staff_name'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function sendOverLimitNotice() {
        return ($this->get('overlimit_notice_active'));
Jared Hancock's avatar
Jared Hancock committed
    /* Error alerts sent to admin email when enabled */
    function alertONSQLError() {
        return ($this->get('send_sql_errors'));
Jared Hancock's avatar
Jared Hancock committed
    }
    function alertONLoginError() {
        return ($this->get('send_login_errors'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function alertONMailParseError() {
        return ($this->get('send_mailparse_errors'));
Jared Hancock's avatar
Jared Hancock committed

    /* Attachments */
    function getAllowedFileTypes() {
        return trim($this->get('allowed_filetypes'));
Jared Hancock's avatar
Jared Hancock committed

    function emailAttachments() {
        return ($this->get('email_attachments'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function allowAttachments() {
        return ($this->get('allow_attachments'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function allowOnlineAttachments() {
        return ($this->allowAttachments() && $this->get('allow_online_attachments'));
Jared Hancock's avatar
Jared Hancock committed
    }

    function allowAttachmentsOnlogin() {
        return ($this->allowOnlineAttachments() && $this->get('allow_online_attachments_onlogin'));
Jared Hancock's avatar
Jared Hancock committed
    function allowEmailAttachments() {
        return ($this->allowAttachments() && $this->get('allow_email_attachments'));
    //TODO: change db field to allow_api_attachments - which will include  email/json/xml attachments
    //       terminology changed on the UI
    function allowAPIAttachments() {
        return $this->allowEmailAttachments();
    }

    /* Needed by upgrader on 1.6 and older releases upgrade - not not remove */
Jared Hancock's avatar
Jared Hancock committed
    function getUploadDir() {
        return $this->get('upload_dir');
    function updateSettings($vars, &$errors) {
Jared Hancock's avatar
Jared Hancock committed

        if(!$vars || $errors)
            return false;
Jared Hancock's avatar
Jared Hancock committed
        switch(strtolower($vars['t'])) {
            case 'system':
                return $this->updateSystemSettings($vars, $errors);
Jared Hancock's avatar
Jared Hancock committed
                break;
            case 'tickets':
                return $this->updateTicketsSettings($vars, $errors);
Jared Hancock's avatar
Jared Hancock committed
                break;
            case 'emails':
                return $this->updateEmailsSettings($vars, $errors);
Jared Hancock's avatar
Jared Hancock committed
                break;
            case 'pages':
                return $this->updatePagesSettings($vars, $errors);
                break;
           case 'autoresp':
                return $this->updateAutoresponderSettings($vars, $errors);
Jared Hancock's avatar
Jared Hancock committed
                break;
            case 'alerts':
                return $this->updateAlertsSettings($vars, $errors);
Jared Hancock's avatar
Jared Hancock committed
                break;
            case 'kb':
                return $this->updateKBSettings($vars, $errors);
Jared Hancock's avatar
Jared Hancock committed
                break;
            default:
                $errors['err']='Unknown setting option. Get technical support.';
        }

        return false;
    }

    function updateSystemSettings($vars, &$errors) {
Jared Hancock's avatar
Jared Hancock committed

        $f=array();
        $f['helpdesk_url']=array('type'=>'string',   'required'=>1, 'error'=>'Helpdesk URl required');
        $f['helpdesk_title']=array('type'=>'string',   'required'=>1, 'error'=>'Helpdesk title required');
        $f['default_dept_id']=array('type'=>'int',   'required'=>1, 'error'=>'Default Dept. required');
        $f['default_template_id']=array('type'=>'int',   'required'=>1, 'error'=>'You must select template.');
        $f['staff_session_timeout']=array('type'=>'int',   'required'=>1, 'error'=>'Enter idle time in minutes');
        $f['client_session_timeout']=array('type'=>'int',   'required'=>1, 'error'=>'Enter idle time in minutes');
        //Date & Time Options
        $f['time_format']=array('type'=>'string',   'required'=>1, 'error'=>'Time format required');
        $f['date_format']=array('type'=>'string',   'required'=>1, 'error'=>'Date format required');
        $f['datetime_format']=array('type'=>'string',   'required'=>1, 'error'=>'Datetime format required');
        $f['daydatetime_format']=array('type'=>'string',   'required'=>1, 'error'=>'Day, Datetime format required');
        $f['default_timezone_id']=array('type'=>'int',   'required'=>1, 'error'=>'Default Timezone required');

        if(!Validator::process($f, $vars, $errors) || $errors)
Jared Hancock's avatar
Jared Hancock committed
            return false;

        return $this->updateAll(array(
            'isonline'=>$vars['isonline'],
            'helpdesk_title'=>$vars['helpdesk_title'],
            'helpdesk_url'=>$vars['helpdesk_url'],
            'default_dept_id'=>$vars['default_dept_id'],
            'default_template_id'=>$vars['default_template_id'],
            'max_page_size'=>$vars['max_page_size'],
            'log_level'=>$vars['log_level'],
            'log_graceperiod'=>$vars['log_graceperiod'],
            'passwd_reset_period'=>$vars['passwd_reset_period'],
            'staff_max_logins'=>$vars['staff_max_logins'],
            'staff_login_timeout'=>$vars['staff_login_timeout'],
            'staff_session_timeout'=>$vars['staff_session_timeout'],
            'staff_ip_binding'=>isset($vars['staff_ip_binding'])?1:0,
            'client_max_logins'=>$vars['client_max_logins'],
            'client_login_timeout'=>$vars['client_login_timeout'],
            'client_session_timeout'=>$vars['client_session_timeout'],
            'time_format'=>$vars['time_format'],
            'date_format'=>$vars['date_format'],
            'datetime_format'=>$vars['datetime_format'],
            'daydatetime_format'=>$vars['daydatetime_format'],
            'default_timezone_id'=>$vars['default_timezone_id'],
            'enable_daylight_saving'=>isset($vars['enable_daylight_saving'])?1:0,
    function updateTicketsSettings($vars, &$errors) {
Jared Hancock's avatar
Jared Hancock committed


        $f=array();
        $f['default_sla_id']=array('type'=>'int',   'required'=>1, 'error'=>'Selection required');
        $f['default_priority_id']=array('type'=>'int',   'required'=>1, 'error'=>'Selection required');
        $f['max_open_tickets']=array('type'=>'int',   'required'=>1, 'error'=>'Enter valid numeric value');
        $f['autolock_minutes']=array('type'=>'int',   'required'=>1, 'error'=>'Enter lock time in minutes');


        if($vars['enable_captcha']) {
            if (!extension_loaded('gd'))
                $errors['enable_captcha']='The GD extension required';
            elseif(!function_exists('imagepng'))
                $errors['enable_captcha']='PNG support required for Image Captcha';
        }

        if($vars['allow_attachments']) {

            if(!ini_get('file_uploads'))
                $errors['err']='The \'file_uploads\' directive is disabled in php.ini';

            if(!is_numeric($vars['max_file_size']))
                $errors['max_file_size']='Maximum file size required';

            if(!$vars['allowed_filetypes'])
                $errors['allowed_filetypes']='Allowed file extentions required';

            if(!($maxfileuploads=ini_get('max_file_uploads')))
                $maxfileuploads=DEFAULT_MAX_FILE_UPLOADS;

            if(!$vars['max_user_file_uploads'] || $vars['max_user_file_uploads']>$maxfileuploads)
                $errors['max_user_file_uploads']='Invalid selection. Must be less than '.$maxfileuploads;

            if(!$vars['max_staff_file_uploads'] || $vars['max_staff_file_uploads']>$maxfileuploads)
                $errors['max_staff_file_uploads']='Invalid selection. Must be less than '.$maxfileuploads;
        }



        if(!Validator::process($f, $vars, $errors) || $errors)
Jared Hancock's avatar
Jared Hancock committed
            return false;

        return $this->updateAll(array(
            'random_ticket_ids'=>$vars['random_ticket_ids'],
            'default_priority_id'=>$vars['default_priority_id'],
            'default_sla_id'=>$vars['default_sla_id'],
            'max_open_tickets'=>$vars['max_open_tickets'],
            'autolock_minutes'=>$vars['autolock_minutes'],
            'allow_priority_change'=>isset($vars['allow_priority_change'])?1:0,
            'use_email_priority'=>isset($vars['use_email_priority'])?1:0,
            'enable_captcha'=>isset($vars['enable_captcha'])?1:0,
            'log_ticket_activity'=>isset($vars['log_ticket_activity'])?1:0,
            'auto_assign_reopened_tickets'=>isset($vars['auto_assign_reopened_tickets'])?1:0,
            'show_assigned_tickets'=>isset($vars['show_assigned_tickets'])?1:0,
            'show_answered_tickets'=>isset($vars['show_answered_tickets'])?1:0,
            'show_related_tickets'=>isset($vars['show_related_tickets'])?1:0,
            'show_notes_inline'=>isset($vars['show_notes_inline'])?1:0,
            'clickable_urls'=>isset($vars['clickable_urls'])?1:0,
            'hide_staff_name'=>isset($vars['hide_staff_name'])?1:0,
            'allow_attachments'=>isset($vars['allow_attachments'])?1:0,
            'allowed_filetypes'=>strtolower(preg_replace("/\n\r|\r\n|\n|\r/", '',trim($vars['allowed_filetypes']))),
            'max_file_size'=>$vars['max_file_size'],
            'max_user_file_uploads'=>$vars['max_user_file_uploads'],
            'max_staff_file_uploads'=>$vars['max_staff_file_uploads'],
            'email_attachments'=>isset($vars['email_attachments'])?1:0,
            'allow_email_attachments'=>isset($vars['allow_email_attachments'])?1:0,
            'allow_online_attachments'=>isset($vars['allow_online_attachments'])?1:0,
            'allow_online_attachments_onlogin'=>isset($vars['allow_online_attachments_onlogin'])?1:0,
    function updateEmailsSettings($vars, &$errors) {
Jared Hancock's avatar
Jared Hancock committed

        $f=array();
        $f['default_email_id']=array('type'=>'int',   'required'=>1, 'error'=>'Default email required');
        $f['alert_email_id']=array('type'=>'int',   'required'=>1, 'error'=>'Selection required');
        $f['admin_email']=array('type'=>'email',   'required'=>1, 'error'=>'System admin email required');
Jared Hancock's avatar
Jared Hancock committed
        if($vars['strip_quoted_reply'] && !$vars['reply_separator'])
            $errors['reply_separator']='Reply separator required to strip quoted reply.';
Jared Hancock's avatar
Jared Hancock committed
        if($vars['admin_email'] && Email::getIdByEmail($vars['admin_email'])) //Make sure admin email is not also a system email.
            $errors['admin_email']='Email already setup as system email';

        if(!Validator::process($f,$vars,$errors) || $errors)
            return false;

        return $this->updateAll(array(
            'default_email_id'=>$vars['default_email_id'],
            'alert_email_id'=>$vars['alert_email_id'],
            'default_smtp_id'=>$vars['default_smtp_id'],
            'admin_email'=>$vars['admin_email'],
            'enable_auto_cron'=>isset($vars['enable_auto_cron'])?1:0,
            'enable_mail_polling'=>isset($vars['enable_mail_polling'])?1:0,
            'strip_quoted_reply'=>isset($vars['strip_quoted_reply'])?1:0,
            'reply_separator'=>$vars['reply_separator'],
    }

    function updatePagesSettings($vars, &$errors) {

        $f=array();
        $f['landing_page_id'] = array('type'=>'int',   'required'=>1, 'error'=>'required');
        $f['offline_page_id'] = array('type'=>'int',   'required'=>1, 'error'=>'required');
        $f['thank-you_page_id'] = array('type'=>'int',   'required'=>1, 'error'=>'required');

        if(!Validator::process($f, $vars, $errors) || $errors)
            return false;

        return $this->updateAll(array(
            'landing_page_id' => $vars['landing_page_id'],
            'offline_page_id' => $vars['offline_page_id'],
            'thank-you_page_id' => $vars['thank-you_page_id'],
           ));
    function updateAutoresponderSettings($vars, &$errors) {
Jared Hancock's avatar
Jared Hancock committed

        if($errors) return false;

        return $this->updateAll(array(
            'ticket_autoresponder'=>$vars['ticket_autoresponder'],
            'message_autoresponder'=>$vars['message_autoresponder'],
            'ticket_notice_active'=>$vars['ticket_notice_active'],
            'overlimit_notice_active'=>$vars['overlimit_notice_active'],
    function updateKBSettings($vars, &$errors) {
Jared Hancock's avatar
Jared Hancock committed

        if($errors) return false;

        return $this->updateAll(array(
            'enable_kb'=>isset($vars['enable_kb'])?1:0,
               'enable_premade'=>isset($vars['enable_premade'])?1:0,
    function updateAlertsSettings($vars, &$errors) {
Jared Hancock's avatar
Jared Hancock committed


       if($vars['ticket_alert_active']
                && (!isset($vars['ticket_alert_admin'])
                    && !isset($vars['ticket_alert_dept_manager'])
                    && !isset($vars['ticket_alert_dept_members']))) {
            $errors['ticket_alert_active']='Select recipient(s)';
        }
        if($vars['message_alert_active']
                && (!isset($vars['message_alert_laststaff'])
                    && !isset($vars['message_alert_assigned'])
                    && !isset($vars['message_alert_dept_manager']))) {
            $errors['message_alert_active']='Select recipient(s)';
        }

        if($vars['note_alert_active']
                && (!isset($vars['note_alert_laststaff'])
                    && !isset($vars['note_alert_assigned'])
                    && !isset($vars['note_alert_dept_manager']))) {
            $errors['note_alert_active']='Select recipient(s)';
        }

        if($vars['transfer_alert_active']
                && (!isset($vars['transfer_alert_assigned'])
                    && !isset($vars['transfer_alert_dept_manager'])
                    && !isset($vars['transfer_alert_dept_members']))) {
            $errors['transfer_alert_active']='Select recipient(s)';
        }

        if($vars['overdue_alert_active']
                && (!isset($vars['overdue_alert_assigned'])
                    && !isset($vars['overdue_alert_dept_manager'])
                    && !isset($vars['overdue_alert_dept_members']))) {
            $errors['overdue_alert_active']='Select recipient(s)';
        }

        if($vars['assigned_alert_active']
                && (!isset($vars['assigned_alert_staff'])
                    && !isset($vars['assigned_alert_team_lead'])
                    && !isset($vars['assigned_alert_team_members']))) {
            $errors['assigned_alert_active']='Select recipient(s)';
        }

        if($errors) return false;
        return $this->updateAll(array(
            'ticket_alert_active'=>$vars['ticket_alert_active'],
            'ticket_alert_admin'=>isset($vars['ticket_alert_admin'])?1:0,
            'ticket_alert_dept_manager'=>isset($vars['ticket_alert_dept_manager'])?1:0,
            'ticket_alert_dept_members'=>isset($vars['ticket_alert_dept_members'])?1:0,
            'message_alert_active'=>$vars['message_alert_active'],
            'message_alert_laststaff'=>isset($vars['message_alert_laststaff'])?1:0,
            'message_alert_assigned'=>isset($vars['message_alert_assigned'])?1:0,
            'message_alert_dept_manager'=>isset($vars['message_alert_dept_manager'])?1:0,
            'note_alert_active'=>$vars['note_alert_active'],
            'note_alert_laststaff'=>isset($vars['note_alert_laststaff'])?1:0,
            'note_alert_assigned'=>isset($vars['note_alert_assigned'])?1:0,
            'note_alert_dept_manager'=>isset($vars['note_alert_dept_manager'])?1:0,
            'assigned_alert_active'=>$vars['assigned_alert_active'],
            'assigned_alert_staff'=>isset($vars['assigned_alert_staff'])?1:0,
            'assigned_alert_team_lead'=>isset($vars['assigned_alert_team_lead'])?1:0,
            'assigned_alert_team_members'=>isset($vars['assigned_alert_team_members'])?1:0,
            'transfer_alert_active'=>$vars['transfer_alert_active'],
            'transfer_alert_assigned'=>isset($vars['transfer_alert_assigned'])?1:0,
            'transfer_alert_dept_manager'=>isset($vars['transfer_alert_dept_manager'])?1:0,
            'transfer_alert_dept_members'=>isset($vars['transfer_alert_dept_members'])?1:0,
            'overdue_alert_active'=>$vars['overdue_alert_active'],
            'overdue_alert_assigned'=>isset($vars['overdue_alert_assigned'])?1:0,
            'overdue_alert_dept_manager'=>isset($vars['overdue_alert_dept_manager'])?1:0,
            'overdue_alert_dept_members'=>isset($vars['overdue_alert_dept_members'])?1:0,
            'send_sys_errors'=>isset($vars['send_sys_errors'])?1:0,
            'send_sql_errors'=>isset($vars['send_sql_errors'])?1:0,
            'send_login_errors'=>isset($vars['send_login_errors'])?1:0,

    //Used to detect version prior to 1.7 (useful during upgrade)
    /* static */ function getDBVersion() {
        $sql='SELECT `ostversion` FROM '.TABLE_PREFIX.'config '
            .'WHERE id=1';
        return db_result(db_query($sql));
    }