Project

General

Profile

Feature #5923 » _5923_version.patch

patch for version extension - Sonja Schubert, 2010-11-27 21:52

View differences:

Resources/Private/Language/emails.xml (revision )
</languageKey>
</data>
</T3locallang>
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<T3locallang>
<meta type="array">
<description>Module labels</description>
<type>module</type>
</meta>
<data type="array">
<languageKey index="default" type="array">
<label index="subject">TYPO3 Workspace Note: Stage Change for ###ELEMENT_NAME###</label>
<label index="message">At the TYPO3 site "###SITE_NAME###" (###SITE_URL###)
in workspace "###WORKSPACE_TITLE###" (###WORKSPACE_UID###)
the stage has changed for the element(s) "###RECORD_TITLE###" (###ELEMENT_NAME###) at location "###RECORD_PATH###" in the page tree:
=> ###NEXT_STAGE###
User Comment:
"###COMMENT###"
State was changed by ###USER_FULLNAME### (username: ###USER_USERNAME###)</label>
</languageKey>
</data>
</T3locallang>
class.tx_version_tcemain.php (revision )
$this->version_setStage($table, $elementId, $value['stageId'],
(isset($value['comment']) && $value['comment'] ? $value['comment'] : $this->generalComment),
TRUE,
$tcemainObj
$tcemainObj,
$value['notificationAlternativeRecipients']
);
}
break;
......
public function processCmdmap_afterFinish(&$tcemainObj) {
// Empty accumulation array:
foreach ($this->notificationEmailInfo as $notifItem) {
$this->notifyStageChange($notifItem['shared'][0], $notifItem['shared'][1], implode(', ', $notifItem['elements']), 0, $notifItem['shared'][2], $tcemainObj);
$this->notifyStageChange($notifItem['shared'][0], $notifItem['shared'][1], implode(', ', $notifItem['elements']), 0, $notifItem['shared'][2], $tcemainObj, $notifItem['alternativeRecipients']);
}
// Reset notification array
......
* @param string Table name of element (or list of element names if $id is zero)
* @param integer Record uid of element (if zero, then $table is used as reference to element(s) alone)
* @param string User comment sent along with action
* @param object TCEmain object
* @param string comma separated list of recipients to notificate instead of be_users selected by sys_workspace, list is generated by workspace extension module
* @return void
*/
protected function notifyStageChange($stat, $stageId, $table, $id, $comment, $tcemainObj) {
protected function notifyStageChange($stat, $stageId, $table, $id, $comment, $tcemainObj, $notificationAlternativeRecipients = FALSE) {
$workspaceRec = t3lib_BEfunc::getRecord('sys_workspace', $stat['uid']);
// So, if $id is not set, then $table is taken to be the complete element name!
$elementName = $id ? $table . ':' . $id : $table;
if (is_array($workspaceRec)) {
// Get the new stage title from workspaces library, if workspaces extension is installed
if (t3lib_extMgm::isLoaded('workspaces')) {
$stageService = t3lib_div::makeInstance('Tx_Workspaces_Service_Stages');
$newStage = $stageService->getStageTitle((int)$stageId);
} else {
// TODO: CONSTANTS SHOULD BE USED - tx_service_workspace_workspaces
// TODO: use localized labels
// 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;
}
// TODO: CONSTANTS SHOULD BE USED - tx_service_workspace_workspaces
// TODO: use localized labels
// 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;
}
}
if ($notificationAlternativeRecipients == false) {
// Compile list of recipients:
$emails = array();
switch((int)$stat['stagechg_notification']) {
case 1:
switch((int)$stageId) {
case 1:
$emails = $this->getEmailsForStageChangeNotification($workspaceRec['reviewers']);
break;
case 10:
$emails = $this->getEmailsForStageChangeNotification($workspaceRec['adminusers'], TRUE);
break;
case -1:
// Compile list of recipients:
$emails = array();
switch((int)$stat['stagechg_notification']) {
case 1:
switch((int)$stageId) {
case 1:
$emails = $this->getEmailsForStageChangeNotification($workspaceRec['reviewers']);
break;
case 10:
$emails = $this->getEmailsForStageChangeNotification($workspaceRec['adminusers'], TRUE);
break;
case -1:
# $emails = $this->getEmailsForStageChangeNotification($workspaceRec['reviewers']);
# $emails = $this->getEmailsForStageChangeNotification($workspaceRec['reviewers']);
# $emails = array_merge($emails,$this->getEmailsForStageChangeNotification($workspaceRec['members']));
# $emails = array_merge($emails,$this->getEmailsForStageChangeNotification($workspaceRec['members']));
// List of elements to reject:
$allElements = explode(',', $elementName);
// Traverse them, and find the history of each
foreach ($allElements as $elRef) {
list($eTable, $eUid) = explode(':', $elRef);
// List of elements to reject:
$allElements = explode(',', $elementName);
// Traverse them, and find the history of each
foreach ($allElements as $elRef) {
list($eTable, $eUid) = explode(':', $elRef);
$rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
'log_data,tstamp,userid',
'sys_log',
'action=6 and details_nr=30
AND tablename=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($eTable, 'sys_log') . '
AND recuid=' . intval($eUid),
'',
'uid DESC'
);
// Find all implicated since the last stage-raise from editing to review:
foreach ($rows as $dat) {
$data = unserialize($dat['log_data']);
$rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
'log_data,tstamp,userid',
'sys_log',
'action=6 and details_nr=30
AND tablename=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($eTable, 'sys_log') . '
AND recuid=' . intval($eUid),
'',
'uid DESC'
);
// Find all implicated since the last stage-raise from editing to review:
foreach ($rows as $dat) {
$data = unserialize($dat['log_data']);
$emails = t3lib_div::array_merge($emails, $this->getEmailsForStageChangeNotification($dat['userid'], TRUE));
$emails = t3lib_div::array_merge($emails, $this->getEmailsForStageChangeNotification($dat['userid'], TRUE));
if ($data['stage'] == 1) {
break;
}
}
}
break;
if ($data['stage'] == 1) {
break;
}
}
}
break;
case 0:
$emails = $this->getEmailsForStageChangeNotification($workspaceRec['members']);
break;
case 0:
$emails = $this->getEmailsForStageChangeNotification($workspaceRec['members']);
break;
default:
$emails = $this->getEmailsForStageChangeNotification($workspaceRec['adminusers'], TRUE);
break;
}
break;
case 10:
$emails = $this->getEmailsForStageChangeNotification($workspaceRec['adminusers'], TRUE);
$emails = t3lib_div::array_merge($emails, $this->getEmailsForStageChangeNotification($workspaceRec['reviewers']));
$emails = t3lib_div::array_merge($emails, $this->getEmailsForStageChangeNotification($workspaceRec['members']));
break;
}
default:
$emails = $this->getEmailsForStageChangeNotification($workspaceRec['adminusers'], TRUE);
break;
}
break;
case 10:
$emails = $this->getEmailsForStageChangeNotification($workspaceRec['adminusers'], TRUE);
$emails = t3lib_div::array_merge($emails, $this->getEmailsForStageChangeNotification($workspaceRec['reviewers']));
$emails = t3lib_div::array_merge($emails, $this->getEmailsForStageChangeNotification($workspaceRec['members']));
break;
}
} else {
$emails = array();
foreach ($notificationAlternativeRecipients as $emailAddress) {
$emails[] = array('email' => $emailAddress);
}
}
// prepare and then send the emails
if (count($emails)) {
......
* @param integer Stage ID to set
* @param string Comment that goes into log
* @param boolean Accumulate state changes in memory for compiled notification email?
* @param object TCEmain object
* @param string comma separated list of recipients to notificate instead of normal be_users
* @return void
*/
protected function version_setStage($table, $id, $stageId, $comment = '', $notificationEmailInfo = FALSE, $tcemainObj) {
protected function version_setStage($table, $id, $stageId, $comment = '', $notificationEmailInfo = FALSE, $tcemainObj, $notificationAlternativeRecipients = FALSE) {
if ($errorCode = $tcemainObj->BE_USER->workspaceCannotEditOfflineVersion($table, $id)) {
$tcemainObj->newlog('Attempt to set stage for record failed: ' . $errorCode, 1);
} elseif ($tcemainObj->checkRecordUpdateAccess($table, $id)) {
......
if ($notificationEmailInfo) {
$this->notificationEmailInfo[$stat['uid'] . ':' . $stageId . ':' . $comment]['shared'] = array($stat, $stageId, $comment);
$this->notificationEmailInfo[$stat['uid'] . ':' . $stageId . ':' . $comment]['elements'][] = $table . ':' . $id;
$this->notificationEmailInfo[$stat['uid'] . ':' . $stageId . ':' . $comment]['alternativeRecipients'] = $notificationAlternativeRecipients;
} else {
$this->notifyStageChange($stat, $stageId, $table, $id, $comment, $tcemainObj);
$this->notifyStageChange($stat, $stageId, $table, $id, $comment, $tcemainObj, $notificationAlternativeRecipients);
}
}
} else $tcemainObj->newlog('The member user tried to set a stage value "' . $stageId . '" that was not allowed', 1);
(1-1/2)