Skip to content
Snippets Groups Projects
class.cron.php 3.07 KiB
Newer Older
  • Learn to ignore specific revisions
  • Jared Hancock's avatar
    Jared Hancock committed
    <?php
    /*********************************************************************
        class.cron.php
    
        Nothing special...just a central location for all cron calls.
    
    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.
    
        TODO: The plan is to make cron jobs db based.
    
    Jared Hancock's avatar
    Jared Hancock committed
        vim: expandtab sw=4 ts=4 sts=4:
    **********************************************************************/
    //TODO: Make it DB based!
    
    Jared Hancock's avatar
    Jared Hancock committed
    require_once INCLUDE_DIR.'class.signal.php';
    
    
    Jared Hancock's avatar
    Jared Hancock committed
    class Cron {
    
        function MailFetcher() {
            require_once(INCLUDE_DIR.'class.mailfetch.php');
    
    Peter Rotich's avatar
    Peter Rotich committed
            MailFetcher::run(); //Fetch mail..frequency is limited by email account setting.
    
    Jared Hancock's avatar
    Jared Hancock committed
        }
    
        function TicketMonitor() {
            require_once(INCLUDE_DIR.'class.ticket.php');
            require_once(INCLUDE_DIR.'class.lock.php');
            Ticket::checkOverdue(); //Make stale tickets overdue
    
    Jared Hancock's avatar
    Jared Hancock committed
            TicketLock::cleanup(); //Remove expired locks
    
    Jared Hancock's avatar
    Jared Hancock committed
        }
    
        function PurgeLogs() {
    
            // Once a day on a 5-minute cron
            if (rand(1,300) == 42)
                if($ost) $ost->purgeLogs();
    
        function PurgeDrafts() {
            require_once(INCLUDE_DIR.'class.draft.php');
            Draft::cleanup();
        }
    
    
        function CleanOrphanedFiles() {
            require_once(INCLUDE_DIR.'class.file.php');
            AttachmentFile::deleteOrphans();
        }
    
    
        function MaybeOptimizeTables() {
            // Once a week on a 5-minute cron
            $chance = rand(1,2000);
            switch ($chance) {
            case 42:
                @db_query('OPTIMIZE TABLE '.TICKET_LOCK_TABLE);
                break;
            case 242:
                @db_query('OPTIMIZE TABLE '.SYSLOG_TABLE);
                break;
            case 442:
                @db_query('OPTIMIZE TABLE '.DRAFT_TABLE);
                break;
    
            // Start optimizing core ticket tables when we have an archiving
            // system available
            case 142:
                #@db_query('OPTIMIZE TABLE '.TICKET_TABLE);
                break;
            case 542:
                #@db_query('OPTIMIZE TABLE '.FORM_ENTRY_TABLE);
                break;
            case 642:
                #@db_query('OPTIMIZE TABLE '.FORM_ANSWER_TABLE);
                break;
            case 342:
                #@db_query('OPTIMIZE TABLE '.FILE_TABLE);
                # XXX: Please do not add an OPTIMIZE for the file_chunk table!
                break;
    
            // Start optimizing user tables when we have a user directory
            // sporting deletes
            case 742:
                #@db_query('OPTIMIZE TABLE '.USER_TABLE);
                break;
            case 842:
                #@db_query('OPTIMIZE TABLE '.USER_EMAIL_TABLE);
                break;
            }
        }
    
    
    Jared Hancock's avatar
    Jared Hancock committed
        function run(){ //called by outside cron NOT autocron
    
            global $ost;
            if (!$ost || $ost->isUpgradePending())
                return;
    
    
            self::MailFetcher();
            self::TicketMonitor();
            self::PurgeLogs();
            self::CleanOrphanedFiles();
    
            self::MaybeOptimizeTables();
    
            Signal::send('cron', null);