Вход Регистрация
Файл: admin/applications/core/modules_admin/system/taskmanager.php
Строк: 740
<?php
/**
 * @file        taskmanager.php     Task manager
 *~TERABYTE_DOC_READY~
 * $Copyright: (c) 2001 - 2011 Invision Power Services, Inc.$
 * $License: http://www.invisionpower.com/company/standards.php#license$
 * $Author: ips_terabyte $
 * $LastChangedDate: 2012-03-26 12:16:52 -0400 (Mon, 26 Mar 2012) $
 * @version        v3.3.3
 * $Revision: 10490 $
 */

if ( ! defined'IN_ACP' ) )
{
    print 
"<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded 'admin.php'.";
    exit();
}

/**
 *
 * @class        admin_core_system_taskmanager
 * @brief        Task manager
 */
class admin_core_system_taskmanager extends ipsCommand
{
    
/**
     * Skin object shortcut
     *
     * @var        $html
     */
    
public $html;
    
    
/**
     * String for the screen url bit
     *
     * @var        $form_code
     */
    
public $form_code    '';
    
    
/**
     * String for the JS url bit
     *
     * @var        $form_code_js
     */
    
public $form_code_js '';

    
/**
     * Main function executed automatically by the controller
     *
     * @param    object        $registry        Registry object
     * @return    @e void
     */
    
public function doExecuteipsRegistry $registry 
    {
        
/* Load Class */
        
$classToLoad IPSLib::loadLibraryIPS_ROOT_PATH '/sources/classes/class_taskmanager.php''class_taskmanager' );
        
$this->func_taskmanager = new $classToLoad$registry );
        
        
/* Load Skin and Language */
        
$this->html $this->registry->output->loadTemplate('cp_skin_system');
                
        
$this->registry->class_localization->loadLanguageFile( array( 'admin_system' ) );
        
        
/* URLs */
        
$this->form_code    $this->html->form_code 'module=system&amp;section=taskmanager';
        
$this->form_code_js $this->html->form_code_js 'module=system&section=taskmanager';
        
        switch( 
$this->request['do'] )
        {        
            case 
'cron':
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'task_manage' );
                
$this->showCronPage();
            break;
        
            case 
'task_add':
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'task_manage' );
                
$this->taskManagerForm'add' );
            break;
                
            case 
'task_edit':
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'task_manage' );
                
$this->taskManagerForm'edit' );
            break;
                
            case 
'task_add_do':
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'task_manage' );
                
$this->taskManagerSave'add' );
            break;
                
            case 
'task_edit_do':
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'task_manage' );
                
$this->taskManagerSave'edit' );
            break;
                
            case 
'task_run_now':
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'task_run_lock' );
                
$this->taskManagerRunTask();
            break;
                
            case 
'task_unlock':
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'task_run_lock' );
                
$this->taskManagerUnlockTask();
            break;
                
            case 
'task_delete':
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'task_remove' );
                
$this->taskDelete();
            break;
                
            case 
'task_export_xml':
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'task_manage' );
                
$this->tasksExportToXML();
            break;
            
            case 
'task_export':
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'task_manage' );
                
$this->taskExport();
            break;
            
            case 
'task_import':
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'task_manage' );
                
$this->taskImport();
            break;

            case 
'task_rebuild_xml':
            case 
'tasksImportAllApps':
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'task_manage' );
                
$this->tasksImportAllApps();
            break;
            case 
'overview':
            default:
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'task_manage' );
                
$this->request['do'] = 'overview';
                
$this->taskManagerOverview();
            break;
        }
        
        
/* Output */
        
$this->registry->output->html_main .= $this->registry->output->global_template->global_frame_wrapper();
        
$this->registry->output->sendOutput();
    }
    
    
/**
     * Perform the tasks import
     *
     * @return    @e void
     */
    
public function taskImport()
    {
        
$content $this->registry->getClass('adminFunctions')->importXml();
        
        
//-----------------------------------------
        // Got anything?
        //-----------------------------------------
        
        
if ( ! $content )
        {
            
$this->registry->output->global_message $this->lang->words['tupload_failed'];
            
$this->_bbcodeStart();
            return;
        }

        
//-----------------------------------------
        // Get xml class
        //-----------------------------------------
        
        
require_once( IPS_KERNEL_PATH 'classXML.php' );/*noLibHook*/

        
$xml = new classXMLIPS_DOC_CHAR_SET );
        
$xml->loadXML$content );
        
        
//-----------------------------------------
        // Get current custom bbcodes
        //-----------------------------------------
        
        
$tasks = array();
        
        
$this->DB->build( array( 'select' => '*''from' => 'task_manager' ) );
        
$this->DB->execute();
        
        while ( 
$r $this->DB->fetch() )
        {
            
$tasks$r['task_key'] ] = 1;
        }
        
        
//-----------------------------------------
        // pArse
        //-----------------------------------------
        
        
foreach( $xml->fetchElements('row') as $task )
        {
            
$entry  $xml->fetchElementsFromRecord$task );

            unset(
$entry['task_id']);
            unset(
$entry['task_next_run']);
            
            
/* Update */
            
$entry['task_cronkey']     = ( $entry['task_cronkey'] )     ? $entry['task_cronkey']     : md5uniqidmicrotime() ) );
            
$entry['task_next_run']    = ( $entry['task_next_run'] )    ? $entry['task_next_run']    : time();
            
$entry['task_description'] = ( $entry['task_description'] ) ? $entry['task_description'] : '';    
                
            if ( 
$tasks$entry['task_key'] ] )
            {
                
$this->DB->update'task_manager'$entry"task_key='" $entry['task_key'] . "'" );
            }
            else
            {
                
$this->DB->insert'task_manager'$entry );
                
$tasks$entry['task_key'] ] = $entry;
            }
        }
        
        
//-----------------------------------------
        // Output
        //-----------------------------------------
        
        /* Bounce */
        
$this->registry->output->global_message $this->lang->words['t_simport_success'];
        
$this->taskManagerOverview();
    }
    
    
/**
     * Delete a task
     *
     * @return    @e void
     */
    
public function taskDelete()
    {
        
/* INIT */
        
$task_id intval$this->request['task_id'] );
        
        
/* Check to see if this is a valid task */
        
$task $this->DB->buildAndFetch( array( 'select' => '*''from' => 'task_manager''where' => "task_id={$task_id}) );
            
        if ( 
$task['task_safemode'] and ! IN_DEV )
        {
            
$this->registry->output->global_message $this->lang->words['t_nodelete'];
            
$this->taskManagerOverview();
            return;
        }
        
        
/* Delete this task */
        
$this->DB->delete'task_manager''task_id='.$task['task_id'] );
        
        
/* Save next date and bounce */
        
$this->func_taskmanager->saveNextRunStamp();
        
        
$this->registry->output->global_message $this->lang->words['t_deleted'];        
        
$this->taskManagerOverview();
    }    
    
    
/**
     * Unlock a task
     *
     * @return    @e void
     */
    
public function taskManagerUnlockTask()
    {
        
/* Unlock */
        
$this->func_taskmanager->unlockTaskintval($this->request['task_id']) );
        
        
/* Bounce */
        
$this->registry->output->global_message $this->lang->words['t_locknomore'];
        
$this->taskManagerOverview();
        return;
    }    
    
    
/**
     * Runs the selected task
     *
     * @return    @e void
     */
    
public function taskManagerRunTask()
    {
        
/* INIT */
        
$task_id intval$this->request['task_id'] );
        
        
/* Check ID */
        
if ( ! $task_id )
        {
            
$this->registry->output->global_message $this->lang->words['t_noid'];
            
$this->taskManagerOverview();
            return;
        }
        
        
/* Query the task */
        
$this_task $this->DB->buildAndFetch( array( 'select' => '*''from' => 'task_manager''where' => 'task_id=' $task_id ) );
        
        
/* NO task found */
        
if ( ! $this_task['task_id'] )
        {
            
$this->registry->output->global_message $this->lang->words['t_notask'];
            
$this->taskManagerOverview();
            return;
        }
        
        
/* Disabled? */
        
if ( ! $this_task['task_enabled'] )
        {
            
$this->registry->output->global_message $this->lang->words['t_disabled'];
            
$this->taskManagerOverview();
            return;
        }

        
/* Locked */
        
if ( $this_task['task_locked'] > && ! IN_DEV )
        {
            
$this->registry->output->global_message sprintf$this->lang->words['t_locked'], gmstrftime'%c'$this_task['task_locked'] ) );
            
$this->taskManagerOverview();
            return;
        }
        
        
/* Get the next rund ate and then update the task */
        
$newdate $this->func_taskmanager->generateNextRun$this_task );
                
        
$this->DB->update'task_manager', array( 'task_next_run' => $newdate'task_locked' => time() ), "task_id=".$task_id );
        
        
$this->func_taskmanager->saveNextRunStamp();

        
/* Run the task file */
        
if( is_fileIPSLib::getAppDir$this_task['task_application'] ) . '/tasks/' $this_task['task_file'] ) )
        {
            
$classToLoad IPSLib::loadLibraryIPSLib::getAppDir$this_task['task_application'] ) . '/tasks/' $this_task['task_file'], 'task_item'$this_task['task_application'] );
            
$myobj = new $classToLoad$this->registry$this->func_taskmanager$this_task );
            
$myobj->runTask();
            
            
/* Bounce */
            
$this->registry->output->global_message $this->lang->words['t_ran'];
            
$this->taskManagerOverview();
            return;
        }
        
/* Error locating task file */
        
else
        {
            
/* Bounce */
            
$this->registry->output->global_message sprintf$this->lang->words['t_nolocate'], IPSLib::getAppDir$this_task['task_application'] ),  $this_task['task_file'] );
            
$this->taskManagerOverview();
            return;
        }
    }
    
    
/**
     * Save the add/edit task form
     *
     * @param    string        $type        Either add or edit data     
     * @return    @e void
     */
    
public function taskManagerSave$type='add' )
    {
        
/* INIT */
        
$task_id      intval$this->request['task_id'] );
        
$task_cronkey $this->request['task_cronkey'];
        
        
/* Check for ID */
        
if ( $type == 'edit' )
        {
            if ( ! 
$task_id )
            {
                
$this->registry->output->global_message $this->lang->words['t_noid'];
                
$this->taskManagerForm();
                return;
            }
        }
        
        
/* Check for title */
        
if ( ! $this->request['task_title'] )
        {
            
$this->registry->output->global_message $this->lang->words['t_entertitle'];
            
$this->taskManagerForm();
            return;
        }
        
        
/* Check for file */
        
if ( ! $this->request['task_file'] )
        {
            
$this->registry->output->global_message $this->lang->words['t_entername'];
            
$this->taskManagerForm();
            return;
        }
        
        
/* Create the database array */
        
$save = array( 'task_title'       => $this->request['task_title'],
                       
'task_description' => $this->request['task_description'],
                       
'task_file'        => $this->request['task_file'],
                       
'task_week_day'    => $this->request['task_week_day'],
                       
'task_month_day'   => $this->request['task_month_day'],
                       
'task_hour'        => $this->request['task_hour'],
                       
'task_minute'      => $this->request['task_minute'],
                       
'task_log'          => $this->request['task_log'],
                       
'task_cronkey'     => $this->request['task_cronkey'] ? $task_cronkey md5(microtime()),
                       
'task_enabled'     => $this->request['task_enabled'],
                       
'task_application' => $this->request['task_application'],
                       
'task_key'         => $this->request['task_key']
                     );
        
        if ( 
IN_DEV )
        {
            
$save['task_safemode'] = $this->request['task_safemode'];
        }

        
/* Find out the next weekday */        
        
if( $this->request['task_week_day'] != -)
        {
            
$week_days = array(
                                
=> 'Sunday',
                                
=> 'Monday',
                                
=> 'Tuesday',
                                
=> 'Wednesday',
                                
=> 'Thursday',
                                
=> 'Friday',
                                
=> 'Saturday',
                            );
                            
            
$_ts strtotime"Next {$week_days[$this->request['task_week_day']]});
            
            
$this->func_taskmanager->date_now['minute']      = intvalgmdate'i'$_ts ) );
            
$this->func_taskmanager->date_now['hour']        = intvalgmdate'H'$_ts ) );
            
$this->func_taskmanager->date_now['wday']        = intvalgmdate'w'$_ts ) );
            
$this->func_taskmanager->date_now['mday']        = intvalgmdate'd'$_ts ) );
            
$this->func_taskmanager->date_now['month']       = intvalgmdate'm'$_ts ) );
            
$this->func_taskmanager->date_now['year']        = intvalgmdate'Y'$_ts ) );            
        }
        
        
/* Get next run date */
        
$save['task_next_run'] = $this->func_taskmanager->generateNextRun$save );
        
        
/* Edit */
        
if ( $type == 'edit' )
        {
            
$this->DB->update'task_manager'$save'task_id='.$task_id );
            
$this->registry->output->global_message $this->lang->words['t_edited'];
        }
        
/* Add */
        
else
        {
            
$this->DB->insert'task_manager'$save );
            
$this->registry->output->global_message $this->lang->words['t_saved'];
        }
        
        
/* Save next run and bounce */
        
$this->func_taskmanager->saveNextRunStamp();        
        
$this->taskManagerOverview();
    }    
    
    
/**
     * Builds the add/edit task form
     *
     * @param    string        $type        Either add or edit
     * @return    @e void
     */
    
public function taskManagerForm$type='add' )
    {
        
/* INIt */        
        
$form     = array();
        
$task_id  intval$this->request['task_id'] );
        
$dropdows = array();
        
$apps     = array();
        
        
/* Application drop down options */
        
foreach( ipsRegistry::$applications as $app_dir => $app_data )
        {
            
$apps[] = array( $app_dir$app_data['app_title'] );
        }
        
        
/* Edit Task Form */
        
if ( $type == 'edit' )
        {
            
/* Form Data */
            
$task  $this->DB->buildAndFetch( array( 'select' => '*''from' => 'task_manager''where' => "task_id={$task_id}) );
            
            
/* Form bits */
            
$title   sprintf$this->lang->words['task_edit_title'], $task['task_title'] );
            
$button  $this->lang->words['edittask_button'];
            
$formbit "task_edit_do";
        }
        
/* Add Task Form */
        
else
        {
            
/* Form Bits */
            
$button  $this->lang->words['t_create'];
            
$formbit "task_add_do";            
            
$title   $this->lang->words['t_creating'];
            
            
/* Form Data */
            
$task    = array();
        }
        
        
/* Create dropdown data */
        
$dropdown['_minute'] = array( => array( '-1'$this->lang->words['t_minute']   ) );
        
$dropdown['_hour']   = array( => array( '-1'$this->lang->words['t_hour']    ), => array( '0'$this->lang->words['t_midnight'] ) ); 
        
$dropdown['_wday']   = array( => array( '-1'$this->lang->words['t_dayweek'] ) );
        
$dropdown['_mday']   = array( => array( '-1'$this->lang->words['t_daymonth'] ) );
        
        for( 
$i $i 60$i++ )
        {
            
$dropdown['_minute'][] = array( $i$i );
        }
        
        for( 
$i $i 24$i++ )
        {
            if ( 
$i 12 )
            {
                
$ampm $i$this->lang->words['t_am'];
            }
            else if ( 
$i == 12 )
            {
                
$ampm $this->lang->words['t_midday'];
            }
            else
            {
                
$ampm $i 12 $this->lang->words['t_pm'];
            }
            
            
$dropdown['_hour'][] = array( $i$i' - ('.$ampm.')' );
        }
        
        for( 
$i $i 32$i++ )
        {
            
$dropdown['_mday'][] = array( $i$i );
        }
        
        
$dropdown['_wday'][]  = array( '0'$this->lang->words['t_sunday']    );
        
$dropdown['_wday'][]  = array( '1'$this->lang->words['t_monday']    );
        
$dropdown['_wday'][]  = array( '2'$this->lang->words['t_tuesday']   );
        
$dropdown['_wday'][]  = array( '3'$this->lang->words['t_wednesday'] );
        
$dropdown['_wday'][]  = array( '4'$this->lang->words['t_thursday']  );
        
$dropdown['_wday'][]  = array( '5'$this->lang->words['t_friday']    );
        
$dropdown['_wday'][]  = array( '6'$this->lang->words['t_saturday']  );
        
        
/* Form Elements */
        
$form['task_title']       = $this->registry->output->formInput(       'task_title'      $this->request['task_title']       ? $this->request['task_title']       : $task['task_title'] );
        
$form['task_description'] = $this->registry->output->formInput(       'task_description'$this->request['task_description'] ? $this->request['task_description'] : $task['task_description'] );
        
$form['task_file']        = $this->registry->output->formSimpleInput'task_file'       $this->request['task_file']        ? $this->request['task_file']        : $task['task_file']       , '20' );
        
$form['task_minute']      = $this->registry->output->formDropdown(    'task_minute'     $dropdown['_minute']               , $this->request['task_minute']      ? $this->request['task_minute']    : $task['task_minute']  ,  '''onchange="updatepreview()"' );
        
$form['task_hour']        = $this->registry->output->formDropdown(    'task_hour'       $dropdown['_hour']                 , $this->request['task_hour']        ? $this->request['task_hour']      : $task['task_hour']     , '''onchange="updatepreview()"' );
        
$form['task_week_day']    = $this->registry->output->formDropdown(    'task_week_day'   $dropdown['_wday']                 , $this->request['task_week_day']    ? $this->request['task_week_day']  : $task['task_week_day'] , '''onchange="updatepreview()"' );
        
$form['task_month_day']   = $this->registry->output->formDropdown(    'task_month_day'  $dropdown['_mday']                 , $this->request['task_month_day']   ? $this->request['task_month_day'] : $task['task_month_day'], '''onchange="updatepreview()"' );
        
$form['task_log']         = $this->registry->output->formYesNo(       'task_log'        $this->request['task_log']         ? $this->request['task_log']         : $task['task_log'] );
        
$form['task_enabled']     = $this->registry->output->formYesNo(       'task_enabled'    $this->request['task_enabled']     ? $this->request['task_enabled']     : $task['task_enabled'] );
        
$form['task_application'] = $this->registry->output->formDropdown(    'task_application'$apps$this->request['task_application'] ? $this->request['task_application'] : $task['task_application'] );
        
$form['task_key']          = $this->registry->output->formInput(       'task_key'        $this->request['task_key']         ? $this->request['task_key']         : $task['task_key'] );
        
        if ( 
IN_DEV )
        {
            
$form['task_safemode'] = $this->registry->output->formYesNo'task_safemode'$this->request['task_safemode'] ? $this->request['task_safemode'] : $task['task_safemode'] );
        }
        
        
$this->registry->output->html .= $this->html->taskManagerForm$form$button$formbit$type$title$task );
        
        if ( 
$type == 'add' )
        {
            
$this->registry->output->extra_nav[] = array( ""$this->lang->words['t_adding'] );
        }
        else
        {
            
$this->registry->output->extra_nav[] = array( ""sprintf$this->lang->words['t_editing'], $task['task_title'] ) );
        }
    }    
    
    
/**
     * Builds the task mananger overview screen
     *
     * @return    @e void
     */
    
public function taskManagerOverview()
    {
        
/* INIT */
        
$tasks   = array();
        
$row     = array();
        
$content "";
        
        
/* Query the tasks */
        
$this->DB->build( array( 'select' => '*''from' => 'task_manager''order' => 'task_safemode, task_next_run' ) );
        
$this->DB->execute();
        
        
/* Loop through and build the output array */
        
while ( $row $this->DB->fetch() )
        {
            if( !
IPSLib::appIsInstalled$row['task_application'] ) )
            {
                continue;
            }

            
$row['task_minute']    = $row['task_minute']    != '-1' $row['task_minute']    : '-';
            
$row['task_hour']      = $row['task_hour']      != '-1' $row['task_hour']      : '-';
            
$row['task_month_day'] = $row['task_month_day'] != '-1' $row['task_month_day'] : '-';
            
$row['task_week_day']  = $row['task_week_day']  != '-1' $row['task_week_day']  : '-';
            
            
$row['_next_run'] = gmstrftime'%c'$row['task_next_run'] );
            
            if ( 
$row['task_enabled'] != )
            {
                
$row['_style']    = " style='color:gray'";
                
$row['_title']    = ' ' $this->lang->words['t_disabledcaps'];
                
$row['_next_run'] = "<s>{$row['_next_run']}</s>";
            }
            
            if ( 
$row['task_locked'] )
            {
                
$row['_title'] .= ' ' $this->lang->words['t_lockedcaps'];
            }
            
            
$tasks$row['task_application'] ][] = $row;
        }
        
        
/* Output */
        
$this->registry->output->html .= $this->html->taskManagerOverview$tasksgmstrftime'%c' ) );
    }
    
    
/**
     * Shows the cron information screen
     *
     * @return    @e void
     */
    
public function showCronPage()
    {
        if ( !
$this->settings['task_cron_key'] )
        {
            
$this->settings['task_cron_key'] = md5uniqid() );
        }
        if ( isset( 
$this->request['toggle'] ) )
        {
            
$this->settings['task_use_cron'] = intval$this->request['toggle'] );
        }
        
IPSLib::updateSettings( array( 'task_cron_key' => $this->settings['task_cron_key'], 'task_use_cron' => $this->settings['task_use_cron'] ) );
    
        if ( isset( 
$this->request['toggle'] ) )
        {
            
$this->registry->output->global_message $this->lang->words['task_cron_mode_toggled_' $this->settings['task_use_cron']];
            
$this->taskManagerOverview();
        }
        else
        {
            
$this->registry->output->html .= $this->html->taskCrons();
        }
    }    
    
    
/**
     * Imports tasks from XML
     *
     * @param    string        $file            Filename to import tasks from
     * @param    boolean        $no_return        Set to return true/false, instead of displaying results
     * @return    @e mixed    True if $no_return is enabled, otherwise void
     */    
    
public function tasksImportFromXML$file=''$no_return=false )
    {
        
/* INIT */
        
$file     = ( $file ) ? $file IPS_PUBLIC_PATH 'resources/tasks.xml';
        
$inserted 0;
        
$updated  0;
        
$tasks    = array();
        
        
/* Check to see if the file exists */
        
if ( ! is_file$file ) )
        {
            
$this->registry->output->global_message sprintf$this->lang->words['t_import404'], $file );
            
$this->taskManagerOverview();
            return;
        }
        
        
$content    = @file_get_contents$file );
        
        
/* Grab current tasks */
        
$this->DB->build( array( 'select' => '*''from' => 'task_manager' ) );
        
$this->DB->execute();
        
        while( 
$row $this->DB->fetch() )
        {
            
$tasks$row['task_key'] ] = $row;
        }
        
        
/* Get the XML class */
        
require_once( IPS_KERNEL_PATH.'classXML.php' );/*noLibHook*/

        
$xml = new classXMLIPS_DOC_CHAR_SET );
        
$xml->loadXML$content );

        
/* Loop through the tasks */
        
foreach( $xml->fetchElements('row') as $record )
        {
            
$entry  $xml->fetchElementsFromRecord$record );
            
$_key    $entry['task_key'];
            
            
$entry['task_cronkey']        = $tasks$_key ]['task_cronkey'] ? $tasks$_key ]['task_cronkey'] : md5uniqidmicrotime() ) );
            
$entry['task_next_run']        = $tasks$_key ]['task_next_run'] ? $tasks$_key ]['task_next_run'] : time();
            
$entry['task_description']    = $entry['task_description'] ? $entry['task_description'] : '';
            
            unset( 
$entry['task_id'] );
                
            if ( 
$tasks$_key ]['task_key'] )
            {
                unset(
$entry['task_cronkey']);
                unset(
$entry['task_enabled']);

                
$updated++;
                
$this->DB->update'task_manager'$entry"task_key='" $tasks$_key ]['task_key'] . "'" );
            }
            else
            {
                
$inserted++;
                
$this->DB->insert'task_manager'$entry );
                
$tasks$_key ] = $entry;
            }
        }
        
        
/* Return or Bounce */
        
if ( $no_return )
        {
            
$this->registry->output->global_message sprintf$this->lang->words['t_inserted'], $inserted$updated );
            return 
TRUE;
        }
        else
        {
            
$this->registry->output->global_message sprintf$this->lang->words['t_inserted'], $inserted$updated );
            
$this->taskManagerOverview();
        }
    }
    
    
/**
     * Import all tasks from XML
     *
     * @return    @e void
     */
    
public function tasksImportAllApps()
    {
        
/* INIT */
        
$tasks = array();
        
$_gmsg = array();
        
        
/* Grab current tasks */
        
$this->DB->build( array( 'select' => '*''from' => 'task_manager' ) );
        
$this->DB->execute();
        
        while( 
$row $this->DB->fetch() )
        {
            
$tasks$row['task_key'] ] = $row;
        }
        
        
/* Grab XML class */
        
require_once( IPS_KERNEL_PATH 'classXML.php' );/*noLibHook*/
        
        /* Loop through all the applications */
        
foreach( $this->registry->getApplications() as $app => $__data )
        {
            
$stats = array( 'inserted' => 0'updated' => );
            
$xml   = new classXMLIPS_DOC_CHAR_SET );
            
$file  IPSLib::getAppDir(  $app ) . '/xml/' $app '_tasks.xml';
            
            if( 
is_file$file ) )
            {
                
$xml->load$file );
                
                foreach( 
$xml->fetchElements('row') as $task )
                {
                    
$entry $xml->fetchElementsFromRecord$task );
                    
                    
/* Remove unneeded */
                    
unset( $entry['task_id'] );
                    unset( 
$entry['task_next_run'] );
                    
                    
/* Update */
                    
$entry['task_cronkey']     = ( $entry['task_cronkey'] )     ? $entry['task_cronkey']     : md5uniqidmicrotime() ) );
                    
$entry['task_next_run']    = ( $entry['task_next_run'] )    ? $entry['task_next_run']    : time();
                    
$entry['task_description'] = ( $entry['task_description'] ) ? $entry['task_description'] : '';
                    
$entry['task_locked']      = intval$entry['task_locked'] );    
                        
                    if ( 
$tasks$entry['task_key'] ]['task_key'] )
                    {
                        unset(
$entry['task_cronkey']);
                        unset(
$entry['task_enabled']);

                        
$stats['updated']++;
                        
$this->DB->update'task_manager'$entry"task_key='" $entry['task_key'] . "'" );
                    }
                    else
                    {
                        
$stats['inserted']++;
                        
$this->DB->insert'task_manager'$entry );
                        
                        
$tasks$entry['task_key'] ] = $entry;
                    }
                }
            }
            
            
$_gmsg[] = $app ': ' sprintf$this->lang->words['t_inserted'], $stats['inserted'], $stats['updated'] );
            
            
/* In dev time stamp? */
            
if ( IN_DEV )
            {
                
$cache $this->caches['indev'];
                
$cache['import']['tasks'][ $app ] = time();
                
$this->cache->setCache'indev'$cache, array( 'donow' => 1'array' => ) );
            }
        }
        
        
/* Got a global message? */
        
if ( count($_gmsg) )
        {
            
$this->registry->output->setMessageimplode'<br />'$_gmsg ), );
        }
        
        
/* Return */
        
$this->taskManagerOverview();
    }

    
/**
     * Export a single task
     *
     * @return    @e void
     */
    
public function taskExport()
    {
        
/* INIT */
        
$entry    = array();
        
$id        intval($this->request['task_id']);
        
        require_once( 
IPS_KERNEL_PATH.'classXML.php' );/*noLibHook*/

        
$xml = new classXMLIPS_DOC_CHAR_SET );
        
$xml->newXMLDocument();
        
$xml->addElement'export' );
        
$xml->addElement'group''export' );

        
/* Query tasks */
        
$r    $this->DB->buildAndFetch( array( 'select' => '*''from' => 'task_manager''where' => "task_id='{$id}'" ) );        

        
$xml->addElementAsRecord'group''row'$r );
            
        
/* Finish XML */
        
$doc $xml->fetchDocument();

        
$this->registry->output->showDownload$doc'task.xml''');
    }

    
/**
     * Export tasks to XML
     *
     * @return    @e void
     */
    
public function tasksExportToXML()
    {
        
/* INIT */
        
$entry = array();
        
        require_once( 
IPS_KERNEL_PATH.'classXML.php' );/*noLibHook*/
        
        /* Loop through all the applications */
        
foreach( $this->registry->getApplications() as $app => $__data )
        {
            
$_c  0;
            
$xml = new classXMLIPS_DOC_CHAR_SET );
            
$xml->newXMLDocument();
            
$xml->addElement'export' );
            
$xml->addElement'group''export' );
            
            
/* Query tasks */
            
$this->DB->build( array( 'select' => '*''from' => 'task_manager''where' => "task_application='{$app}'" ) );        
            
$this->DB->execute();
            
            
/* Loop through and add tasks to XML */
            
while ( $r $this->DB->fetch() )
            {
                
$_c++;
                
$xml->addElementAsRecord'group''row'$r );
            }
            
            
/* Finish XML */
            
$doc $xml->fetchDocument();
            
            
/* Write */
            
if ( $doc  AND $_c )
            {
                
file_put_contentsIPSLib::getAppDir$app ) . '/xml/' $app '_tasks.xml'$doc );
            }
        }
        
        
$this->registry->output->setMessage$this->lang->words['t_exported'], );
        
$this->taskManagerOverview();
    }
}
Онлайн: 1
Реклама