Workflow Erinnerungsmail
Eingetragen von sepp68 (444)
am 17.10.2013 - 15:21 Uhr in
am 17.10.2013 - 15:21 Uhr in
Moin !
Ich erstelle mit dem Modul workflow Genehmigungsworkflows, und versende mittels Rules eine EMail an den Genehmiger, sobald ein neuer Node erstellt wurde.
So weit so gut.
Manchmal vergisst der Genehmiger aber seine Pflichten und nun will ich ihn automatisch nach z.B. 3 Tagen erinnern, daß er noch was tun muß.
Gibt es dafür ein Modul oder eine Lösung ?
Danke
- Anmelden oder Registrieren um Kommentare zu schreiben
Da wirst du wohl kein
am 17.10.2013 - 16:52 Uhr
Da wirst du wohl kein fertiges Modul finden, aber mit etwas Kreativität ließe sich sicher was in der Art realisieren:
Erstelle eine Rule, die per Cron alle erstellten Inhalte identifiziert, die im Workflow-Status "neu" sind, aber bereits älter als drei Tage sind. Dann wird eine E-Mail verschickt.
Aufpassen sollte man, dass nicht jede Node eine neue E-Mail erzeugt, weil es sonst nerven kann. Ebenso sollte nicht jeder Cronjob fortan eine neue Mail verschicken. Man könnte also zusätzlich noch mit Flags (und ggf. einem zusätzlichen Datumsfeld) arbeiten, um den aktuellen Benachrichtigungsstatus eines Inhaltes technisch festzuhalten. Rules Integration ist super.
Viel Erfolg, Ronald
mit schedule und rules
am 17.10.2013 - 18:19 Uhr
Müsste es gehen.
also bei schedule und rules
am 17.10.2013 - 19:08 Uhr
also bei schedule und rules blicke ich nicht so richtig durch, werde wohl ein eigenes Modul schreiben.
Macht ja auch Spass ;-), melde mich wieder ...
sepp68 schrieb also bei
am 18.10.2013 - 22:39 Uhr
also bei schedule und rules blicke ich nicht so richtig durch, werde wohl ein eigenes Modul schreiben.
Macht ja auch Spass ;-), melde mich wieder ...
Du suchst also keine Lösung, sondern eine Herausforderung. Ist auch ok. :)
So, hat ein bißchen gedauert
am 30.10.2013 - 19:53 Uhr
So, hat ein bißchen gedauert weil ich eine Woche auf Urlaub war ;-)
Du suchst also keine Lösung, sondern eine Herausforderung. Ist auch ok. :)
rokr hat nicht ganz unrecht, aber manchmal empfinde ich die Lösungen mit anderen Modulen sehr umständlich.
Es gibt eine Lösung mit Workflow Extensions, die da auch beschrieben ist, aber wohl nur für Drupal6 gilt.
Untenstehend mein Modul als Snippnet, Parameter sind der Workflowstatus und die maximale Zeit, bevor ein Event getriggert wird.
Der Event kann mir Rules verarbeitet werden.
Ist der Workflow länger als die maximale Zeit in dem vorgegebenen Status wird jeden Tag einmal der Event generiert.
Die Module Workflow und Cron müssen natürlich aktivert sein, ebenso Rules zur Weiterverarbeitung.
<?php
/**
* @file
* mymodule special functions
* Version: 7.x-1.0
*/
/**
* Implements hook_cron().
*/
function mymodule_cron() {
$state = "in Genehmigungsphase"; // looking for this state
$max_age = 259200; // maximum age of state 3 days in seconds
// only once a day
$now = time();
if ( variable_get('mymodule_cron_last_run_day',0) <> date('d',$now) ) {
variable_set('mymodule_cron_last_run_day', date('d',$now));
// Array with all sids of state: $state
$workflow_states_ids = array_keys(workflow_get_workflow_states_all(), $state);
//get all workflows in $state
$workflows_in_state = db_query('SELECT nid, sid, uid, stamp FROM {workflow_node} WHERE sid IN (:sids)', array(':sids' => $workflow_states_ids))->fetchAll();
foreach ($workflows_in_state as $workflow_in_state) {
// calculate age
$workflow_state_age = $now - $workflow_in_state->stamp;
// is workflow old enough ?
if ( $workflow_state_age > $max_age ) {
//load node (needed for rules)
$node = node_load($workflow_in_state->nid);
// fire event
rules_invoke_event('mymodule_rule_workflow_reminder', $node);
// write watchdog-message
$message = t('Workflow reminded for node %node_title', array('%node_title' => $node->title));
watchdog('mymodule', $message);
}
}
$message = t('dayli Workflow Reminder Check executed');
watchdog('mymodule', $message);
}
// for test uncomment next line
//variable_set('mymodule_cron_last_run_day', 1);
}
/**
* Implementation of hook_rules_event_info().
* @ingroup rules
*/
function mymodule_rules_event_info() {
return array(
'mymodule_rule_workflow_reminder' => array(
'label' => t('A workflow is in overtime'),
'module' => 'mymodule',
'group' => 'mymodule',
'variables' => array(
'node' => array(
'type' => 'node',
'label' => t('effected node'),
),
),
),
);
}
?>