Index: modules/scheduler/scheduler.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/scheduler/scheduler.module,v retrieving revision 1.33 diff -u -r1.33 scheduler.module --- modules/scheduler/scheduler.module 29 Apr 2005 22:09:20 -0000 1.33 +++ modules/scheduler/scheduler.module 8 Mar 2006 08:43:24 -0000 @@ -27,7 +27,19 @@ } function scheduler_settings() { - return form_radios(t('Form display mode'), 'scheduler_form_mode', variable_get('scheduler_form_mode', 0), array(t('Allow post and hide scheduling'), t('Only allow post scheduling'), t('Only allow hide scheduling')), t('What options should the scheduler form offer?')); + $form['scheduler_form_mode'] = array( + '#type' => 'radios', + '#title' => t('Form display mode'), + '#default_value' => variable_get('scheduler_form_mode', 0), + '#options' => array( + '0' => t('Allow post and hide scheduling'), + '1' => t('Only allow post scheduling'), + '2' => t('Only allow hide scheduling'), + ), + '#description' => t('What options should the scheduler form offer?'), + ); + + return $form; } function scheduler_write($node, $op, $arg) { @@ -46,7 +58,7 @@ else { $conds['timestamp_hidden'] = 0; } - + // No schedule needs to take place (works for update and insert too) if (array_sum($conds) == 0) { scheduler_remove_schedule($node); @@ -65,10 +77,10 @@ else { scheduler_insert_schedule($node, $conds); } - } + } else { scheduler_insert_schedule($node, $conds); - } + } } } @@ -131,84 +143,115 @@ case 'delete': scheduler_remove_schedule($node); break; - case 'form pre': - if (user_access('schedule nodes')) { + } +} - // Build up date components array - $month_names = array(1 => t('January'), t('February'), t('March'), t('April'), t('May'), t('June'), t('July'), t('August'), t('September'), t('October'), t('November'), t('December')); - $date_components = array( - 'year' => array('Y', scheduler_range(date('Y'), date('Y') + 5)), - 'month' => array('m', $month_names), - 'day' => array('d', scheduler_range(1, 31)), - 'hour' => array('H', scheduler_range(0, 23)), - 'minute' => array('i', scheduler_range(0, 59)) - ); +/** + * Implementation of hook_form_alter(). + */ +function scheduler_form_alter($form_id, &$form) { + if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) { + if (user_access('schedule nodes')) { + // Build up date components array + $month_names = array(1 => t('January'), t('February'), t('March'), t('April'), t('May'), t('June'), t('July'), t('August'), t('September'), t('October'), t('November'), t('December')); + $date_components = array( + 'year' => array('Y', drupal_map_assoc(range(date('Y'), date('Y')+5))), + 'month' => array('m', $month_names), + 'day' => array('d', drupal_map_assoc(range(1, 31))), + 'hour' => array('H', drupal_map_assoc(range(0, 23))), + 'minute' => array('i', drupal_map_assoc(range(0, 59))) + ); + + // Form element specs (time, enabled, title, description) + $form_elements = array( + 'scheduler_post' => array(time(), FALSE, t('Automatically post document'), t('The date at which your document will be automatically posted.
Do not check the enabling checkbox unless you want to schedule this document.')), + 'scheduler_hide' => array(time(), FALSE, t('Automatically hide document'), t('The date at which your document will be automatically hidden.
Do not check the enabling checkbox unless you want to schedule this document.')) + ); + + // Get edit information from post if possible + $node = isset($form['#node']) ? $form['#node'] : NULL; + if (isset($_POST['edit']) && count($_POST['edit'])) { + $edit = (object) $_POST['edit']; + if ($edit->scheduler_post) { + $form_elements['scheduler_post'][0] = scheduler_nodetime($edit, 'post'); + $form_elements['scheduler_post'][1] = TRUE; + } + if ($edit->scheduler_hide) { + $form_elements['scheduler_hide'][0] = scheduler_nodetime($edit, 'hide'); + $form_elements['scheduler_hide'][1] = TRUE; + } + } + elseif ($node->nid) { + $result = db_query('SELECT timestamp_hidden, timestamp_posted FROM {scheduler} WHERE nid = %d', $node->nid); + $schedule = db_fetch_object($result); + if ($schedule->timestamp_posted) { + $form_elements['scheduler_post'][0] = $schedule->timestamp_posted; + $form_elements['scheduler_post'][1] = TRUE; + } + if ($schedule->timestamp_hidden) { + $form_elements['scheduler_hide'][0] = $schedule->timestamp_hidden; + $form_elements['scheduler_hide'][1] = TRUE; + } + } + + // Hide controls if admin requested + switch (variable_get('scheduler_form_mode', 0)) { + case 0: + // Allow both controls + break; + case 1: + // Allow post control + unset($form_elements['scheduler_hide']); + break; + case 2: + // Allow hide control + unset($form_elements['scheduler_post']); + break; + } - // Form element specs (time, enabled, title, description) - $form_elements = array( - 'scheduler_post' => array(time(), FALSE, t('Automatically post document'), t('The date at which your document will be automatically posted.
Do not check the enabling checkbox unless you want to schedule this document.')), - 'scheduler_hide' => array(time(), FALSE, t('Automatically hide document'), t('The date at which your document will be automatically hidden.
Do not check the enabling checkbox unless you want to schedule this document.')) + // Compose form to post and hide nodes + $form['scheduler'] = array( + '#type' => 'fieldset', + '#title' => t('Scheduling'), + '#weight' => -32, + '#collapsible' => TRUE, + '#collapsed' => FALSE, + ); + foreach ($form_elements as $fname => $felem) { + $form['scheduler'][$fname]['begin'] = array( + '#type' => 'markup', + '#value' => '
', ); - // Get edit information from post if possible - if (isset($_POST['edit']) && count($_POST['edit'])) { - $edit = (object) $_POST['edit']; - if ($edit->scheduler_post) { - $form_elements['scheduler_post'][0] = scheduler_nodetime($edit, 'post'); - $form_elements['scheduler_post'][1] = TRUE; - } - if ($edit->scheduler_hide) { - $form_elements['scheduler_hide'][0] = scheduler_nodetime($edit, 'hide'); - $form_elements['scheduler_hide'][1] = TRUE; - } - } + $form['scheduler'][$fname][$fname] = array( + '#type' => 'checkbox', + '#value' => $felem[1], + '#suffix' => t('Enabled'), + ); - // Preserve the data set in the DB (if there was no form) - elseif ($node->nid) { - $result = db_query('SELECT timestamp_hidden, timestamp_posted FROM {scheduler} WHERE nid = %d', $node->nid); - $schedule = db_fetch_object($result); - if ($schedule->timestamp_posted) { - $form_elements['scheduler_post'][0] = $schedule->timestamp_posted; - $form_elements['scheduler_post'][1] = TRUE; + foreach ($date_components as $dname => $ddata) { + if ($dname == 'hour' && strpos(variable_get('date_format_medium', 'D, Y-m-d H:i'), 'g:ia')) { + $form['scheduler'][$fname][$fname .'_'. $dname] = array( + '#type' => 'select', + '#default_value' => date($ddata[0], $felem[0]), + '#options' => drupal_map_assoc($ddata[1], '_scheduler_hour_format'), + ); } - if ($schedule->timestamp_hidden) { - $form_elements['scheduler_hide'][0] = $schedule->timestamp_hidden; - $form_elements['scheduler_hide'][1] = TRUE; - // $form .= form_item($felem[2], $form_item, $felem[3]); + else { + $form['scheduler'][$fname][$fname .'_'. $dname] = array( + '#type' => 'select', + '#default_value' => date($ddata[0], $felem[0]), + '#options' => $ddata[1], + ); } } - - // Hide controls if admin requested - switch (variable_get('scheduler_form_mode', 0)) { - case 0: - // Allow both controls - break; - case 1: - unset($form_elements['scheduler_hide']); - break; - case 1: - unset($form_elements['scheduler_post']); - break; - } - // Compose form to post and hide nodes - $form = ''; - foreach ($form_elements as $fname => $felem) { - $form_item = '
' . form_checkbox(t('Enabled'), $fname, 1, $felem[1]); - foreach ($date_components as $dname => $ddata) { - if ($dname == 'hour' && strpos(variable_get('date_format_medium', 'D, Y-m-d H:i'), 'g:ia')) { - $form_item .= form_select('', "{$fname}_{$dname}", date($ddata[0], $felem[0]), drupal_map_assoc($ddata[1], '_scheduler_hour_format')); - } - else { - $form_item .= form_select('', "{$fname}_{$dname}", date($ddata[0], $felem[0]), $ddata[1]); - } - } - $form_item .= '
'; - // $form .= form_item($felem[2], $form_item, $felem[3]); - $form .= form_item($felem[2], $form_item, ($error[$fname] ? $error[$fname] : $felem[3])); - } - return ((count($form_elements) > 1) ? form_group(t('Scheduling'), $form) : $form); + $form['scheduler'][$fname]['end'] = array( + '#type' => 'markup', + '#value' => '
'. $felem[3] .'
', + ); } + } } } @@ -241,7 +284,7 @@ $numpost = db_num_rows($result); while ($node = db_fetch_object($result)) { db_query('UPDATE {node} SET created = %d, changed = %d, status = 1 WHERE nid = %d', $node->timestamp_posted, $node->timestamp_posted, $node->nid); - + // No hide information for node, no need to keep record if ($node->timestamp_hidden == 0) { db_query('DELETE FROM {scheduler} WHERE nid = %d', $node->nid); @@ -290,19 +333,18 @@ while ($node = db_fetch_object($result)) { $rows[] = array( ($node->status ? l($node->title, "node/$node->nid") : $node->title), - format_name($node), + theme('username', $node), ($node->timestamp_posted ? format_date($node->timestamp_posted) : ' '), ($node->timestamp_hidden ? format_date($node->timestamp_hidden) : ' '), l(t('edit'), 'node/'. $node->nid .'/edit'), l(t('delete'), "admin/node/delete/$node->nid") ); } - + if (count($rows)) { if ($pager = theme('pager', NULL, 50, 0, tablesort_pager())) { $rows[] = array(array('data' => $pager, 'colspan' => 6)); } - return theme('table', $header, $rows); } else { @@ -310,16 +352,6 @@ } } -// Generates a range for dates between $start and $end, but -// unlike range(), it starts the array index from $start and not 0 -function scheduler_range($start, $end) { - $range = array(); - for($i=$start; $i<=$end; $i++) { - $range[$i] = $i; - } - return $range; -} - // Return the time of post or hide operation on the node function scheduler_nodetime(&$node, $type = 'post') { if (!in_array($type, array('post', 'hide'))) {