aboutsummaryrefslogtreecommitdiff
path: root/lib/classes/ForumActivity.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/classes/ForumActivity.php')
-rw-r--r--lib/classes/ForumActivity.php149
1 files changed, 149 insertions, 0 deletions
diff --git a/lib/classes/ForumActivity.php b/lib/classes/ForumActivity.php
new file mode 100644
index 0000000..20ebeb6
--- /dev/null
+++ b/lib/classes/ForumActivity.php
@@ -0,0 +1,149 @@
+<?php
+/**
+ * File - description
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * @author Till Glöggler <tgloeggl@uos.de>
+ * @license https://www.gnu.org/licenses/gpl-2.0.html GPL version 2
+ */
+
+class ForumActivity
+{
+ /**
+ * Post activity for new forum post
+ *
+ * @param string $event
+ * @param string $topic_id
+ * @param array $post
+ */
+ public static function newEntry($event, $topic_id, $post)
+ {
+ $verb = $post['depth'] == 3 ? 'answered' : 'created';
+
+ if ($verb == 'created') {
+ if ($post['depth'] == 1) {
+ $summary = _('%s hat im Forum der Veranstaltung "%s" einen Bereich erstellt.');
+ } else {
+ $summary = _('%s hat im Forum der Veranstaltung "%s" ein Thema erstellt.');
+ }
+ } else {
+ $summary = _('%s hat im Forum der Veranstaltung "%s" auf ein Thema geantwortet.');
+ }
+
+ self::post($post, $verb, $summary);
+ }
+
+ /**
+ * Post activity for updating a forum post
+ * @param string $event
+ * @param string $topic_id
+ * @param string $post
+ */
+ public static function updateEntry($event, $topic_id, $post)
+ {
+ $summary = _('%s hat im Forum der Veranstaltung "%s" einen Beitrag editiert.');
+
+ if ($post['user_id'] == $GLOBALS['user']->id) {
+ $content = sprintf(
+ _('%s hat seinen eigenen Beitrag vom %s editiert.'),
+ self::getPostUsername($post),
+ date('d.m.y, H:i', $post['mkdate'])
+ );
+ } else {
+ $content = sprintf(
+ _('%s hat den Beitrag von %s vom %s editiert.'),
+ get_fullname($GLOBALS['user']->id),
+ self::getPostUsername($post),
+ date('d.m.y, H:i', $post['mkdate'])
+ );
+ }
+
+ self::post($post, 'edited', $summary, $content);
+ }
+
+ /**
+ * Post activity for deleting a forum post
+ * $param string $event
+ * @param string $topic_id
+ * @param string $post
+ */
+ public static function deleteEntry($event, $topic_id, $post)
+ {
+ // Remove all previous activities for the post
+ Studip\Activity\Activity::deleteBySQL(
+ "provider = ? AND object_type = 'forum' AND object_id = ?",
+ [Studip\Activity\ForumProvider::class, $topic_id]
+ );
+
+ $summary = _('%s hat im Forum der Veranstaltung "%s" einen Beitrag gelöscht.');
+
+ if ($post['user_id'] == $GLOBALS['user']->id) {
+ $content = sprintf(
+ _('%s hat seinen Beitrag vom %s gelöscht.'),
+ self::getPostUsername($post),
+ date('d.m.y, H:i', $post['mkdate'])
+ );
+ } else {
+ $content = sprintf(
+ _('%s hat den Beitrag von %s vom %s gelöscht.'),
+ get_fullname($GLOBALS['user']->id),
+ self::getPostUsername($post),
+ date('d.m.y, H:i', $post['mkdate'])
+ );
+ }
+
+ self::post($post, 'deleted', $summary, $content);
+ }
+
+ private static function post($post, $verb, $summary, $content = null)
+ {
+ // skip system-created entries like "Allgemeine Diskussionen"
+ if (!$post['user_id']) {
+ return;
+ }
+
+ $range_id = $post['seminar_id'];
+ $type = get_object_type($range_id);
+
+ $obj = get_object_name($range_id, $type);
+
+ $data = [
+ 'provider' => 'Studip\Activity\ForumProvider',
+ 'context' => $type === 'sem' ? 'course' : 'institute',
+ 'context_id' => $post['seminar_id'],
+ 'content' => null,
+ 'actor_type' => 'user', // who initiated the activity?
+ 'actor_id' => $post['user_id'], // id of initiator
+ 'verb' => $verb, // the activity type
+ 'object_id' => $post['topic_id'], // the id of the referenced object
+ 'object_type' => 'forum', // type of activity object
+ 'mkdate' => $post['mkdate'] ?: time()
+ ];
+
+ if ($post['anonymous']) {
+ $data['actor_type'] = 'anonymous';
+ $data['actor_id'] = '';
+ }
+
+ $activity = Studip\Activity\Activity::create($data);
+ }
+
+ /**
+ * Returns the poster's name for a forum post.
+ *
+ * @param array $post
+ * @return string
+ */
+ private static function getPostUsername($post)
+ {
+ if ($post['anonymous']) {
+ return _('Anonym');
+ }
+
+ return get_fullname($post['user_id']);
+ }
+}