Hallo,
ich bin kein großer Freund der Umsetzung des Workspaces in Typo3 und hoffe auf eine Verbesserung der Bedienung.
Mich störte, dass die Emails, welche durch den Workspace verschickt werden, eigentlich keinen Nutzen haben, da ich/ein Redakteur mit Daten wie "changes in tt_content:1165" nicht viel anfangen kann, da in der Workspaceliste die Elemente mit Namen und nicht mit ihrer uid eingetragen sind.
Da ich keine Lösung für dieses Problem finden konnte habe ich die Methode in typo3lib/class.t3lib_tcemain.php selbst editiert.
Da es gut funktioniert und meine Nutzer die Elemente nun besser trennen können, wollte ich die Lösung zur Diskusion stellen.
Falls sie jemand weiterhilft umso besser 🙂
function notifyStageChange($stat,$stageId,$table,$id,$comment) {
$workspaceRec = t3lib_BEfunc::getRecord('sys_workspace', $stat['uid']);
if (is_array($workspaceRec)) {
// Compile label:
switch((int)$stageId) {
case 1:
$newStage = 'Ready for review';
break;
case 10:
$newStage = 'Ready for publishing';
break;
case -1:
$newStage = 'Element was rejected!';
break;
case 0:
$newStage = 'Rejected element was noticed and edited';
break;
default:
$newStage = 'Unknown state change!?';
break;
}
// Compile list of recipients:
$emails = array();
switch((int)$stat['stagechg_notification']) {
case 1:
switch((int)$stageId) {
case 1:
$emails = $this->notifyStageChange_getEmails($workspaceRec['reviewers']);
break;
case 10:
$emails = $this->notifyStageChange_getEmails($workspaceRec['adminusers'], TRUE);
break;
case -1:
$emails = $this->notifyStageChange_getEmails($workspaceRec['reviewers']);
$emails = array_merge($emails,$this->notifyStageChange_getEmails($workspaceRec['members']));
break;
case 0:
$emails = $this->notifyStageChange_getEmails($workspaceRec['members']);
break;
default:
$emails = $this->notifyStageChange_getEmails($workspaceRec['adminusers'], TRUE);
break;
}
break;
case 10:
$emails = $this->notifyStageChange_getEmails($workspaceRec['adminusers'], TRUE);
$emails = array_merge($emails,$this->notifyStageChange_getEmails($workspaceRec['reviewers']));
$emails = array_merge($emails,$this->notifyStageChange_getEmails($workspaceRec['members']));
break;
}
$emails = array_unique($emails);
// Read Site name
if( $table == 'pages')
$field = 'title';
else
$field = 'header';
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery( $field, // SELECT ...
$table, // FROM ...
'uid = '.$id // WHERE
);
$row = $GLOBALS['TYPO3_DB']->sql_fetch_row($res);
$title = $row[0];
if(empty($title))
$title = '[No title]';
// Send email:
if (count($emails)) {
$message = sprintf('
At the TYPO3 site "%s" (%s)
in workspace "%s" (#%s)
the stage has changed for the element %s
==> %s
User Comment:
"%s"
State was change by %s (username: %s)
',
$GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'],
t3lib_div::getIndpEnv('TYPO3_SITE_URL').TYPO3_mainDir,
$workspaceRec['title'],
$workspaceRec['uid'],
'"'.$title.'" ('.$table.':'.$id.')',
$newStage,
$comment,
$this->BE_USER->user['realName'],
$this->BE_USER->user['username']);
t3lib_div::plainMailEncoded(
implode(',',$emails),
'Typo3 Workspace Note: Stage Change for '.$title.'('.$table.':'.$id.')',
trim($message)
);
}
}
}
Das Resultat ist simpel. Statt der Meldung ...changed for the element tt_content:1487 bekommt man nun die Meldung ...changed for the element "Hochverfügbarkeit, Datenreplikation und Disaster Recovery für VMware ESX Server" (tt_content:1487)