View source
<?php
function workbench_scheduler_schedules_action_form($options) {
$form = array();
$types = node_type_get_types();
$cts_schedules = workbench_scheduler_load_type_schedules(array_keys($types));
foreach ($cts_schedules as $ct => $schedules) {
foreach ($schedules as $sid => $schedule) {
$type_schedules[$sid] = $schedule;
}
}
$form['workbench_scheduler'] = array(
'#type' => 'fieldset',
'#title' => 'Workbench Schedule',
'#description' => t('Select a schedule for changing moderation states.'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
'#group' => 'additional_settings',
'#access' => user_access('set workbench schedule'),
);
$schedule_options = array();
$schedule_options[] = array(
'label' => t('No Schedule'),
'start_state' => '',
'end_state' => '',
);
$moderation_states = workbench_scheduler_state_labels();
foreach ($type_schedules as $schedule) {
$schedule_options[$schedule->sid] = array(
'label' => $schedule->label,
'start_state' => !empty($schedule->start_state) ? $moderation_states[$schedule->start_state] : '',
'end_state' => !empty($schedule->end_state) ? $moderation_states[$schedule->end_state] : '',
);
drupal_add_js(array(
'workbench_scheduler' => array(
'schedules' => $schedule_options,
),
), 'setting');
$form['workbench_scheduler']['workbench_scheduler_sid'] = array(
'#type' => 'tableselect',
'#title' => t('Select Schedule'),
'#description' => t('Select the schedule to use for this node.'),
'#options' => $schedule_options,
'#multiple' => FALSE,
'#header' => array(
'label' => t('Name'),
'start_state' => t('Start State'),
'end_state' => t('End State'),
),
);
$form['workbench_scheduler']['dates'] = array(
'#type' => 'fieldset',
'#title' => t('Schedule Dates'),
'#description' => t('Select the start and/or end dates to trigger states changes for this node.'),
'#states' => array(
'invisible' => array(
':input[name=workbench_scheduler_sid]' => array(
'value' => '0',
),
),
),
);
if (!empty($schedule->start_state)) {
$form['workbench_scheduler']['dates']['workbench_scheduler_start_date'] = array(
'#type' => 'date_popup',
'#date_format' => 'Y-m-d H:i',
'#title' => t('Start date'),
'#description' => t('Select the date to switch this node to the scheduled \'start state\''),
);
}
if (!empty($schedule->end_state)) {
$form['workbench_scheduler']['dates']['workbench_scheduler_end_date'] = array(
'#type' => 'date_popup',
'#date_format' => 'Y-m-d H:i',
'#title' => t('End date'),
'#description' => t('Select the date to switch this node to the scheduled \'end state\''),
);
}
$node_schedule = isset($form['#node']->workbench_schedule) ? $form['#node']->workbench_schedule : FALSE;
if ($node_schedule) {
$form['workbench_scheduler']['workbench_scheduler_sid']['#default_value'] = $node_schedule->sid;
if ($node_schedule->start_date) {
$start_date = format_date($node_schedule->start_date, 'custom', 'Y-m-d H:i:s');
$form['workbench_scheduler']['dates']['workbench_scheduler_start_date']['#default_value'] = $start_date;
}
if ($node_schedule->end_date) {
$end_date = format_date($node_schedule->end_date, 'custom', 'Y-m-d H:i:s');
$form['workbench_scheduler']['dates']['workbench_scheduler_end_date']['#default_value'] = $end_date;
}
}
}
$form['#validate'][] = 'workbench_scheduler_node_form_validate';
$form['actions']['submit']['#submit'][] = 'workbench_scheduler_node_form_submit';
return $form;
}
function workbench_scheduler_schedules_action_submit($form, &$form_state) {
if (isset($form_state['values']['workbench_scheduler_sid'])) {
$context['workbench_scheduler_sid'] = $form_state['values']['workbench_scheduler_sid'];
}
if (isset($form_state['values']['workbench_scheduler_start_date'])) {
$context['workbench_scheduler_start_date'] = $form_state['values']['workbench_scheduler_start_date'];
}
if (isset($form_state['values']['workbench_scheduler_end_date'])) {
$context['workbench_scheduler_end_date'] = $form_state['values']['workbench_scheduler_end_date'];
}
return $context;
}
function workbench_scheduler_schedules_action(&$entity, $context = array()) {
$types_moderated = workbench_moderation_moderate_node_types();
$is_moderated = in_array($entity->type, $types_moderated) ? TRUE : FALSE;
$schedules = workbench_scheduler_load_type_schedules($entity->type);
if ($is_moderated && !empty($schedules)) {
$entity->workbench_schedule->sid = $context['workbench_scheduler_sid'];
if (isset($context['workbench_scheduler_start_date'])) {
$entity->workbench_schedule->start_date = strtotime($context['workbench_scheduler_start_date']);
}
if (isset($context['workbench_scheduler_end_date'])) {
$entity->workbench_schedule->end_date = strtotime($context['workbench_scheduler_end_date']);
}
$live_revision = workbench_moderation_node_current_load($entity);
$entity->vid = $live_revision->vid;
}
}