Вход Регистрация
Файл: concrete5.7.5.6/concrete/single_pages/dashboard/system/optimization/jobs.php
Строк: 446
<?php defined('C5_EXECUTE') or die("Access Denied.");

/* @var $jh JsonHelper */
$json Core::make('helper/json');
/* @var $dh ConcreteCoreLocalizationServiceDate */
$dh Core::make('helper/date');

?>
<style type="text/css">
#ccm-jobs-list td {
    vertical-align: middle;
    -webkit-transition-property: color, background-color;
    -webkit-transition-duration: .9s, .9s;
    -moz-transition-property: color, background-color;
    -moz-transition-duration: .9s, .9s;
    -o-transition-property: color, background-color;
    -o-transition-duration: .9s, .9s;
    -ms-transition-property: color, background-color;
    -ms-transition-duration: .9s, .9s;
    transition-property: color, background-color;
    transition-duration: .9s, .9s;
 }

#ccm-jobs-list td button {
     float: right;
 }

#ccm-jobs-list tr.error td {
    color: #f00;
}

#ccm-jobs-list tr.success td {
    color: #090;
}

</style>

<?php echo Loader::helper('concrete/ui')->tabs(array(
    array(
$view->action('view'), t('Jobs'), $jobListSelected),
    array(
$view->action('view_sets'), t('Job Sets'), $jobSetsSelected)
), 
false);?>

<?php if (in_array($this->controller->getTask(), array('view''install''uninstall''job_installed''job_uninstalled''reset''reset_complete''job_scheduled'))) { ?>

<div id="ccm-tab-content-list">

<?php if (count($installedJobs) > 0) { ?>

<table class="table table-stripped" id="ccm-jobs-list">
    <thead>
        <tr>
            <th><?php echo t('ID')?></th>
            <th style="width: 250px"><?php echo t('Name')?></th>
            <th><?php echo t('Last Run')?></th>
            <th style="width: 200px"><?php echo t('Results of Last Run')?></th>
            <th><a href="<?php echo $view->action('reset')?>" class="btn btn-default pull-right btn-xs"><?php echo t('Reset All Jobs')?></a></th>
            <th></th>
        </tr>
    </thead>
    
    <tbody>
        <?php foreach($installedJobs as $j) { ?>
            <tr class="<?php if ($j->didFail()) { ?>error<?php ?> <?php if ($j->getJobStatus() == 'RUNNING') {?>running<?php ?>">
                <td>
                    <?php echo $j->getJobID()?>
                </td>
                
                <td>
                    <i class="fa fa-question-circle launch-tooltip" title="<?php echo $j->getJobDescription()?>"></i> <?php echo $j->getJobName()?>
                </td>
                
                <td class="jDateLastRun"><?php
                    
if ($j->getJobStatus() == 'RUNNING') {
                        
$runtime $dh->formatDateTime($j->getJobDateLastRun(), truetrue);
                        echo (
"<strong>");
                        echo 
t("Running since %s"$runtime);
                        echo (
"</strong>");
                    } else if(
$j->getJobDateLastRun() == '' || substr($j->getJobDateLastRun(), 04) == '0000') {
                        echo 
t('Never');
                    } else {
                        
$runtime $dh->formatDateTime($j->getJobDateLastRun(), truetrue);
                        echo 
$runtime;
                    }
                
?></td>
                
                <td class="jLastStatusText">
                    <?php echo $j->getJobLastStatusText()?>
                </td>
                
                <td class="ccm-jobs-button">
                    <button data-jID="<?php echo $j->getJobID()?>" data-jSupportsQueue="<?php echo $j->supportsQueue()?>" data-jName="<?php echo $j->getJobName()?>" class="btn-run-job btn btn-default btn-xs"><i class="fa fa-play"></i> <?php echo t('Run')?></button>
                </td>
                
                <td style="width: 50px">
                    <a href="javascript:void(0)" class="ccm-automate-job-instructions icon-link launch-tooltip" data-jSupportsQueue="<?php echo $j->supportsQueue()?>" data-jID="<?php echo $j->getJobID()?>" title="<?php echo t('Automate this Job')?>"><i class="fa fa-clock-o"></i></a>
                    <?php if ($j->canUninstall()) { ?>
                        <a href="<?php echo $view->action('uninstall'$j->getJobID())?>" class="icon-link launch-tooltip" title="<?php echo t('Remove this Job')?>"><i class="fa fa-trash-o"></i></a>
                    <?php ?>
                </td>
                
            </tr>
        <?php ?>
    </tbody>
</table>

<div style="display: none" id="ccm-jobs-automation-dialogs">
    <?php foreach($installedJobs as $j) { ?>
        <div id="jd<?php echo $j->getJobID()?>" class="ccm-ui">
            <form action="<?php echo $view->action('update_job_schedule')?>" method="post" data-schedule-form="<?php echo $j->getJobID()?>">
                <?php echo $form->hidden('jID'$j->getJobID());?>
                
                <h4><?php echo t('Run Job')?></h4>
                
                <div class="radio">
                    <label>
                        <input type="radio" name="isScheduled" class="ccm-jobs-automation-schedule-type" value="1" <?php echo ($j->isScheduled?'checked="checked"':'')?> />
                        <?php echo t('When people browse to the page.  (which runs after the main rendering request of the page.)')?>
                    </label>
                </div>
                
                <fieldset class="ccm-jobs-automation-schedule-auto" <?php echo ($j->isScheduled?'':'style="display: none;"')?>>
                    <div class="well clearfix">
                        <div class="form-group">
                            <label><?php  echo t('Run this Job Every')?></label>
                            
                            <div class="input">
                                <div class="col-md-6">
                                    <?php echo $form->text('value',h($j->scheduledValue),array('class'=>''))?>
                                </div>
                                
                                <div class="col-md-6">
                                    <?php echo $form->select('unit', array('minutes' => t('Minutes'), 'hours'=>t('Hours'), 'days'=>t('Days'), 'weeks'=>t('Weeks'), 'months'=>t('Months')), h($j->scheduledInterval), array('class'=>''))?>
                                </div>
                            </div>
                        </div>
                    </div>
                </fieldset>
                
                <div class="radio">
                    <label>
                        <input type="radio" name="isScheduled" class="ccm-jobs-automation-schedule-type" value="0" <?php echo ($j->isScheduled?'':'checked="checked"')?> />
                        <?php echo t('Through Cron')?>
                    </label>
                </div>
                
                <fieldset class="ccm-jobs-automation-schedule-cron" <?php echo ($j->isScheduled?'style="display: none;"':'')?>>
                    <div class="well">
                        <?php if ($j->supportsQueue()) { ?>
                            <p><?php echo t('The "%s" job supports queueing, meaning it can be run in a couple different ways:'$j->getJobName())?></p>
                            
                            <h4><?php echo t('No Queueing')?></h4>
                            
                            <div class="form-group">
                                <textarea rows="2" class="ccm-default-jobs-url form-control"><?php echo URL::to('/ccm/system/jobs?auth=' $auth '&jID=' $j->getJobID())?></textarea>
                            </div>
                            
                            <div class="alert alert-info">
                                <?php echo t('This will treat the job as though it were like any other concrete5 job. The entire job will be run at once.')?>
                            </div>
                
                            <h4><?php echo t('Queueing')?></h4>
                            
                            <p><?php echo t("First, schedule this URL for when you'd like this job to run:")?></p>
                            
                            <div class="form-group">
                                <textarea rows="2" class="ccm-default-jobs-url form-control"><?php echo URL::to('/ccm/system/jobs/run_single?auth=' $auth '&jID=' $j->getJobID())?></textarea>
                            </div>
                            
                            <p><?php echo t('Then, make sure this URL is scheduled to run frequently, like every 3-5 minutes:')?></p>
                            
                            <div class="form-group">
                                <textarea rows="2" class="ccm-default-jobs-url form-control"><?php echo URL::to('/ccm/system/jobs/check_queue?auth=' $auth)?></textarea>
                            </div>
                            
                            <div class="alert alert-info">
                                <?php echo t('The first URL starts the process - the second ensures that it completes in batches.')?>
                            </div>
                
                        <?php } else { ?>
                            <p><?php echo t('To run the "%s" job, automate the following URL using cron or a similar system:'$j->getJobName())?></p><br/>
                            <div>
                                <textarea rows="2" class="ccm-default-jobs-url form-control"><?php echo URL::to('/ccm/system/jobs/run_single?auth=' $auth '&jID=' $j->getJobID())?></textarea>
                            </div>
                        <?php ?>    
                    </div>
                </fieldset>
                
                <div class="dialog-buttons">
                    <button type="button" onclick="$('form[data-schedule-form=<?php echo $j->getJobID()?>]').submit()" class="btn btn-primary pull-right">
                        <?php echo t('Save')?>
                    </button>
                </div>
            </form>
        </div>
    <?php ?>
</div>

<?php } else { ?>
    <p><?php echo t('You have no jobs installed.')?></p>
<?php ?>

<?php if (count($availableJobs) > 0) { ?>
    <h4><?php echo t('Awaiting Installation')?></h4>
    <table class="table table-striped">
    <thead>
        <tr> 
            <th><?php echo t('Name')?></th>
            <th><?php echo t('Description')?></th> 
            <th></th>
        </tr>
    </thead>
    <tbody>
        <?php foreach($availableJobs as $availableJobName => $job):?>
            <tr> 
                <td><?php echo $job->getJobName() ?></td>
                <td><?php echo $job->getJobDescription() ?></td> 
                <td><?php if(!$job->invalid):?>
                    <a href="<?php echo $view->action('install'$job->jHandle)?>" class="btn btn-sm btn-default pull-right"><?php echo t('Install')?></a>
                <?php endif?></td>
            </tr>    
        <?php endforeach?>
    </tbody>
    </table>
<?php ?>
<?php 
$djs 
JobSet::getDefault();
if (
is_object($djs)) { ?>
<div class="well">
    <h4><?php echo t('Automation Instructions')?></h4>
    <p><?php echo t('To run all the jobs in the <a href="%s">%s</a> Job Set, schedule this URL using cron or a similar system:'$view->url('/dashboard/system/optimization/jobs''edit_set'$djs->getJobSetID()), $djs->getJobSetDisplayName())?></p>
    <div>
        <input type="text" style="width: 700px" class="ccm-default-jobs-url" value="<?php echo $view->url('/ccm/system/jobs?auth=' $auth)?>" />
    </div>
</div>
<?php ?>

</div>

<?php } else { ?>

<div id="ccm-tab-content-sets">

<?php if (in_array($this->controller->getTask(), array('update_set''update_set_jobs''edit_set''delete_set'))) { ?>
    <h2><?php echo $set->getJobSetName()?></h2>
    
    <div class="row">
        <div class="col-md-6">
            <form class="form-vertical" method="post" action="<?php echo $view->action('update_set')?>">
        
                <input type="hidden" name="jsID" value="<?php echo $set->getJobSetID()?>" />

                <?php echo Loader::helper('validation/token')->output('update_set')?>

                <fieldset>
                    <legend><?php echo t('Details')?></legend>
        
                    <div class="form-group">
                        <?php echo $form->label('jsName't('Name'))?>
                        <div class="input">
                            <?php echo $form->text('jsName'$set->getJobSetName())?>
                        </div>
                    </div>
    
                    <div class="form-group">
                        <div class="input">
                            <button type="submit" class="btn btn-primary"><?php echo t('Update Job Set')?></button>
                        </div>
                    </div>
                </fieldset>
            </form>

            <?php if ($set->canDelete()) { ?>
    
                <form method="post" action="<?php echo $view->action('delete_set')?>" class="form-vertical">
                    <fieldset>
                        <legend><?php echo t('Delete Set')?></legend>
                        
                        <?php echo Loader::helper('validation/token')->output('delete_set')?>
                        <input type="hidden" name="jsID" value="<?php echo $set->getJobSetID()?>" />
                        
                        <p><?php echo t('Warning, this cannot be undone. No jobs will be deleted but they will no longer be grouped together.')?></p>
                        
                        <div class="form-group">
                            <div class="input">
                                <button type="submit" class="btn btn-primary"><?php echo t('Delete Job Set')?></button>
                            </div>
                        </div>
                    </fieldset>
                </form>
            <?php ?>
        </div>

        <div class="col-md-6">
            <form class="form-vertical" method="post" action="<?php echo $view->action('update_set_jobs')?>">
                <input type="hidden" name="jsID" value="<?php echo $set->getJobSetID()?>" />
                <?php echo Loader::helper('validation/token')->output('update_set_jobs')?>

                <fieldset>
                    <legend><?php echo t('Jobs')?></legend>
        
                    <?php 
                    $list 
$set->getJobs();
                    if (
count($installedJobs) > 0) { ?>
                        <?php foreach($installedJobs as $g) {  ?>
                            <div class="checkbox">
                                <label>
                                    <?php echo $form->checkbox('jID[]'$g->getJobID(), $set->contains($g)) ?>
                                    <span><?php echo $g->getJobName()?></span>
                                
                                </label>
                            </div>
                        <?php ?>
                        
                        <div class="form-group">
                            <div class="input">
                                <button type="submit" class="btn btn-primary"><?php echo t('Update Jobs')?></button>
                            </div>
                        </div>
                    <?php } else { ?>
                        <p><?php echo t('No Jobs found.')?></p>
                    <?php ?>
                </fieldset>
            </form>
        </div>
    </div>

    <br />

    <div class="row">
        <div class="col-md-12">
            <div class="well">
                <h4><?php echo t('Automation Instructions')?></h4>
            
                <form action="<?php echo $view->action('update_set_schedule');?>" method="post">
                    <?php echo $form->hidden('jsID',$set->getJobSetID()); ?>
                    <div class="radio">
                        <label>
                            <input type="radio" name="isScheduled" class="ccm-jobs-automation-schedule-type" value="1" <?php echo ($set->isScheduled?'checked="checked"':'')?> />
                            <?php echo t('When people browse to the page.  (which runs after the main rendering request of the page.)')?>
                        </label>
                    </div>
                
                    <fieldset class="ccm-jobs-automation-schedule-auto" <?php echo ($set->isScheduled?'':'style="display: none;"')?>>
                        <div class="col-md-3">
                            <div class="form-group">
                                <label><?php  echo t('Run this Job Every')?></label>
                                <div class="input">
                                    <?php echo $form->text('value'h($set->scheduledValue), array('class' => 'col-md-6'))?>
                                </div>
                            </div>
                        </div>
                        
                        <div class="col-md-3">
                            <div class="form-group">
                                <label></label>
                                <div class="input">
                                    <?php echo $form->select('unit', array('hours'=>t('Hours'), 'days'=>t('Days'), 'weeks'=>t('Weeks'), 'months'=>t('Months')), h($set->scheduledInterval), array('class'=>''))?>
                                </div>
                            </div>
                        </div>
                    </fieldset>
        
                    <div class="radio">
                        <label>
                            <input type="radio" name="isScheduled" class="ccm-jobs-automation-schedule-type" value="0" <?php echo ($set->isScheduled?'':'checked="checked"')?> />
                            <?php echo t('Through Cron')?>
                        </label>
                    </div>
                
                    <fieldset class="ccm-jobs-automation-schedule-cron" <?php echo ($set->isScheduled?'style="display: none;"':'')?>>
                        <p><?php echo t('To run all the jobs in this Job Set, schedule this URL using cron or a similar system:'$set->getJobSetID())?></p>
                    
                        <div class="form-group">
                            <textarea rows="2" class="ccm-default-jobs-url form-control"><?php echo $view->url('/tools/required/jobs?auth=' $auth '&jsID=' $set->getJobSetID())?></textarea>
                        </div>
                    </fieldset>
                
                <div class="form-group">
                    <?php echo $form->submit('submit't('Update Schedule'), array('class' => 'btn-primary'))?>
                </div>
            </form>
            </div>
        </div>
    </div>

<?php } else { ?>

<div class="row">
    <div class="col-md-12">
        <form method="post" action="<?php echo $view->action('add_set')?>">
            <?php if (count($jobSets) > 0) { ?>
                <ul class="item-select-list" id="ccm-job-set-list">
                    <?php foreach($jobSets as $j) { ?>
                        <li id="jsID_<?php echo $j->getJobSetID()?>">
                            <a href="<?php echo $view->url('/dashboard/system/optimization/jobs''edit_set'$j->getJobSetID())?>">
                                <i class="fa fa-bars"></i> <?php echo $j->getJobSetDisplayName()?>
                            </a>
                        </li>
                    <?php ?>
                </ul>
            <?php } else { ?>
                <p><?php echo t('You have not added any Job sets.')?></p>
            <?php ?>
    
            <br/>
        
            <h3><?php echo t('Add Set')?></h3>
    
            <?php echo Loader::helper('validation/token')->output('add_set')?>
            <div class="form-group">
                <?php echo $form->label('jsName't('Name'))?>
                <div class="input">
                    <?php echo $form->text('jsName')?>
                </div>
            </div>
            
            <div class="form-group">
                <label><?php echo t('Jobs')?></label>
                <?php foreach($installedJobs as $g) {  ?>
                    <div class="checkbox">
                        <label>
                            <?php echo $form->checkbox('jID[]'$g->getJobID()) ?>
                            <span><?php echo $g->getJobName()?></span>
                        </label>
                    </div>
                <?php ?>
            </div>
            
            <div class="well clearfix">
                <button type="submit" class="btn btn-primary pull-right"><?php echo t('Add Job Set')?></button>
            </div>
            
        </form>
    </div>
</div>

    <?php ?>
</div>
<?php ?>


<script type="text/javascript">

var pulseRowInterval = false;

jQuery.fn.showLoading = function() {
    if ($(this).find('button').attr('data-jSupportsQueue')) {
        $(this).find('button').html('<i class="fa fa-refresh fa-spin"></i> <?php echo t('View')?>');
    } else {
        $(this).find('button').html('<i class="fa fa-refersh fa-spin"></i> <?php echo t('Run')?>').prop('disabled', true);
    }
    var row = $(this);
    row.removeClass('error success');

    if (!row.attr('data-color')) {
        row.find('td').css('background-color', '#ccc');
    }
    pulseRowInterval = setInterval(function() {
        if (row.attr('data-color') == '#ccc') {
            row.find('td').css('background-color', '#fff');
            row.attr('data-color', '#fff');
        } else {
            row.find('td').css('background-color', '#ccc');
            row.attr('data-color', '#ccc');
        }            
    }, 500);
}

jQuery.fn.hideLoading = function() {
    $(this).find('button').html('<i class="fa fa-play"></i> <?php echo t('Run')?>').prop('disabled', false);
    var row = $(this);
    row.removeClass();
    row.find('td').css('background-color', '');
    row.attr('data-color', '');
    clearInterval(pulseRowInterval);
}

jQuery.fn.processResponse = function(r) {
    $(this).hideLoading();
    if (r.error) {
        $(this).addClass('error');
    } else {
        $(this).addClass('success');
    }
    $(this).find('.jDateLastRun').html(r.jDateLastRun);
    $(this).find('.jLastStatusText').html(r.result);
}

$(function() {
    $('tr.running').showLoading();
    $('.ccm-default-jobs-url').on('click', function() {
        $(this).get(0).select();
    });
    $('a.ccm-automate-job-instructions').on('click', $("#ccm-jobs-list"), function() {
        //if ($(this).attr('data-jSupportsQueue')) { }
        jQuery.fn.dialog.open({
            element: '#jd' + $(this).attr("data-jID"),
            height: 550,
            width: 650,
            modal: true,
            title: <?php echo $json->encode(t('Automation Instructions'))?>
        });
    });
    $('.btn-run-job').on('click', $('#ccm-jobs-list'), function() {
        var row = $(this).parent().parent();
        row.showLoading();
        var jSupportsQueue = $(this).attr('data-jSupportsQueue');
        var jID = $(this).attr('data-jID');
        var jName = $(this).attr('data-jName');
        var params = [
            {'name': 'auth', 'value': '<?php echo $auth?>'},
            {'name': 'jID', 'value': jID}
        ];
        if (jSupportsQueue) {
            ccm_triggerProgressiveOperation(
                '<?php echo addslashes(URL::to('/ccm/system/jobs/run_single'))?>',
                params,
                jName, function(r) {
                    $('.ui-dialog-content').dialog('close');
                    row.processResponse(r);
                }, function(r) {
                    row.processResponse(r);
                }
            );
        } else {
            $.ajax({ 
                url: '<?php echo addslashes(URL::to('/ccm/system/jobs/run_single'))?>',
                data: params,
                dataType: 'json',
                cache: false,
                success: function(json) {
                    row.processResponse(json);
                }
            });
        }
    });
    
    $('.ccm-jobs-automation-schedule-type').click(function() {
        if($(this).val() == 1) {
            $(this).parent().parent().siblings('.ccm-jobs-automation-schedule-cron').hide();
            $(this).parent().parent().siblings('.ccm-jobs-automation-schedule-auto').show();
        } else {
            $(this).parent().parent().siblings('.ccm-jobs-automation-schedule-auto').hide();
            $(this).parent().parent().siblings('.ccm-jobs-automation-schedule-cron').show();
        }
    });
});
</script>
Онлайн: 0
Реклама