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

local.php

Zuletzt modifiziert: 09.10.2024, 12:54 - Dateigröße: 5.43 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\avatar\driver;
 015   
 016  /**
 017  * Handles avatars selected from the board gallery
 018  */
 019  class local extends \phpbb\avatar\driver\driver
 020  {
 021      /**
 022      * {@inheritdoc}
 023      */
 024      public function get_data($row)
 025      {
 026          $root_path = (defined('PHPBB_USE_BOARD_URL_PATH') && PHPBB_USE_BOARD_URL_PATH) ? generate_board_url() . '/' : $this->path_helper->get_web_root_path();
 027   
 028          return array(
 029              'src' => $root_path . $this->config['avatar_gallery_path'] . '/' . $row['avatar'],
 030              'width' => $row['avatar_width'],
 031              'height' => $row['avatar_height'],
 032          );
 033      }
 034   
 035      /**
 036      * {@inheritdoc}
 037      */
 038      public function prepare_form($request, $template, $user, $row, &$error)
 039      {
 040          $avatar_list = $this->get_avatar_list($user);
 041          $category = $request->variable('avatar_local_cat', key($avatar_list));
 042   
 043          foreach ($avatar_list as $cat => $null)
 044          {
 045              if (!empty($avatar_list[$cat]))
 046              {
 047                  $template->assign_block_vars('avatar_local_cats', array(
 048                      'NAME' => $cat,
 049                      'SELECTED' => ($cat == $category),
 050                  ));
 051              }
 052   
 053              if ($cat != $category)
 054              {
 055                  unset($avatar_list[$cat]);
 056              }
 057          }
 058   
 059          if (!empty($avatar_list[$category]))
 060          {
 061              $template->assign_vars(array(
 062                  'AVATAR_LOCAL_SHOW' => true,
 063              ));
 064   
 065              $table_cols = isset($row['avatar_gallery_cols']) ? $row['avatar_gallery_cols'] : 4;
 066              $row_count = $col_count = $avatar_pos = 0;
 067              $avatar_count = sizeof($avatar_list[$category]);
 068   
 069              reset($avatar_list[$category]);
 070   
 071              while ($avatar_pos < $avatar_count)
 072              {
 073                  $img = current($avatar_list[$category]);
 074                  next($avatar_list[$category]);
 075   
 076                  if ($col_count == 0)
 077                  {
 078                      ++$row_count;
 079                      $template->assign_block_vars('avatar_local_row', array(
 080                      ));
 081                  }
 082   
 083                  $template->assign_block_vars('avatar_local_row.avatar_local_col', array(
 084                      'AVATAR_IMAGE'  => $this->phpbb_root_path . $this->config['avatar_gallery_path'] . '/' . $img['file'],
 085                      'AVATAR_NAME'     => $img['name'],
 086                      'AVATAR_FILE'     => $img['filename'],
 087                      'CHECKED'            => $img['file'] === $row['avatar'],
 088                  ));
 089   
 090                  $template->assign_block_vars('avatar_local_row.avatar_local_option', array(
 091                      'AVATAR_FILE'         => $img['filename'],
 092                      'S_OPTIONS_AVATAR'    => $img['filename'],
 093                      'CHECKED'            => $img['file'] === $row['avatar'],
 094                  ));
 095   
 096                  $col_count = ($col_count + 1) % $table_cols;
 097   
 098                  ++$avatar_pos;
 099              }
 100          }
 101   
 102          return true;
 103      }
 104   
 105      /**
 106      * {@inheritdoc}
 107      */
 108      public function prepare_form_acp($user)
 109      {
 110          return array(
 111              'avatar_gallery_path'    => array('lang' => 'AVATAR_GALLERY_PATH',    'validate' => 'rpath',    'type' => 'text:20:255', 'explain' => true),
 112          );
 113      }
 114   
 115      /**
 116      * {@inheritdoc}
 117      */
 118      public function process_form($request, $template, $user, $row, &$error)
 119      {
 120          $avatar_list = $this->get_avatar_list($user);
 121          $category = $request->variable('avatar_local_cat', '');
 122   
 123          $file = $request->variable('avatar_local_file', '');
 124   
 125          if (empty($category) || empty($file))
 126          {
 127              return false;
 128          }
 129   
 130          if (!isset($avatar_list[$category][urldecode($file)]))
 131          {
 132              $error[] = 'AVATAR_URL_NOT_FOUND';
 133              return false;
 134          }
 135   
 136          return array(
 137              'avatar' => ($category != $user->lang['NO_AVATAR_CATEGORY']) ? $category . '/' . $file : $file,
 138              'avatar_width' => $avatar_list[$category][urldecode($file)]['width'],
 139              'avatar_height' => $avatar_list[$category][urldecode($file)]['height'],
 140          );
 141      }
 142   
 143      /**
 144      * {@inheritdoc}
 145      */
 146      public function get_template_name()
 147      {
 148          return 'ucp_avatar_options_local.html';
 149      }
 150   
 151      /**
 152      * Get a list of avatars that are locally available
 153      * Results get cached for 24 hours (86400 seconds)
 154      *
 155      * @param \phpbb\user $user User object
 156      *
 157      * @return array Array containing the locally available avatars
 158      */
 159      protected function get_avatar_list($user)
 160      {
 161          $avatar_list = ($this->cache == null) ? false : $this->cache->get('_avatar_local_list');
 162   
 163          if ($avatar_list === false)
 164          {
 165              $avatar_list = array();
 166              $path = $this->phpbb_root_path . $this->config['avatar_gallery_path'];
 167   
 168              $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::UNIX_PATHS), \RecursiveIteratorIterator::SELF_FIRST);
 169              foreach ($iterator as $file_info)
 170              {
 171                  $file_path = $file_info->getPath();
 172                  $image = $file_info->getFilename();
 173   
 174                  // Match all images in the gallery folder
 175                  if (preg_match('#^[^&\'"<>]+\.(?:' . implode('|', $this->allowed_extensions) . ')$#i', $image) && is_file($file_path . '/' . $image))
 176                  {
 177                      $dims = $this->imagesize->getImageSize($file_path . '/' . $image);
 178   
 179                      if ($dims === false)
 180                      {
 181                          $dims = array(0, 0);
 182                      }
 183                      else
 184                      {
 185                          $dims = array($dims['width'], $dims['height']);
 186                      }
 187                      $cat = ($path == $file_path) ? $user->lang['NO_AVATAR_CATEGORY'] : str_replace("$path/", '', $file_path);
 188                      $avatar_list[$cat][$image] = array(
 189                          'file'      => ($cat != $user->lang['NO_AVATAR_CATEGORY']) ? str_replace('%2F', '/', rawurlencode($cat)) . '/' . rawurlencode($image) : rawurlencode($image),
 190                          'filename'  => rawurlencode($image),
 191                          'name'      => ucfirst(str_replace('_', ' ', preg_replace('#^(.*)\..*$#', '\1', $image))),
 192                          'width'     => $dims[0],
 193                          'height'    => $dims[1],
 194                      );
 195                  }
 196              }
 197              ksort($avatar_list);
 198   
 199              if ($this->cache != null)
 200              {
 201                  $this->cache->put('_avatar_local_list', $avatar_list, 86400);
 202              }
 203          }
 204   
 205          return $avatar_list;
 206      }
 207  }
 208