2

I need a specific node type to automatically unpublish 3 months after publishing, but the date of unpublishing needs to remain constant even if the user unpublishes and republishes the node, unless the date is passed in which case it should start again.

Whenever the timer is reset a notice should be sent to the admins, and the date of scheduled unpublishing should be editable by the admins.

Needless to say this is too complex for any current modules, and when I think of writing a module to do it I don't know how to use the drupal api to schedule things with cron, or how to create an administration settings interface to handle the unpublish dates.

2 Answers 2

1

Drupal Scheduler will provide the proper infrastructure. Then in a hook_form_FORM_ID_alter(), you can set the date as follows:

global $user;
$roles = $user->roles;

$plusThreeMonths = date("Y-m-d H:i:s", strtotime("+3 months"));
$form['scheduler_settings']['unpublish_on']['#default_value'] = $plusThreeMonths;
// Disable setting of unpublished date unless admin or user 1
if ($user->uid != 1 && !in_array('administrator', $roles)) {
  $form['scheduler_settings']['unpublish_on']['#disabled'] = TRUE;
  $form['field_package_winning_bid']['#disabled'] = TRUE;
}

Then if you need to update the unpublish date, you can use a function similar to the following:

function _republish_node($nid, $time) {
  $node = node_load($nid);
  // Add time to the publish date
  $unpub = date("Y-m-d H:i:s", strtotime($time));  // pass in a string like "+2 weeks"
  $node->unpublish_on = strtotime($unpub);
  // Set published to true
  $node->status = 1;
  node_save($node);   // Re-save node with updated status
  scheduler_node_update($node); // update publisher fields  
  // Add watchdog or other method to alert admins (or use rules)
}
3
  • Ah so I use a custom module to stop the user from messing with the unpublish dates? The lack of permission control on sheduler was the reason I didn't want to use it.
    – J V
    Commented Oct 18, 2012 at 9:12
  • Actually the module does come with "Schedule content publication" permission, but there's nothing to lock that date down like you want. Actually I found the module to be very solid and would recommend it.
    – Webdrips
    Commented Oct 18, 2012 at 9:19
  • All right, I'll base my module off what you've shown here, thanks!
    – J V
    Commented Oct 18, 2012 at 9:25
0

Checkout the module scheduler, This module allows nodes to be published and unpublished on specified dates. If you want to do any other associated tasks related to publishing and un publish of nodes like sending mails etc can achieve by rules

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.