public function testElggIsValidViewtype() { $this->assertTrue(_elgg_is_valid_viewtype('valid')); $this->assertTrue(_elgg_is_valid_viewtype('valid_viewtype')); $this->assertTrue(_elgg_is_valid_viewtype('0')); $this->assertFalse(_elgg_is_valid_viewtype('a;b')); $this->assertFalse(_elgg_is_valid_viewtype('invalid-viewtype')); $this->assertFalse(_elgg_is_valid_viewtype(123)); $this->assertFalse(_elgg_is_valid_viewtype('')); }
/** * Initialize viewtypes on system boot event * This ensures simplecache is cleared during upgrades. See #2252 * * @return void * @access private * @elgg_event_handler boot system */ function elgg_views_boot() { global $CONFIG; elgg_register_simplecache_view('css/ie'); elgg_register_simplecache_view('css/ie7'); elgg_register_simplecache_view('css/ie8'); elgg_register_simplecache_view('js/text.js'); elgg_register_js('elgg.require_config', elgg_get_simplecache_url('js', 'elgg/require_config'), 'head'); elgg_register_js('require', '/vendors/requirejs/require-2.1.10.min.js', 'head'); elgg_register_js('jquery', '/vendors/jquery/jquery-1.11.0.min.js', 'head'); elgg_register_js('jquery-migrate', '/vendors/jquery/jquery-migrate-1.2.1.min.js', 'head'); elgg_register_js('jquery-ui', '/vendors/jquery/jquery-ui-1.10.4.min.js', 'head'); // this is the only lib that isn't required to be loaded sync in head elgg_define_js('jquery.form', array('src' => '/vendors/jquery/jquery.form.min.js', 'deps' => array('jquery'), 'exports' => 'jQuery.fn.ajaxForm')); $elgg_js_url = elgg_get_simplecache_url('js', 'elgg'); elgg_register_js('elgg', $elgg_js_url, 'head'); elgg_load_js('elgg.require_config'); elgg_load_js('require'); elgg_load_js('jquery'); elgg_load_js('jquery-migrate'); elgg_load_js('jquery-ui'); elgg_load_js('elgg'); $lightbox_js_url = elgg_get_simplecache_url('js', 'lightbox'); elgg_register_js('lightbox', $lightbox_js_url); elgg_register_css('lightbox', 'vendors/jquery/colorbox/theme/colorbox.css'); $elgg_css_url = elgg_get_simplecache_url('css', 'elgg'); elgg_register_css('elgg', $elgg_css_url); elgg_load_css('elgg'); elgg_register_ajax_view('js/languages'); elgg_register_plugin_hook_handler('simplecache:generate', 'js', '_elgg_views_amd'); elgg_register_plugin_hook_handler('simplecache:generate', 'css', '_elgg_views_minify'); elgg_register_plugin_hook_handler('simplecache:generate', 'js', '_elgg_views_minify'); elgg_register_plugin_hook_handler('output:before', 'layout', 'elgg_views_add_rss_link'); elgg_register_plugin_hook_handler('output:before', 'page', '_elgg_views_send_header_x_frame_options'); // discover the core viewtypes // @todo the cache is loaded in load_plugins() but we need to know viewtypes earlier $view_path = $CONFIG->viewpath; $viewtype_dirs = scandir($view_path); foreach ($viewtype_dirs as $viewtype) { if (_elgg_is_valid_viewtype($viewtype) && is_dir($view_path . $viewtype)) { elgg_register_viewtype($viewtype); } } // set default icon sizes - can be overridden in settings.php or with plugin if (!isset($CONFIG->icon_sizes)) { $icon_sizes = array('topbar' => array('w' => 16, 'h' => 16, 'square' => true, 'upscale' => true), 'tiny' => array('w' => 25, 'h' => 25, 'square' => true, 'upscale' => true), 'small' => array('w' => 40, 'h' => 40, 'square' => true, 'upscale' => true), 'medium' => array('w' => 100, 'h' => 100, 'square' => true, 'upscale' => true), 'large' => array('w' => 200, 'h' => 200, 'square' => false, 'upscale' => false), 'master' => array('w' => 550, 'h' => 550, 'square' => false, 'upscale' => false)); elgg_set_config('icon_sizes', $icon_sizes); } }
/** * @access private */ public function viewExists($view, $viewtype = '', $recurse = true) { global $CONFIG; // Detect view type if ($viewtype === '' || !_elgg_is_valid_viewtype($viewtype)) { $viewtype = elgg_get_viewtype(); } if (!isset($CONFIG->views->locations[$viewtype][$view])) { if (!isset($CONFIG->viewpath)) { $location = dirname(dirname(dirname(__FILE__))) . "/views/"; } else { $location = $CONFIG->viewpath; } } else { $location = $CONFIG->views->locations[$viewtype][$view]; } if ($this->fileExists("{$location}{$viewtype}/{$view}.php") || $this->fileExists("{$location}{$viewtype}/{$view}")) { return true; } // If we got here then check whether this exists as an extension // We optionally recursively check whether the extended view exists also for the viewtype if ($recurse && isset($CONFIG->views->extensions[$view])) { foreach ($CONFIG->views->extensions[$view] as $view_extension) { // do not recursively check to stay away from infinite loops if ($this->viewExists($view_extension, $viewtype, false)) { return true; } } } // Now check if the default view exists if the view is registered as a fallback if ($viewtype != 'default' && $this->doesViewtypeFallback($viewtype)) { return $this->viewExists($view, 'default'); } return false; }
/** * @access private */ public function viewExists($view, $viewtype = '', $recurse = true) { $view = $this->canonicalizeViewName($view); if (empty($view) || !is_string($view)) { return false; } // Detect view type if ($viewtype === '' || !_elgg_is_valid_viewtype($viewtype)) { $viewtype = elgg_get_viewtype(); } $file = $this->findViewFile($view, $viewtype); if ($file) { return true; } // If we got here then check whether this exists as an extension // We optionally recursively check whether the extended view exists also for the viewtype if ($recurse && isset($this->extensions[$view])) { foreach ($this->extensions[$view] as $view_extension) { // do not recursively check to stay away from infinite loops if ($this->viewExists($view_extension, $viewtype, false)) { return true; } } } // Now check if the default view exists if the view is registered as a fallback if ($viewtype != 'default' && $this->doesViewtypeFallback($viewtype)) { return $this->viewExists($view, 'default'); } return false; }
/** * Initialize viewtypes on system boot event * This ensures simplecache is cleared during upgrades. See #2252 * * @return void * @access private * @elgg_event_handler boot system */ function elgg_views_boot() { if (!elgg_get_config('system_cache_loaded')) { _elgg_services()->views->registerPluginViews(realpath(__DIR__ . '/../../')); } global $CONFIG; if (!elgg_get_config('system_cache_loaded')) { _elgg_services()->views->registerPluginViews(realpath(__DIR__ . '/../../')); } // on every page // jQuery and UI must come before require. See #9024 elgg_register_js('jquery', elgg_get_simplecache_url('jquery.js'), 'head'); elgg_load_js('jquery'); elgg_register_js('jquery-ui', elgg_get_simplecache_url('jquery-ui.js'), 'head'); elgg_load_js('jquery-ui'); elgg_register_js('elgg.require_config', elgg_get_simplecache_url('elgg/require_config.js'), 'head'); elgg_load_js('elgg.require_config'); elgg_register_js('require', elgg_get_simplecache_url('require.js'), 'head'); elgg_load_js('require'); elgg_register_js('elgg', elgg_get_simplecache_url('elgg.js'), 'head'); elgg_load_js('elgg'); elgg_register_css('font-awesome', elgg_get_simplecache_url('font-awesome/css/font-awesome.css')); elgg_load_css('font-awesome'); elgg_register_css('elgg', elgg_get_simplecache_url('elgg.css')); elgg_load_css('elgg'); // optional stuff elgg_register_js('lightbox', elgg_get_simplecache_url('lightbox.js')); elgg_register_css('lightbox', elgg_get_simplecache_url('lightbox/elgg-colorbox-theme/colorbox.css')); elgg_register_js('elgg.autocomplete', elgg_get_simplecache_url('elgg/ui.autocomplete.js')); elgg_register_js('jquery.ui.autocomplete.html', elgg_get_simplecache_url('jquery.ui.autocomplete.html.js')); elgg_define_js('jquery.ui.autocomplete.html', ['deps' => ['jquery-ui']]); elgg_register_js('elgg.friendspicker', elgg_get_simplecache_url('elgg/ui.friends_picker.js')); elgg_register_js('elgg.avatar_cropper', elgg_get_simplecache_url('elgg/ui.avatar_cropper.js')); elgg_register_js('elgg.ui.river', elgg_get_simplecache_url('elgg/ui.river.js')); elgg_register_js('jquery.imgareaselect', elgg_get_simplecache_url('jquery.imgareaselect.js')); elgg_register_css('jquery.imgareaselect', elgg_get_simplecache_url('jquery.imgareaselect.css')); elgg_register_ajax_view('languages.js'); elgg_register_plugin_hook_handler('simplecache:generate', 'js', '_elgg_views_amd'); elgg_register_plugin_hook_handler('simplecache:generate', 'css', '_elgg_views_minify'); elgg_register_plugin_hook_handler('simplecache:generate', 'js', '_elgg_views_minify'); elgg_register_plugin_hook_handler('output:before', 'layout', 'elgg_views_add_rss_link'); elgg_register_plugin_hook_handler('output:before', 'page', '_elgg_views_send_header_x_frame_options'); // @todo the cache is loaded in load_plugins() but we need to know viewtypes earlier $view_path = $GLOBALS['_ELGG']->view_path; $viewtype_dirs = scandir($view_path); foreach ($viewtype_dirs as $viewtype) { if (_elgg_is_valid_viewtype($viewtype) && is_dir($view_path . $viewtype)) { elgg_register_viewtype($viewtype); } } // Declared views. Unlike plugins, Elgg's root views/ is never scanned, so Elgg cannot override // these view traditional view files. $file = dirname(__DIR__) . '/views.php'; if (is_file($file)) { $spec = (include $file); if (is_array($spec)) { _elgg_services()->views->mergeViewsSpec($spec); } } // set default icon sizes - can be overridden in settings.php or with plugin if (!isset($CONFIG->icon_sizes)) { $icon_sizes = array('topbar' => array('w' => 16, 'h' => 16, 'square' => true, 'upscale' => true), 'tiny' => array('w' => 25, 'h' => 25, 'square' => true, 'upscale' => true), 'small' => array('w' => 40, 'h' => 40, 'square' => true, 'upscale' => true), 'medium' => array('w' => 100, 'h' => 100, 'square' => true, 'upscale' => true), 'large' => array('w' => 200, 'h' => 200, 'square' => false, 'upscale' => false), 'master' => array('w' => 550, 'h' => 550, 'square' => false, 'upscale' => false)); elgg_set_config('icon_sizes', $icon_sizes); } }
/** * Initialize viewtypes on system boot event * This ensures simplecache is cleared during upgrades. See #2252 * * @return void * @access private * @elgg_event_handler boot system */ function elgg_views_boot() { global $CONFIG; if (!elgg_get_config('system_cache_loaded')) { // Core view files in /views _elgg_services()->views->registerPluginViews(realpath(__DIR__ . '/../../')); // Core view definitions in /engine/views.php $file = dirname(__DIR__) . '/views.php'; if (is_file($file)) { $spec = Includer::includeFile($file); if (is_array($spec)) { _elgg_services()->views->mergeViewsSpec($spec); } } } // on every page // jQuery and UI must come before require. See #9024 elgg_register_js('jquery', elgg_get_simplecache_url('jquery.js'), 'head'); elgg_load_js('jquery'); elgg_register_js('jquery-ui', elgg_get_simplecache_url('jquery-ui.js'), 'head'); elgg_load_js('jquery-ui'); elgg_register_js('elgg.require_config', elgg_get_simplecache_url('elgg/require_config.js'), 'head'); elgg_load_js('elgg.require_config'); elgg_register_js('require', elgg_get_simplecache_url('require.js'), 'head'); elgg_load_js('require'); elgg_register_js('elgg', elgg_get_simplecache_url('elgg.js'), 'head'); elgg_load_js('elgg'); elgg_register_css('font-awesome', elgg_get_simplecache_url('font-awesome/css/font-awesome.css')); elgg_load_css('font-awesome'); elgg_register_css('elgg', elgg_get_simplecache_url('elgg.css')); elgg_load_css('elgg'); elgg_register_simplecache_view('elgg/init.js'); elgg_register_css('lightbox', elgg_get_simplecache_url('lightbox/elgg-colorbox-theme/colorbox.css')); elgg_load_css('lightbox'); elgg_define_js('jquery.ui.autocomplete.html', ['deps' => ['jquery-ui']]); elgg_register_js('elgg.friendspicker', elgg_get_simplecache_url('elgg/ui.friends_picker.js')); elgg_register_js('elgg.avatar_cropper', elgg_get_simplecache_url('elgg/ui.avatar_cropper.js')); // @deprecated 2.2 elgg_register_js('elgg.ui.river', elgg_get_simplecache_url('elgg/ui.river.js')); elgg_register_js('jquery.imgareaselect', elgg_get_simplecache_url('jquery.imgareaselect.js')); elgg_register_css('jquery.imgareaselect', elgg_get_simplecache_url('jquery.imgareaselect.css')); elgg_register_ajax_view('languages.js'); elgg_register_plugin_hook_handler('simplecache:generate', 'js', '_elgg_views_amd'); elgg_register_plugin_hook_handler('simplecache:generate', 'css', '_elgg_views_minify'); elgg_register_plugin_hook_handler('simplecache:generate', 'js', '_elgg_views_minify'); elgg_register_plugin_hook_handler('output:before', 'page', '_elgg_views_send_header_x_frame_options'); // registered with high priority for BC // prior to 2.2 registration used to take place in _elgg_views_prepare_head() before the hook was triggered elgg_register_plugin_hook_handler('head', 'page', '_elgg_views_prepare_favicon_links', 1); // @todo the cache is loaded in load_plugins() but we need to know viewtypes earlier $view_path = _elgg_services()->views->view_path; $viewtype_dirs = scandir($view_path); foreach ($viewtype_dirs as $viewtype) { if (_elgg_is_valid_viewtype($viewtype) && is_dir($view_path . $viewtype)) { elgg_register_viewtype($viewtype); } } // set default icon sizes - can be overridden in settings.php or with plugin if (!isset($CONFIG->icon_sizes)) { $icon_sizes = array('topbar' => array('w' => 16, 'h' => 16, 'square' => true, 'upscale' => true), 'tiny' => array('w' => 25, 'h' => 25, 'square' => true, 'upscale' => true), 'small' => array('w' => 40, 'h' => 40, 'square' => true, 'upscale' => true), 'medium' => array('w' => 100, 'h' => 100, 'square' => true, 'upscale' => true), 'large' => array('w' => 200, 'h' => 200, 'square' => false, 'upscale' => false), 'master' => array('w' => 550, 'h' => 550, 'square' => false, 'upscale' => false)); elgg_set_config('icon_sizes', $icon_sizes); } // Patches and features that were included between major releases // sometimes require additional styling, but adding them to core CSS files // is not always feasible, because those can be replaced by themes. // @todo Remove in 3.0 elgg_extend_view('elgg.css', 'elements/pathces.css'); elgg_extend_view('admin.css', 'elements/pathces.css'); }