示例#1
0
    /**
     * Run/render a set of inputs for each cron job that this form will manage.
     * 
     * "enable_$tag" is the value stored in the cron job enablement checkbox.
     * "$tag" will be the form data loaded from crontab.
     */
    public function run()
    {
        // Script for toggle checkboxes:
        Yii::app()->clientScript->registerScript('cronForm', '
var toggleCronJobInputs = function(checkbox,initial) {
    var tag = checkbox.prop("id").replace("cron-job-","");
    if (typeof initial == "undefined")
        initial = false;
    if(checkbox.is(":checked")) {
        $("#"+checkbox.attr("id")+"-form").each(function(){
            if(initial) {
                $("#"+checkbox.attr("id")+"-form").show();
            } else {
                $("#"+checkbox.attr("id")+"-form").slideDown().find("input,select").prop("disabled",false);
                cronForm[cronForm._nameSpaces[tag]].setup();
            }
        });
    } else {
        $("#"+checkbox.attr("id")+"-form").each(function(){
            if(initial) {
                $(this).hide();
            } else {
                $(this).slideUp();
            }
            $(this).find("input,select").prop("disabled",true);
        });
    }
}
$(".cron-enabled").each(function() {
    toggleCronJobInputs($(this),1);
}).change(function() {
    toggleCronJobInputs($(this));
});
', CClientScript::POS_READY);
        // Render form fields for each cron job managed by this widget:
        CrontabUtil::$printHint = false;
        $jobSections = array();
        foreach ($this->jobTags as $tag) {
            // Populate initial form data.
            //
            // The job is initially disabled if not found in the table
            $enabled = isset($this->j[$tag]);
            $this->formData[$tag] = CrontabUtil::cronJobToForm($enabled ? $this->j[$tag] : array());
            // Overwrite cmd/desc with default as defined in the widget declaration/job config:
            if (!$this->allowUserCmdInput) {
                $this->formData[$tag]['cmd'] = $this->jobAttr($tag, 'cmd');
                $this->formData[$tag]['desc'] = $this->jobAttr($tag, 'desc');
            }
            // Render the job form inputs for this particular job:
            $viewData = array();
            foreach (array('title', 'longdesc', 'instructions') as $attr) {
                $viewData[$attr] = $this->jobAttr($tag, $attr);
            }
            $jobSections[] = $this->render('application.components.views.cronJobForm', array_merge($viewData, array('userCmd' => $this->allowUserCmdInput, 'cmd' => $this->formData[$tag]['cmd'], 'displayCmd' => isset($this->displayCmds[$tag]) ? $this->displayCmds[$tag] : '', 'enabled' => $enabled, 'labelClass' => $this->labelCssClass, 'name' => $this->name, 'tag' => $tag, 'initialCron' => $this->formData[$tag])), true);
        }
        echo implode($this->jobSeparator, $jobSections);
    }