diff options
Diffstat (limited to 'plugins/AdminTools/include/MultiView.class.php')
-rw-r--r-- | plugins/AdminTools/include/MultiView.class.php | 310 |
1 files changed, 310 insertions, 0 deletions
diff --git a/plugins/AdminTools/include/MultiView.class.php b/plugins/AdminTools/include/MultiView.class.php new file mode 100644 index 000000000..21c2560fa --- /dev/null +++ b/plugins/AdminTools/include/MultiView.class.php @@ -0,0 +1,310 @@ +<?php +defined('ADMINTOOLS_PATH') or die('Hacking attempt!'); + +/** + * Class managing multi views system + */ +class MultiView +{ + /** @var bool $is_admin */ + private $is_admin = false; + + /** @var array $data */ + private $data = array(); + private $data_url_params = array(); + + /** @var array $user */ + private $user = array(); + + /** + * Constructor, load $data from session + */ + function __construct() + { + global $conf; + + $this->data = array_merge( + array( + 'view_as' => 0, + 'theme' => '', + 'lang' => '', + 'show_queries' => $conf['show_queries'], + 'debug_l10n' => $conf['debug_l10n'], + 'debug_template' => $conf['debug_template'], + 'template_combine_files' => $conf['template_combine_files'], + 'no_history' => false, + ), + pwg_get_session_var('multiview', array()) + ); + + $this->data_url_params = array_keys($this->data); + $this->data_url_params = array_map(create_function('$d', 'return "ato_".$d;'), $this->data_url_params); + } + + /** + * @return bool + */ + public function is_admin() + { + return $this->is_admin; + } + + /** + * @return array + */ + public function get_data() + { + return $this->data; + } + + /** + * @return array + */ + public function get_user() + { + return $this->user; + } + + /** + * Save $data in session + */ + private function save() + { + pwg_set_session_var('multiview', $this->data); + } + + /** + * Returns the current url minus MultiView params + * + * @param bool $with_amp - adds ? or & at the end of the url + * @return string + */ + public function get_clean_url($with_amp=false) + { + if (script_basename() == 'picture') + { + $url = duplicate_picture_url(array(), $this->data_url_params); + } + else if (script_basename() == 'index') + { + $url = duplicate_index_url(array(), $this->data_url_params); + } + else + { + $url = get_query_string_diff($this->data_url_params); + } + + if ($with_amp) + { + $url.= strpos($url, '?')!==false ? '&' : '?'; + } + + return $url; + } + + /** + * Triggered on "user_init", change current view depending of URL params. + */ + public function user_init() + { + global $user, $conf; + + $this->is_admin = is_admin(); + + $this->user = array( + 'id' => $user['id'], + 'username' => $user['username'], + 'language' => $user['language'], + 'theme' => $user['theme'], + ); + + // inactive on ws.php to allow AJAX admin tasks + if ($this->is_admin && script_basename() != 'ws') + { + if ($this->data['view_as'] == 0) + { + $this->data['view_as'] = $user['id']; + } + if (empty($this->data['lang'])) + { + $this->data['lang'] = $user['language']; + } + if (empty($this->data['theme'])) + { + $this->data['theme'] = $user['theme']; + } + + // view_as + if (!defined('IN_ADMIN')) + { + if (isset($_GET['ato_view_as'])) + { + $this->data['view_as'] = (int)$_GET['ato_view_as']; + } + if ($this->data['view_as'] != $user['id']) + { + $user = build_user($this->data['view_as'], true); + if (isset($_GET['ato_view_as'])) + { + $this->data['theme'] = $user['theme']; + $this->data['lang'] = $user['language']; + } + } + } + + // theme + if (isset($_GET['ato_theme'])) + { + $this->data['theme'] = $_GET['ato_theme']; + } + $user['theme'] = $this->data['theme']; + + // lang + if (isset($_GET['ato_lang'])) + { + $this->data['lang'] = $_GET['ato_lang']; + } + $user['language'] = $this->data['lang']; + + // show_queries + if (isset($_GET['ato_show_queries'])) + { + $this->data['show_queries'] = (bool)$_GET['ato_show_queries']; + } + $conf['show_queries'] = $this->data['show_queries']; + + // debug_l10n + if (isset($_GET['ato_debug_l10n'])) + { + $this->data['debug_l10n'] = (bool)$_GET['ato_debug_l10n']; + } + $conf['debug_l10n'] = $this->data['debug_l10n']; + + // debug_template + if (isset($_GET['ato_debug_template'])) + { + $this->data['debug_template'] = (bool)$_GET['ato_debug_template']; + } + $conf['debug_template'] = $this->data['debug_template']; + + // template_combine_files + if (isset($_GET['ato_template_combine_files'])) + { + $this->data['template_combine_files'] = (bool)$_GET['ato_template_combine_files']; + } + $conf['template_combine_files'] = $this->data['template_combine_files']; + + // no_history + if (isset($_GET['ato_no_history'])) + { + $this->data['no_history'] = (bool)$_GET['ato_no_history']; + } + if ($this->data['no_history']) + { + add_event_handler('pwg_log_allowed', create_function('', 'return false;')); + } + + $this->save(); + } + } + + /** + * Returns the language of the current user if different from the current language + * false otherwise + */ + function get_user_language() + { + if (isset($this->user['language']) && isset($this->data['lang']) + && $this->user['language'] != $this->data['lang'] + ) + { + return $this->user['language']; + } + return false; + } + + /** + * Triggered on "init", in order to clean template files (not initialized on "user_init") + */ + public function init() + { + if ($this->is_admin) + { + if (isset($_GET['ato_purge_template'])) + { + global $template; + $template->delete_compiled_templates(); + FileCombiner::clear_combined_files(); + } + } + } + + /** + * Mark browser session cache for deletion + */ + public static function invalidate_cache() + { + global $conf; + conf_update_param('multiview_invalidate_cache', true, true); + } + + /** + * Register custom API methods + */ + public static function register_ws($arr) + { + $service = &$arr[0]; + + $service->addMethod( + 'multiView.getData', + array('MultiView', 'ws_get_data'), + array(), + 'AdminTools private method.', + null, + array('admin_only' => true, 'hidden' => true) + ); + } + + /** + * API method + * Return full list of users, themes and languages + */ + public static function ws_get_data($params) + { + global $conf; + + // get users + $query = ' +SELECT + '.$conf['user_fields']['id'].' AS id, + '.$conf['user_fields']['username'].' AS username +FROM '.USERS_TABLE.' + ORDER BY CONVERT('.$conf['user_fields']['username'].', CHAR) +;'; + $out['users'] = array_from_query($query); + + // get themes + include_once(PHPWG_ROOT_PATH.'admin/include/themes.class.php'); + $themes = new themes(); + foreach (array_keys($themes->db_themes_by_id) as $theme) + { + if (!empty($theme)) + { + $out['themes'][] = $theme; + } + } + + // get languages + foreach (get_languages() as $code => $name) + { + $out['languages'][] = array( + 'id' => $code, + 'name' => $name, + ); + } + + conf_delete_param('multiview_invalidate_cache'); + + return $out; + } +}
\ No newline at end of file |