Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

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

notification_options_reconvert.php

Zuletzt modifiziert: 09.10.2024, 12:57 - Dateigröße: 3.26 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\db\migration\data\v310;
 015   
 016  class notification_options_reconvert extends \phpbb\db\migration\migration
 017  {
 018      static public function depends_on()
 019      {
 020          return array('\phpbb\db\migration\data\v310\notifications_schema_fix');
 021      }
 022   
 023      public function update_data()
 024      {
 025          return array(
 026              array('custom', array(array($this, 'purge_notifications'))),
 027              array('custom', array(array($this, 'convert_notifications'))),
 028          );
 029      }
 030   
 031      public function purge_notifications()
 032      {
 033          $sql = 'DELETE FROM ' . $this->table_prefix . 'user_notifications';
 034          $this->sql_query($sql);
 035      }
 036   
 037      public function convert_notifications($start)
 038      {
 039          $insert_buffer = new \phpbb\db\sql_insert_buffer($this->db, $this->table_prefix . 'user_notifications');
 040   
 041          return $this->perform_conversion($insert_buffer, $start);
 042      }
 043   
 044      /**
 045      * Perform the conversion (separate for testability)
 046      *
 047      * @param \phpbb\db\sql_insert_buffer        $insert_buffer
 048      * @param int            $start        Start of staggering step
 049      * @return        mixed        int start of the next step, null if the end was reached
 050      */
 051      public function perform_conversion(\phpbb\db\sql_insert_buffer $insert_buffer, $start)
 052      {
 053          $limit = 250;
 054          $converted_users = 0;
 055   
 056          $sql = 'SELECT user_id, user_notify_type, user_notify_pm
 057              FROM ' . $this->table_prefix . 'users
 058              ORDER BY user_id';
 059          $result = $this->db->sql_query_limit($sql, $limit, $start);
 060   
 061          while ($row = $this->db->sql_fetchrow($result))
 062          {
 063              $converted_users++;
 064              $notification_methods = array();
 065   
 066              // In-board notification
 067              $notification_methods[] = '';
 068   
 069              if ($row['user_notify_type'] == NOTIFY_EMAIL || $row['user_notify_type'] == NOTIFY_BOTH)
 070              {
 071                  $notification_methods[] = 'email';
 072              }
 073   
 074              if ($row['user_notify_type'] == NOTIFY_IM || $row['user_notify_type'] == NOTIFY_BOTH)
 075              {
 076                  $notification_methods[] = 'jabber';
 077              }
 078   
 079              // Notifications for posts
 080              foreach (array('post', 'topic') as $item_type)
 081              {
 082                  $this->add_method_rows(
 083                      $insert_buffer,
 084                      $item_type,
 085                      0,
 086                      $row['user_id'],
 087                      $notification_methods
 088                  );
 089              }
 090   
 091              if ($row['user_notify_pm'])
 092              {
 093                  // Notifications for private messages
 094                  // User either gets all methods or no method
 095                  $this->add_method_rows(
 096                      $insert_buffer,
 097                      'pm',
 098                      0,
 099                      $row['user_id'],
 100                      $notification_methods
 101                  );
 102              }
 103          }
 104          $this->db->sql_freeresult($result);
 105   
 106          $insert_buffer->flush();
 107   
 108          if ($converted_users < $limit)
 109          {
 110              // No more users left, we are done...
 111              return;
 112          }
 113   
 114          return $start + $limit;
 115      }
 116   
 117      /**
 118      * Insert method rows to DB
 119      *
 120      * @param \phpbb\db\sql_insert_buffer $insert_buffer
 121      * @param string $item_type
 122      * @param int $item_id
 123      * @param int $user_id
 124      * @param string $methods
 125      */
 126      protected function add_method_rows(\phpbb\db\sql_insert_buffer $insert_buffer, $item_type, $item_id, $user_id, array $methods)
 127      {
 128          $row_base = array(
 129              'item_type'        => $item_type,
 130              'item_id'        => (int) $item_id,
 131              'user_id'        => (int) $user_id,
 132              'notify'        => 1
 133          );
 134   
 135          foreach ($methods as $method)
 136          {
 137              $row_base['method'] = $method;
 138              $insert_buffer->insert($row_base);
 139          }
 140      }
 141  }
 142