ProcessWire - Cronjob

Aus Wikizone
Wechseln zu: Navigation, Suche

Damit ein Cronjob Skript Zugriff auf die ProcessWire Funktionen hat kannst du einfach die index.php inkludieren.

Beachte, dass du bei Selektoren z.B. include=all angeben musst, wenn du auf Templates mit Zugriffsbeschränkungen zugreifst (z.B. wenn diese nur für eine Benutzergruppe zugelassen sind.

Beispiel Archivierungsskript für DEKRA Gewinnspiel:

<?php namespace ProcessWire;
/**
 * 
 * job.php
 * Maintenance tasks called via cronjob
 */

//require_once('../index.php'); // Bootstrapping ProcessWire
//$pw_path = $_SERVER['DOCUMENT_ROOT'] . 'index.php';
$pw_path = __DIR__ . '/../index.php'; // passe den Pfad ggf. an
require_once($pw_path);
$archivedCount = moveAnswersToArchive(10);
echo "Verschobene Antworten: " . $archivedCount . chr(10);
echo " nomail"; // uncomment if you don't want cronjob mails

/**
 * moveAnswersToArchive
 * bewegt Antworten zu Fragen ins Archiv (Checkbox gewählt)
 * Bewegt nur eine begrenzte Anzahl aus Effizienzgründen
 * Wird vom export Tool automatisch aufgerufen
 */
function moveAnswersToArchive($limit = 3, $parentPage = 30321, $archieveTemplate = 'user-archieved-answer') {
	$lockedQuestions = pages()->find("template=question, checkbox=1, sort=date, limit=3, include=all"); // include ist wichtig, da template zugriff eingeschränkt
  //var_dump($lockedQuestions);
	$c = 0;
	$parent = pages()->get($parentPage);
	if($lockedQuestions->count) {
			foreach($lockedQuestions as $question) {
					$answers = pages()->find("template=user-answer, pr_question={$question->id}, sort=date, limit={$limit}");
					foreach($answers as $answer) {
							$answer->template = $archieveTemplate;
							$answer->parent = $parent;
							if($answer->save()) {
									$c++;
							}
					}
			}
	}
	
	// Rückgabe der Anzahl der verschobenen Antworten
  wire('log')->save('cronjob', 'Antworten archiviert: '. $c);
	return $c;
}

Zugangsschutz:

Hier gibt es verschiedene Methoden. Wenn es bei all-inkl läuft kannst du einfach einen htaccess Passwortschutz auf das Verzeichnis legen (über das kasserver Backend)