/** * Produce the UI for a plugin based on the user's selected config option * * @param string $configure The id of the configured plugin * @param string $configuration The selected configuration option **/ public static function plugin_ui( $configure, $configaction ) { Plugins::act_id( 'plugin_ui_' . $configaction, $configure, $configure, $configaction ); Plugins::act( 'plugin_ui_any_' . $configaction, $configure, $configaction ); Plugins::act_id( 'plugin_ui', $configure, $configure, $configaction ); Plugins::act( 'plugin_ui_any', $configure, $configaction ); }
/** * Returns a named Theme descendant. * If no parameter is supplied, then * load the active theme from the database. * * If no theme option is set, a fatal error is thrown * * @param name ( optional ) override the default theme lookup * @param template_engine ( optional ) specify a template engine * @param theme_dir ( optional ) specify a theme directory **/ public static function create( $name = null, $template_engine = null, $theme_dir = null ) { // If the name is not supplied, load the active theme if(empty($name)) { $themedata = self::get_active(); if ( empty( $themedata ) ) { die( _t( 'Theme not installed.' ) ); } } // Otherwise, try to load the named theme from user themes that are present else { $themedata = self::get_by_name( $name ); } // If a theme wasn't found by name, create a blank object if(!$themedata) { $themedata = array(); $themedata['name'] = $name; $themedata['version'] = 0; } // If a specific template engine was supplied, use it if(!empty($template_engine)) { $themedata['template_engine'] = $template_engine; } // If a theme directory was supplied, use the directory that was supplied if(!empty($theme_dir)) { $themedata['theme_dir'] = $theme_dir; } // Set the default theme file $themefile = 'theme.php'; if(isset($themedata->class['file']) && (string)$themedata->xml->class['file'] != '') { $themefile = (string)$themedata->xml->class['file']; } // Convert themedata to QueryRecord for legacy purposes // @todo: Potentially break themes by sending an array to the constructor instead of this QueryRecord $themedata = new QueryRecord($themedata); if ( file_exists( $themedata->theme_dir . $themefile ) ) { include_once( $themedata->theme_dir . $themefile ); } if ( isset( $themedata->class ) ) { $classname = $themedata->class; } else { $classname = self::class_from_filename( $themedata->theme_dir . $themefile ); } // the final fallback, for the admin "theme" if ( $classname == '' ) { $classname = 'Theme'; } $created_theme = new $classname( $themedata ); $created_theme->upgrade(); Plugins::act_id( 'init_theme', $created_theme->plugin_id(), $created_theme ); Plugins::act( 'init_theme_any', $created_theme ); return $created_theme; }
/** * Execute the upgrade action on any pluggable that has a version number change * Update the version number of the pluggable in the database to what is installed */ public function upgrade() { if(DB::is_connected()) { $pluggable_class = get_class($this); $versions = Options::get( 'pluggable_versions' ); if(isset($versions[$pluggable_class])) { $old_version = $versions[$pluggable_class]; if($old_version != $this->get_version()) { Plugins::act_id('upgrade', $this->plugin_id(), $old_version); $versions[$pluggable_class] = $this->get_version(); Options::set( 'pluggable_versions', $versions ); } } else { $versions[$pluggable_class] = $this->get_version(); Options::set( 'pluggable_versions', $versions ); } } }
/** * Returns a named Theme descendant. * If no parameter is supplied, then * load the active theme from the database. * * If no theme option is set, a fatal error is thrown * * @param name ( optional ) override the default theme lookup * @param template_engine ( optional ) specify a template engine * @param theme_dir ( optional ) specify a theme directory **/ public static function create($name = null, $template_engine = null, $theme_dir = null) { static $bound = array(); $hash = md5(serialize(array($name, $template_engine, $theme_dir))); if (isset($bound[$hash])) { return $bound[$hash]; } // If the name is not supplied, load the active theme if (empty($name)) { $themedata = self::get_active(); if (empty($themedata)) { die(_t('Theme not installed.')); } } else { $themedata = self::get_by_name($name); } // If a theme wasn't found by name, create a blank object if (!$themedata) { $themedata = array(); $themedata['name'] = $name; $themedata['version'] = 0; } // If a specific template engine was supplied, use it if (!empty($template_engine)) { $themedata['template_engine'] = $template_engine; } // If a theme directory was supplied, use the directory that was supplied if (!empty($theme_dir)) { $themedata['theme_dir'] = $theme_dir; } // Set the default theme file $themefile = 'theme.php'; if (isset($themedata['info']->class['file']) && (string) $themedata['info']->class['file'] != '') { $themefile = (string) $themedata->xml->class['file']; } // Convert themedata to QueryRecord for legacy purposes // @todo: Potentially break themes by sending an array to the constructor instead of this QueryRecord $themedata = new QueryRecord($themedata); // Deal with parent themes if (isset($themedata->parent)) { // @todo If the parent theme doesn't exist, provide a useful error $parent_data = self::get_by_name($themedata->parent); $parent_themefile = 'theme.php'; if (isset($parent_data['info']->class['file']) && (string) $parent_data['info']->class['file'] != '') { $parent_themefile = (string) $parent_data['info']->class['file']; } include_once $parent_data['theme_dir'] . $parent_themefile; $themedata->parent_theme_dir = Utils::single_array($parent_data['theme_dir']); $themedata->theme_dir = array_merge(Utils::single_array($themedata->theme_dir), $themedata->parent_theme_dir); } $primary_theme_dir = $themedata->theme_dir; $primary_theme_dir = is_array($primary_theme_dir) ? reset($primary_theme_dir) : $primary_theme_dir; // Include the theme class file if (file_exists($primary_theme_dir . $themefile)) { include_once $primary_theme_dir . $themefile; } if (isset($themedata->class)) { $classname = $themedata->class; } else { $classname = self::class_from_filename($primary_theme_dir . $themefile); } // the final fallback, for the admin "theme" if ($classname == '') { $classname = 'Theme'; } $created_theme = new $classname($themedata); $created_theme->upgrade(); Plugins::act_id('init_theme', $created_theme->plugin_id(), $created_theme); Plugins::act('init_theme_any', $created_theme); $bound[$hash] = $created_theme; return $created_theme; }
<?php } ?> </div> <div class="pluginhelp"<?php if ($helpaction == '_help') { ?> class="active"<?php } ?> > <?php if (Plugins::is_loaded((string) $plugin['info']->name)) { Plugins::act_id('plugin_ui', $plugin['plugin_id'], $plugin['plugin_id'], '_help'); } elseif (isset($plugin['info']->help)) { foreach ($plugin['info']->help as $help) { if ((string) $help['name'] == '') { echo '<div class="help">' . $help->value . '</div>'; } } } ?> </div> <?php if (isset($this->engine_vars['configure']) && $configure == $plugin['plugin_id']) { ?> <div id="pluginconfigure"> <?php
/** * Returns a named Theme descendant. * If no parameter is supplied, then * load the active theme from the database. * * If no theme option is set, a fatal error is thrown * * @param name ( optional ) override the default theme lookup * @param template_engine ( optional ) specify a template engine * @param theme_dir ( optional ) specify a theme directory **/ public static function create($name = '', $template_engine = '', $theme_dir = '') { if ($name != '') { /* * A theme name ( or more information ) was supplied. This happens when we * want to use a pre-installed theme ( for instance, the * installer theme. ) */ if ($template_engine != '') { /* we load template engine from specified args, not DB */ $themedata = new QueryRecord(); $themedata->name = func_get_arg(0); $themedata->template_engine = $template_engine; $themedata->theme_dir = $themedata->name; $themedata->version = 0; if ($theme_dir != '') { $themedata->theme_dir = $theme_dir; } else { $themedata->theme_dir = HABARI_PATH . '/user/themes/' . $themedata->theme_dir . '/'; } } else { /* lookup in DB for template engine info. */ $themedata = self::get_by_name($name); if (empty($themedata)) { die(_t('Theme not installed.')); } $themedata->theme_dir = HABARI_PATH . '/user/themes/' . $themedata->theme_dir . '/'; } } else { // Grab the theme from the database $themedata = self::get_active(); if (empty($themedata)) { die(_t('Theme not installed.')); } } // Set the default theme file $themefile = 'theme.php'; if (isset($themedata->class['file']) && (string) $themedata->xml->class['file'] != '') { $themefile = (string) $themedata->xml->class['file']; } if (file_exists($themedata->theme_dir . $themefile)) { include_once $themedata->theme_dir . $themefile; } if (isset($themedata->class)) { $classname = $themedata->class; } else { $classname = self::class_from_filename($themedata->theme_dir . $themefile); } // the final fallback, for the admin "theme" if ($classname == '') { $classname = 'Theme'; } $created_theme = new $classname($themedata); $created_theme->upgrade(); Plugins::act_id('init_theme', $created_theme->plugin_id(), $created_theme); Plugins::act('init_theme_any', $created_theme); return $created_theme; }
/** * Execute the upgrade action on any pluggable that has a version number change * Update the version number of the pluggable in the database to what is installed */ public function upgrade() { // This call to Options::get() is suppressed because if the database options table isn't created, it fails. if (DB::is_connected() && @Options::get('installed')) { $pluggable_class = get_class($this); $versions = Options::get('pluggable_versions'); if (isset($versions[$pluggable_class])) { $old_version = $versions[$pluggable_class]; if ($old_version != $this->get_version()) { Plugins::act_id('upgrade', $this->plugin_id(), $old_version); $versions[$pluggable_class] = $this->get_version(); Options::set('pluggable_versions', $versions); } } else { $versions[$pluggable_class] = $this->get_version(); Options::set('pluggable_versions', $versions); } } }