diff options
| author | Nathaniel Guse <nathaniel.guse@gmail.com> | 2013-03-04 13:33:42 -0600 |
|---|---|---|
| committer | Nathaniel Guse <nathaniel.guse@gmail.com> | 2013-03-04 13:33:42 -0600 |
| commit | 941b7287b7dd3477d5ebce8d15a83cdde49e9dd7 (patch) | |
| tree | c8a8873e9419a25e03f70802cac00742ae4f1fd0 /phpBB/includes/avatar/driver/local.php | |
| parent | 029f096411f620f2066608cd0a1e8711f88da9e1 (diff) | |
| parent | 2e2ddd7e85034f747d5dd312803aadfc47ac80e2 (diff) | |
| download | forums-941b7287b7dd3477d5ebce8d15a83cdde49e9dd7.tar forums-941b7287b7dd3477d5ebce8d15a83cdde49e9dd7.tar.gz forums-941b7287b7dd3477d5ebce8d15a83cdde49e9dd7.tar.bz2 forums-941b7287b7dd3477d5ebce8d15a83cdde49e9dd7.tar.xz forums-941b7287b7dd3477d5ebce8d15a83cdde49e9dd7.zip | |
Merge remote-tracking branch 'remotes/marc/feature/avatars' into develop
# By Marc Alexander (100) and others
# Via Marc Alexander (8) and Igor Wiedler (3)
* remotes/marc/feature/avatars: (138 commits)
[feature/avatars] Update module_auth of ucp module and fix small issues
[feature/avatars] Add migrations data file for avatars
[feature/avatars] Reduce module auth of ucp avatar settings
[feature/avatars] Auto-clear avatar dimensions when first changing avatars
[feature/avatars] Use "Main" as category for avatars in root of gallery
[feature/avatars] Remove trailing whitespace from avatar code
[feature/avatars] Pass phpbb_user to prepare and process form functions
[feature/avatars] Document the use of the allowed extensions array
[feature/avatars] Use array for allowed extensions and implode if needed
[feature/avatars] Use deprecated for compatibility function
[feature/avatars] Correct license, copyright and package info
[feature/avatars] Move list of supported formats to avatar driver class
[feature/avatars] Add include of functions_display.php in BC function
[feature/avatars] Add note about when compatibility function was added
[feature/avatars] Add compatibility function for get_user_avatar()
[feature/avatars] Move definition of driver_collection to avatars.yml
[feature/avatars] Remove the obsolete request argument for avatar drivers
[feature/avatars] Add missing @var to docblocks in avatar manager
[feature/avatars] Remove not needed inline style
[feature/avatars] Differentiate tests for get drivers functions
...
Diffstat (limited to 'phpBB/includes/avatar/driver/local.php')
| -rw-r--r-- | phpBB/includes/avatar/driver/local.php | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/phpBB/includes/avatar/driver/local.php b/phpBB/includes/avatar/driver/local.php new file mode 100644 index 0000000000..f4bcd4ce74 --- /dev/null +++ b/phpBB/includes/avatar/driver/local.php @@ -0,0 +1,197 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2011 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +/** +* @ignore +*/ +if (!defined('IN_PHPBB')) +{ + exit; +} + +/** +* Handles avatars selected from the board gallery +* @package phpBB3 +*/ +class phpbb_avatar_driver_local extends phpbb_avatar_driver +{ + /** + * @inheritdoc + */ + public function get_data($row) + { + return array( + 'src' => $this->phpbb_root_path . $this->config['avatar_gallery_path'] . '/' . $row['avatar'], + 'width' => $row['avatar_width'], + 'height' => $row['avatar_height'], + ); + } + + /** + * @inheritdoc + */ + public function prepare_form($request, $template, $user, $row, &$error) + { + $avatar_list = $this->get_avatar_list($user); + $category = $request->variable('avatar_local_cat', ''); + + foreach ($avatar_list as $cat => $null) + { + if (!empty($avatar_list[$cat])) + { + $template->assign_block_vars('avatar_local_cats', array( + 'NAME' => $cat, + 'SELECTED' => ($cat == $category), + )); + } + + if ($cat != $category) + { + unset($avatar_list[$cat]); + } + } + + if (!empty($avatar_list[$category])) + { + $template->assign_vars(array( + 'AVATAR_LOCAL_SHOW' => true, + )); + + $table_cols = isset($row['avatar_gallery_cols']) ? $row['avatar_gallery_cols'] : 4; + $row_count = $col_count = $avatar_pos = 0; + $avatar_count = sizeof($avatar_list[$category]); + + reset($avatar_list[$category]); + + while ($avatar_pos < $avatar_count) + { + $img = current($avatar_list[$category]); + next($avatar_list[$category]); + + if ($col_count == 0) + { + ++$row_count; + $template->assign_block_vars('avatar_local_row', array( + )); + } + + $template->assign_block_vars('avatar_local_row.avatar_local_col', array( + 'AVATAR_IMAGE' => $this->phpbb_root_path . $this->config['avatar_gallery_path'] . '/' . $img['file'], + 'AVATAR_NAME' => $img['name'], + 'AVATAR_FILE' => $img['filename'], + )); + + $template->assign_block_vars('avatar_local_row.avatar_local_option', array( + 'AVATAR_FILE' => $img['filename'], + 'S_OPTIONS_AVATAR' => $img['filename'] + )); + + $col_count = ($col_count + 1) % $table_cols; + + ++$avatar_pos; + } + } + + return true; + } + + /** + * @inheritdoc + */ + public function prepare_form_acp($user) + { + return array( + 'avatar_gallery_path' => array('lang' => 'AVATAR_GALLERY_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true), + ); + } + + /** + * @inheritdoc + */ + public function process_form($request, $template, $user, $row, &$error) + { + $avatar_list = $this->get_avatar_list($user); + $category = $request->variable('avatar_local_cat', ''); + + $file = $request->variable('avatar_local_file', ''); + + if (empty($category) || empty($file)) + { + $error[] = 'NO_AVATAR_SELECTED'; + return false; + } + + if (!isset($avatar_list[$category][urldecode($file)])) + { + $error[] = 'AVATAR_URL_NOT_FOUND'; + return false; + } + + return array( + 'avatar' => ($category != $user->lang['MAIN']) ? $category . '/' . $file : $file, + 'avatar_width' => $avatar_list[$category][urldecode($file)]['width'], + 'avatar_height' => $avatar_list[$category][urldecode($file)]['height'], + ); + } + + /** + * Get a list of avatars that are locally available + * Results get cached for 24 hours (86400 seconds) + * + * @param phpbb_user $user User object + * + * @return array Array containing the locally available avatars + */ + protected function get_avatar_list($user) + { + $avatar_list = ($this->cache == null) ? false : $this->cache->get('avatar_local_list'); + + if ($avatar_list === false) + { + $avatar_list = array(); + $path = $this->phpbb_root_path . $this->config['avatar_gallery_path']; + + $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS | FilesystemIterator::UNIX_PATHS), RecursiveIteratorIterator::SELF_FIRST); + foreach ($iterator as $file_info) + { + $file_path = $file_info->getPath(); + $image = $file_info->getFilename(); + + // Match all images in the gallery folder + if (preg_match('#^[^&\'"<>]+\.(?:' . implode('|', $this->allowed_extensions) . ')$#i', $image) && is_file($file_path . '/' . $image)) + { + if (function_exists('getimagesize')) + { + $dims = getimagesize($file_path . '/' . $image); + } + else + { + $dims = array(0, 0); + } + $cat = ($path == $file_path) ? $user->lang['MAIN'] : str_replace("$path/", '', $file_path); + $avatar_list[$cat][$image] = array( + 'file' => ($cat != $user->lang['MAIN']) ? rawurlencode($cat) . '/' . rawurlencode($image) : rawurlencode($image), + 'filename' => rawurlencode($image), + 'name' => ucfirst(str_replace('_', ' ', preg_replace('#^(.*)\..*$#', '\1', $image))), + 'width' => $dims[0], + 'height' => $dims[1], + ); + } + } + ksort($avatar_list); + + if ($this->cache != null) + { + $this->cache->put('avatar_local_list', $avatar_list, 86400); + } + } + + return $avatar_list; + } +} |
