Workspace Email mit Namen des Elementes

  • Merlin732 Merlin732
    R2-D2
    0 x
    120 Beiträge
    0 Hilfreiche Beiträge
    09. 05. 2007, 16:42

    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 :)

    1. function notifyStageChange($stat,$stageId,$table,$id,$comment) {
    2. $workspaceRec = t3lib_BEfunc::getRecord('sys_workspace', $stat['uid']);
    3.  
    4. if (is_array($workspaceRec)) {
    5.  
    6. // Compile label:
    7. switch((int)$stageId) {
    8. case 1:
    9. $newStage = 'Ready for review';
    10. break;
    11. case 10:
    12. $newStage = 'Ready for publishing';
    13. break;
    14. case -1:
    15. $newStage = 'Element was rejected!';
    16. break;
    17. case 0:
    18. $newStage = 'Rejected element was noticed and edited';
    19. break;
    20. default:
    21. $newStage = 'Unknown state change!?';
    22. break;
    23. }
    24.  
    25. // Compile list of recipients:
    26. $emails = array();
    27. switch((int)$stat['stagechg_notification']) {
    28. case 1:
    29. switch((int)$stageId) {
    30. case 1:
    31. $emails = $this->notifyStageChange_getEmails($workspaceRec['reviewers']);
    32. break;
    33. case 10:
    34. $emails = $this->notifyStageChange_getEmails($workspaceRec['adminusers'], TRUE);
    35. break;
    36. case -1:
    37. $emails = $this->notifyStageChange_getEmails($workspaceRec['reviewers']);
    38. $emails = array_merge($emails,$this->notifyStageChange_getEmails($workspaceRec['members']));
    39. break;
    40. case 0:
    41. $emails = $this->notifyStageChange_getEmails($workspaceRec['members']);
    42. break;
    43. default:
    44. $emails = $this->notifyStageChange_getEmails($workspaceRec['adminusers'], TRUE);
    45. break;
    46. }
    47. break;
    48. case 10:
    49. $emails = $this->notifyStageChange_getEmails($workspaceRec['adminusers'], TRUE);
    50. $emails = array_merge($emails,$this->notifyStageChange_getEmails($workspaceRec['reviewers']));
    51. $emails = array_merge($emails,$this->notifyStageChange_getEmails($workspaceRec['members']));
    52. break;
    53. }
    54. $emails = array_unique($emails);
    55.  
    56. // Read Site name
    57. if( $table == 'pages')
    58. $field = 'title';
    59. else
    60. $field = 'header';
    61.  
    62. $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery( $field, // SELECT ...
    63. $table, // FROM ...
    64. 'uid = '.$id // WHERE
    65. );
    66.  
    67. $row = $GLOBALS['TYPO3_DB']->sql_fetch_row($res);
    68. $title = $row[0];
    69.  
    70. if(empty($title))
    71. $title = '[No title]';
    72.  
    73. // Send email:
    74. if (count($emails)) {
    75. $message = sprintf('
    76. At the TYPO3 site "%s" (%s)
    77. in workspace "%s" (#%s)
    78. the stage has changed for the element %s
    79.  
    80. ==> %s
    81.  
    82. User Comment:
    83. "%s"
    84.  
    85. State was change by %s (username: %s)
    86. ',
    87. $GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'],
    88. t3lib_div::getIndpEnv('TYPO3_SITE_URL').TYPO3_mainDir,
    89. $workspaceRec['title'],
    90. $workspaceRec['uid'],
    91. '"'.$title.'" ('.$table.':'.$id.')',
    92. $newStage,
    93. $comment,
    94. $this->BE_USER->user['realName'],
    95. $this->BE_USER->user['username']);
    96.  
    97. t3lib_div::plainMailEncoded(
    98. implode(',',$emails),
    99. 'Typo3 Workspace Note: Stage Change for '.$title.'('.$table.':'.$id.')',
    100. trim($message)
    101. );
    102. }
    103. }
    104. }

    Das Resultat ist simpel. Statt der Meldung [i]...changed for the element tt_content:1487[/i] bekommt man nun die Meldung [i]...changed for the element "Hochverfügbarkeit, Datenreplikation und Disaster Recovery für VMware ESX Server" (tt_content:1487)[/i]


  • 1
  • einpraegsam.net einpraegs...
    MacGyver
    0 x
    9340 Beiträge
    80 Hilfreiche Beiträge
    12. 05. 2007, 09:00

    Danke Merlin,

    können sicher einige Leute brauchen!

    in2code.de - Wir leben TYPO3
    - Möchtest du TYPO3 komplett verstehen? Eigene Erweiterungen erstellen? Bei uns gibt es auch Schulungen https://www.in2code.de/produkte/typo3-schulungen/
    - Die Arbeit mit TYPO3 macht dir Spaß? Du stehst auf Berge? Komm zu uns! https://www.in2code.de/agentur/karriere/

  • 0 x
    19 Beiträge
    1 Hilfreiche Beiträge
    04. 08. 2007, 23:31

    Auch Danke, wirklich guter Tipp :)
    Du brauchst aber ansonsten auch nur "tt_content:1165" in das Bearbeiten/Suchen Feld unten links im Typo3 Backend eingeben/kopieren danach ENTER drücken, und schon bist Du beim entsprechenden Datensatz. Toll wenn man wirklich viele Seiten und Artikel im System hat.

  • pika pika
    Typ im Roten Hemd
    0 x
    2 Beiträge
    0 Hilfreiche Beiträge
    05. 08. 2007, 20:31

    (sorry, english only)

    Thank you for the very useful code! It works fine!

    Can anyboby comment this: I configured a group as reviewers in my custom workspace. Could this be a reason why none of the group members receive the e-mail notification on changing a element status? Other (admin as a workspace owner, and another user which is workspace member) do receive the nofifications.

    I am checking notifyStageChange_getEmails(), but I am too newbie to say definetly.

    Thank you in advance!

  • Merlin732 Merlin732
    R2-D2
    0 x
    120 Beiträge
    0 Hilfreiche Beiträge
    05. 08. 2007, 22:18

    Hi pika,

    did you insert a group of people or each person for its own to the reviewer list?
    If you insert a group no one will receive an email.
    You have to specify each reviewer and add him/her to the list.

  • pika pika
    Typ im Roten Hemd
    0 x
    2 Beiträge
    0 Hilfreiche Beiträge
    06. 08. 2007, 15:42

    [quote="Merlin732"]
    If you insert a group no one will receive an email.
    You have to specify each reviewer and add him/her to the list.
    [/quote]
    Yes, when I insert every member from a group, it works.
    Thank you.

  • 1