function workbench_scheduler_admin_edit_revision_schedule in Workbench Scheduler 7.2
Same name and namespace in other branches
- 7 workbench_scheduler.admin.inc \workbench_scheduler_admin_edit_revision_schedule()
Form to edit the schedule for an existing node revision.
1 string reference to 'workbench_scheduler_admin_edit_revision_schedule'
- workbench_scheduler_menu in ./
workbench_scheduler.module - Implements hook_menu().
File
- ./
workbench_scheduler.admin.inc, line 557 - Provides admin functions for Workbench Scheduler.
Code
function workbench_scheduler_admin_edit_revision_schedule($form, &$form_state, $node, $vid) {
$form['nid'] = array(
'#type' => 'hidden',
'#value' => $node->nid,
);
$form['vid'] = array(
'#type' => 'hidden',
'#value' => $vid,
);
$type_schedules = workbench_scheduler_type_schedules_load($node->type);
$moderation_states = workbench_scheduler_state_labels();
$transitions = workbench_moderation_transitions();
$revision = node_load($node->nid, $vid);
// Getting language (for date formats).
global $language;
// Build array of data being passed to settings in javascript.
$schedule_data = array();
// Build an options array for which schedules to choose.
$schedule_options = array();
// Load workbench schedule by vid
$node_schedules = workbench_scheduler_load_node_schedule($node->nid, $vid);
// Setting selected schedules.
$selected_schedules = array();
if (!empty($node_schedules)) {
foreach ($node_schedules as $node_schedule) {
$selected_schedules[$node_schedule->sid] = TRUE;
}
}
// Add each type schedule to the options array.
if (!empty($type_schedules)) {
foreach ($type_schedules as $sid => $schedule) {
// TODO: These new permission refactoring needs testing.
// If no set permissions check view permissions.
if (!workbench_scheduler_node_schedule_access('set', $revision, $schedule)) {
// If no view permissions then skip.
if (!workbench_scheduler_node_schedule_access('view', $revision, $schedule)) {
continue;
}
elseif (workbench_scheduler_node_schedule_access('view', $revision, $schedule) && empty($selected_schedules[$sid])) {
continue;
}
}
// Get transition states.
unset($transition);
if (!empty($schedule->transition)) {
foreach ($transitions as $transition) {
if ($transition->id == $schedule->transition) {
break;
}
}
}
// Final array for rendering schedule fieldsets and their dates.
$schedule_data[] = array(
'sid' => $schedule->sid,
'label' => $schedule->label,
'name' => $schedule->name,
'transition' => !empty($transition) ? $transition->id : '',
'from_name' => !empty($transition) && !empty($moderation_states[$transition->from_name]) ? $moderation_states[$transition->from_name] : '',
'to_name' => !empty($transition) && !empty($moderation_states[$transition->to_name]) ? $moderation_states[$transition->to_name] : '',
);
// Checking permissions for setting schedules.
// Added to schedules table.
if (workbench_scheduler_node_schedule_access('set', $revision, $schedule)) {
$schedule_options[$schedule->sid] = array(
'label' => $schedule->label,
'from_name' => !empty($transition) && !empty($moderation_states[$transition->from_name]) ? $moderation_states[$transition->from_name] : '',
'to_name' => !empty($transition) && !empty($moderation_states[$transition->to_name]) ? $moderation_states[$transition->to_name] : '',
);
}
}
}
// Add schedules to JavaScript settings.
$form['workbench_scheduler']['#attached']['js'][] = drupal_get_path('module', 'workbench_scheduler') . '/js/workbench_scheduler.js';
$form['workbench_scheduler']['#attached']['js'][] = array(
'data' => array(
'workbench_scheduler' => array(
'schedules' => $schedule_data,
),
),
'type' => 'setting',
);
// Create table select for selecting schedule.
if (!empty($schedule_options)) {
$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' => TRUE,
'#header' => array(
'label' => t('Name'),
'from_name' => t('When content state is. . .'),
'to_name' => t('Set content state to . . .'),
),
'#attributes' => array(
'class' => array(
'workbench-schedule-sid',
),
),
);
}
foreach ($schedule_data as $schedule) {
$sid = $schedule['sid'];
// Fieldset for collecting schedule dates.
$form['workbench_scheduler']['dates'][$sid] = array(
'#type' => 'fieldset',
'#title' => $schedule['label'],
'#states' => array(
'visible' => array(
':input[name="workbench_scheduler_sid[' . $sid . ']"]' => array(
'checked' => TRUE,
),
),
),
);
$form['workbench_scheduler']['dates'][$sid]['workbench_scheduler_date']['#tree'] = TRUE;
// Start date.
$form['workbench_scheduler']['dates'][$sid]['workbench_scheduler_date'][$sid] = array(
'#type' => 'date_popup',
'#date_format' => workbench_scheduler_date_format(),
'#title' => t('Set content to ') . $schedule['to_name'] . t(' after . . .'),
'#description' => t('Note: This schedule will only run when the current moderation state is') . ' <strong>' . $schedule['from_name'] . '</strong>.',
);
// if user does not have set access but has view access.
$schedule_obj = workbench_scheduler_schedules_load($schedule['sid']);
if (!workbench_scheduler_node_schedule_access('set', $revision, $schedule_obj) && workbench_scheduler_node_schedule_access('view', $revision, $schedule_obj)) {
unset($form['workbench_scheduler']['dates'][$sid]['#states']);
$form['workbench_scheduler']['dates'][$sid]['workbench_scheduler_date'][$sid]['#disabled'] = TRUE;
}
// Have a node schedule(editing a node)? Use for defaults.
if (!empty($node_schedules)) {
foreach ($node_schedules as $node_schedule) {
if ($node_schedule) {
if ($node_schedule->sid == $sid && $node_schedule->date) {
// Format date for field.
$date = format_date($node_schedule->date, 'custom', DATE_FORMAT_DATETIME);
$form['workbench_scheduler']['dates'][$sid]['workbench_scheduler_date'][$sid]['#default_value'] = $date;
// Disable schedule after it has been run.
if ($node_schedule->completed) {
if (!empty($form['workbench_scheduler']['workbench_scheduler_sid'][$sid])) {
$form['workbench_scheduler']['workbench_scheduler_sid'][$sid]['#attributes']['disabled'] = TRUE;
}
$form['workbench_scheduler']['dates'][$sid]['workbench_scheduler_date'][$sid]['#disabled'] = TRUE;
$form['workbench_scheduler']['dates'][$sid]['workbench_scheduler_date'][$sid]['#description'] = t('Note: This schedule has completed and cannot be changed for this revision.');
}
}
}
}
$form['workbench_scheduler']['workbench_scheduler_sid']['#default_value'] = $selected_schedules;
}
}
if (workbench_scheduler_node_schedule_access('set', $revision)) {
$form['actions'] = array(
'#type' => 'actions',
);
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Update'),
'#validate' => array(
'workbench_scheduler_node_form_validate',
),
);
}
return $form;
}