Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

quote.php

Zuletzt modifiziert: 09.10.2024, 12:54 - Dateigröße: 4.24 KiB


 001  <?php
 002  /**
 003  *
 004  * This file is part of the phpBB Forum Software package.
 005  *
 006  * @copyright (c) phpBB Limited <https://www.phpbb.com>
 007  * @license GNU General Public License, version 2 (GPL-2.0)
 008  *
 009  * For full copyright and license information, please see
 010  * the docs/CREDITS.txt file.
 011  *
 012  */
 013   
 014  namespace phpbb\notification\type;
 015   
 016  /**
 017  * Post quoting notifications class
 018  * This class handles notifying users when they have been quoted in a post
 019  */
 020   
 021  class quote extends \phpbb\notification\type\post
 022  {
 023      /**
 024      * @var \phpbb\textformatter\utils_interface
 025      */
 026      protected $utils;
 027   
 028      /**
 029      * Get notification type name
 030      *
 031      * @return string
 032      */
 033      public function get_type()
 034      {
 035          return 'notification.type.quote';
 036      }
 037   
 038      /**
 039      * Language key used to output the text
 040      *
 041      * @var string
 042      */
 043      protected $language_key = 'NOTIFICATION_QUOTE';
 044   
 045      /**
 046      * Notification option data (for outputting to the user)
 047      *
 048      * @var bool|array False if the service should use it's default data
 049      *                     Array of data (including keys 'id', 'lang', and 'group')
 050      */
 051      static public $notification_option = array(
 052          'lang'    => 'NOTIFICATION_TYPE_QUOTE',
 053          'group'    => 'NOTIFICATION_GROUP_POSTING',
 054      );
 055   
 056      /**
 057      * Is available
 058      */
 059      public function is_available()
 060      {
 061          return true;
 062      }
 063   
 064      /**
 065      * Find the users who want to receive notifications
 066      *
 067      * @param array $post Data from submit_post
 068      * @param array $options Options for finding users for notification
 069      *
 070      * @return array
 071      */
 072      public function find_users_for_notification($post, $options = array())
 073      {
 074          $options = array_merge(array(
 075              'ignore_users'        => array(),
 076          ), $options);
 077   
 078          $usernames = $this->utils->get_outermost_quote_authors($post['post_text']);
 079   
 080          if (empty($usernames))
 081          {
 082              return array();
 083          }
 084   
 085          $usernames = array_unique($usernames);
 086   
 087          $usernames = array_map('utf8_clean_string', $usernames);
 088   
 089          $users = array();
 090   
 091          $sql = 'SELECT user_id
 092              FROM ' . USERS_TABLE . '
 093              WHERE ' . $this->db->sql_in_set('username_clean', $usernames) . '
 094                  AND user_id <> ' . (int) $post['poster_id'];
 095          $result = $this->db->sql_query($sql);
 096          while ($row = $this->db->sql_fetchrow($result))
 097          {
 098              $users[] = (int) $row['user_id'];
 099          }
 100          $this->db->sql_freeresult($result);
 101   
 102          return $this->get_authorised_recipients($users, $post['forum_id'], $options, true);
 103      }
 104   
 105      /**
 106      * Update a notification
 107      *
 108      * @param array $post Data specific for this type that will be updated
 109      * @return true
 110      */
 111      public function update_notifications($post)
 112      {
 113          $old_notifications = $this->notification_manager->get_notified_users($this->get_type(), array(
 114              'item_id'    => static::get_item_id($post),
 115          ));
 116   
 117          // Find the new users to notify
 118          $notifications = $this->find_users_for_notification($post);
 119   
 120          // Find the notifications we must delete
 121          $remove_notifications = array_diff(array_keys($old_notifications), array_keys($notifications));
 122   
 123          // Find the notifications we must add
 124          $add_notifications = array();
 125          foreach (array_diff(array_keys($notifications), array_keys($old_notifications)) as $user_id)
 126          {
 127              $add_notifications[$user_id] = $notifications[$user_id];
 128          }
 129   
 130          // Add the necessary notifications
 131          $this->notification_manager->add_notifications_for_users($this->get_type(), $post, $add_notifications);
 132   
 133          // Remove the necessary notifications
 134          if (!empty($remove_notifications))
 135          {
 136              $this->notification_manager->delete_notifications($this->get_type(), static::get_item_id($post), false, $remove_notifications);
 137          }
 138   
 139          // return true to continue with the update code in the notifications service (this will update the rest of the notifications)
 140          return true;
 141      }
 142   
 143      /**
 144      * {inheritDoc}
 145      */
 146      public function get_redirect_url()
 147      {
 148          return $this->get_url();
 149      }
 150   
 151      /**
 152      * Get email template
 153      *
 154      * @return string|bool
 155      */
 156      public function get_email_template()
 157      {
 158          return 'quote';
 159      }
 160   
 161      /**
 162      * Get email template variables
 163      *
 164      * @return array
 165      */
 166      public function get_email_template_variables()
 167      {
 168          $user_data = $this->user_loader->get_user($this->get_data('poster_id'));
 169   
 170          return array_merge(parent::get_email_template_variables(), array(
 171              'AUTHOR_NAME'        => htmlspecialchars_decode($user_data['username']),
 172          ));
 173      }
 174   
 175      /**
 176      * Set the utils service used to retrieve quote authors
 177      *
 178      * @param \phpbb\textformatter\utils_interface $utils
 179      */
 180      public function set_utils(\phpbb\textformatter\utils_interface $utils)
 181      {
 182          $this->utils = $utils;
 183      }
 184  }
 185