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

reclean.php

Zuletzt modifiziert: 09.10.2024, 12:55 - Dateigröße: 3.74 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\console\command\user;
015   
016  use phpbb\console\command\command;
017  use phpbb\db\driver\driver_interface;
018  use phpbb\language\language;
019  use phpbb\user;
020  use Symfony\Component\Console\Helper\ProgressBar;
021  use Symfony\Component\Console\Input\InputInterface;
022  use Symfony\Component\Console\Output\OutputInterface;
023  use Symfony\Component\Console\Style\SymfonyStyle;
024   
025  class reclean extends command
026  {
027      /** @var driver_interface */
028      protected $db;
029   
030      /** @var language */
031      protected $language;
032   
033      /** @var int A count of the number of re-cleaned user names */
034      protected $processed;
035   
036      /** @var ProgressBar */
037      protected $progress;
038   
039      /**
040       * Construct method
041       *
042       * @param user             $user
043       * @param driver_interface $db
044       * @param language         $language
045       */
046      public function __construct(user $user, driver_interface $db, language $language)
047      {
048          $this->db = $db;
049          $this->language = $language;
050   
051          parent::__construct($user);
052      }
053   
054      /**
055       * Sets the command name and description
056       *
057       * @return null
058       */
059      protected function configure()
060      {
061          $this
062              ->setName('user:reclean')
063              ->setDescription($this->language->lang('CLI_DESCRIPTION_USER_RECLEAN'))
064              ->setHelp($this->language->lang('CLI_HELP_USER_RECLEAN'))
065          ;
066      }
067   
068      /**
069       * Executes the command user:reclean
070       *
071       * Cleans user names that are unclean.
072       *
073       * @param InputInterface  $input  The input stream used to get the options
074       * @param OutputInterface $output The output stream, used to print messages
075       *
076       * @return int 0 if all is well, 1 if any errors occurred
077       */
078      protected function execute(InputInterface $input, OutputInterface $output)
079      {
080          $io = new SymfonyStyle($input, $output);
081   
082          $io->section($this->language->lang('CLI_USER_RECLEAN_START'));
083   
084          $this->processed = 0;
085   
086          $this->progress = $this->create_progress_bar($this->get_count(), $io, $output);
087          $this->progress->setMessage($this->language->lang('CLI_USER_RECLEAN_START'));
088          $this->progress->start();
089   
090          $stage = 0;
091          while ($stage !== true)
092          {
093              $stage = $this->reclean_usernames($stage);
094          }
095   
096          $this->progress->finish();
097   
098          $io->newLine(2);
099          $io->success($this->language->lang('CLI_USER_RECLEAN_DONE', $this->processed));
100   
101          return 0;
102      }
103   
104      /**
105       * Re-clean user names
106       * Only user names that are unclean will be re-cleaned
107       *
108       * @param int $start An offset index
109       * @return bool|int Return the next offset index or true if all records have been processed.
110       */
111      protected function reclean_usernames($start = 0)
112      {
113          $limit = 500;
114          $i = 0;
115   
116          $this->db->sql_transaction('begin');
117   
118          $sql = 'SELECT user_id, username, username_clean FROM ' . USERS_TABLE;
119          $result = $this->db->sql_query_limit($sql, $limit, $start);
120          while ($row = $this->db->sql_fetchrow($result))
121          {
122              $i++;
123              $username_clean = $this->db->sql_escape(utf8_clean_string($row['username']));
124   
125              if ($username_clean != $row['username_clean'])
126              {
127                  $sql = 'UPDATE ' . USERS_TABLE . "
128                      SET username_clean = '$username_clean'
129                      WHERE user_id = {$row['user_id']}";
130                  $this->db->sql_query($sql);
131   
132                  $this->processed++;
133              }
134   
135              $this->progress->advance();
136          }
137          $this->db->sql_freeresult($result);
138   
139          $this->db->sql_transaction('commit');
140   
141          return ($i < $limit) ? true : $start + $i;
142      }
143   
144      /**
145       * Get the count of users in the database
146       *
147       * @return int
148       */
149      protected function get_count()
150      {
151          $sql = 'SELECT COUNT(user_id) AS count FROM ' . USERS_TABLE;
152          $result = $this->db->sql_query($sql);
153          $count = (int) $this->db->sql_fetchfield('count');
154          $this->db->sql_freeresult($result);
155   
156          return $count;
157      }
158  }
159