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

resync.php

Zuletzt modifiziert: 09.10.2024, 12:52 - Dateigröße: 2.79 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\attachment;
 015   
 016  use \phpbb\db\driver\driver_interface;
 017   
 018  /**
 019   * Attachment resync class
 020   */
 021  class resync
 022  {
 023      /** @var driver_interface */
 024      protected $db;
 025   
 026      /** @var string Attachment table SQL ID */
 027      private $attach_sql_id;
 028   
 029      /** @var string Resync table SQL ID  */
 030      private $resync_sql_id;
 031   
 032      /** @var string Resync SQL table */
 033      private $resync_table;
 034   
 035      /** @var string SQL where statement */
 036      private $sql_where;
 037   
 038      /**
 039       * Constructor for attachment resync class
 040       *
 041       * @param driver_interface $db Database driver
 042       */
 043      public function __construct(driver_interface $db)
 044      {
 045          $this->db = $db;
 046      }
 047   
 048      /**
 049       * Set type constraints for attachment resync
 050       *
 051       * @param string $type Type of resync; can be: message|post|topic
 052       */
 053      protected function set_type_constraints($type)
 054      {
 055          switch ($type)
 056          {
 057              case 'message':
 058                  $this->attach_sql_id = 'post_msg_id';
 059                  $this->sql_where = ' AND in_message = 1
 060                      AND is_orphan = 0';
 061                  $this->resync_table = PRIVMSGS_TABLE;
 062                  $this->resync_sql_id = 'msg_id';
 063              break;
 064   
 065              case 'post':
 066                  $this->attach_sql_id = 'post_msg_id';
 067                  $this->sql_where = ' AND in_message = 0
 068                      AND is_orphan = 0';
 069                  $this->resync_table = POSTS_TABLE;
 070                  $this->resync_sql_id = 'post_id';
 071              break;
 072   
 073              case 'topic':
 074                  $this->attach_sql_id = 'topic_id';
 075                  $this->sql_where = ' AND is_orphan = 0';
 076                  $this->resync_table = TOPICS_TABLE;
 077                  $this->resync_sql_id = 'topic_id';
 078              break;
 079          }
 080      }
 081   
 082      /**
 083       * Resync specified type
 084       *
 085       * @param string $type Type of resync
 086       * @param array $ids IDs to resync
 087       */
 088      public function resync($type, $ids)
 089      {
 090          if (empty($type) || !is_array($ids) || !sizeof($ids) || !in_array($type, array('post', 'topic', 'message')))
 091          {
 092              return;
 093          }
 094   
 095          $this->set_type_constraints($type);
 096   
 097          // Just check which elements are still having an assigned attachment
 098          // not orphaned by querying the attachments table
 099          $sql = 'SELECT ' . $this->attach_sql_id . '
 100              FROM ' . ATTACHMENTS_TABLE . '
 101              WHERE ' . $this->db->sql_in_set($this->attach_sql_id, $ids)
 102                  . $this->sql_where;
 103          $result = $this->db->sql_query($sql);
 104   
 105          $remaining_ids = array();
 106          while ($row = $this->db->sql_fetchrow($result))
 107          {
 108              $remaining_ids[] = $row[$this->attach_sql_id];
 109          }
 110          $this->db->sql_freeresult($result);
 111   
 112          // Now only unset those ids remaining
 113          $ids = array_diff($ids, $remaining_ids);
 114   
 115          if (sizeof($ids))
 116          {
 117              $sql = 'UPDATE ' . $this->resync_table . '
 118                  SET ' . $type . '_attachment = 0
 119                  WHERE ' . $this->db->sql_in_set($this->resync_sql_id, $ids);
 120              $this->db->sql_query($sql);
 121          }
 122      }
 123   
 124  }
 125