static function site($menu, $theme) { if (file_exists(MODPATH . "gallery/controllers/scaffold.php") && user::active()->admin) { $menu->append($scaffold_menu = Menu::factory("submenu")->id("scaffold")->label("Scaffold")); $scaffold_menu->append(Menu::factory("link")->id("scaffold_home")->label("Dashboard")->url(url::site("scaffold"))); } $menu->append(Menu::factory("link")->id("home")->label(t("Home"))->url(url::site("albums/1"))); $item = $theme->item(); if (user::active()->admin || $item && access::can("edit", $item)) { $menu->append($options_menu = Menu::factory("submenu")->id("options_menu")->label(t("Options"))); if ($item && access::can("edit", $item)) { $options_menu->append(Menu::factory("dialog")->id("edit_item")->label($item->is_album() ? t("Edit album") : t("Edit photo"))->url(url::site("form/edit/{$item->type}s/{$item->id}"))); // @todo Move album options menu to the album quick edit pane // @todo Create resized item quick edit pane menu if ($item->is_album()) { $options_menu->append(Menu::factory("dialog")->id("add_item")->label(t("Add a photo"))->url(url::site("simple_uploader/app/{$item->id}")))->append(Menu::factory("dialog")->id("add_album")->label(t("Add an album"))->url(url::site("form/add/albums/{$item->id}?type=album")))->append(Menu::factory("dialog")->id("edit_permissions")->label(t("Edit permissions"))->url(url::site("permissions/browse/{$item->id}"))); } } } if (user::active()->admin) { $menu->append($admin_menu = Menu::factory("submenu")->id("admin_menu")->label(t("Admin"))); self::admin($admin_menu, $theme); foreach (module::active() as $module) { if ($module->name == "gallery") { continue; } $class = "{$module->name}_menu"; if (method_exists($class, "admin")) { call_user_func_array(array($class, "admin"), array(&$admin_menu, $theme)); } } } }
private function _reset() { $db = Database::instance(); // Drop all tables foreach ($db->list_tables() as $table) { $db->query("DROP TABLE IF EXISTS `{$table}`"); } // Clean out data dir::unlink(VARPATH . "uploads"); dir::unlink(VARPATH . "albums"); dir::unlink(VARPATH . "resizes"); dir::unlink(VARPATH . "thumbs"); dir::unlink(VARPATH . "modules"); dir::unlink(VARPATH . "tmp"); $db->clear_cache(); module::$modules = array(); module::$active = array(); // Use a known random seed so that subsequent packaging runs will reuse the same random // numbers, keeping our install.sql file more stable. srand(0); gallery_installer::install(true); module::load_modules(); foreach (array("user", "comment", "organize", "info", "rss", "search", "slideshow", "tag") as $module_name) { module::install($module_name); module::activate($module_name); } }
static function get_quick_buttons($item, $page_type) { $buttons = self::buttons($item, $page_type); foreach (module::active() as $module) { if ($module->name == "gallery") { continue; } $class_name = "{$module->name}_quick"; if (method_exists($class_name, "buttons")) { $module_buttons = call_user_func(array($class_name, "buttons"), $item, $page_type); foreach (array("left", "center", "right", "additional") as $position) { if (!empty($module_buttons[$position])) { $buttons[$position] = array_merge($buttons[$position], $module_buttons[$position]); } } } } $sorted_buttons->main = array(); foreach (array("left", "center", "right") as $position) { $sorted_buttons->main = array_merge($sorted_buttons->main, $buttons[$position]); } $sorted_buttons->additional = $buttons["additional"]; $max_display = empty($sorted_buttons->additional) ? 6 : 5; if (count($sorted_buttons->main) >= $max_display) { $to_move = array_slice($sorted_buttons->main, 5); $sorted_buttons->additional = array_merge($to_move, $sorted_buttons->additional); for ($i = count($sorted_buttons->main); $i >= 5; $i--) { unset($sorted_buttons->main[$i]); } } return $sorted_buttons; }
/** * Handle all theme functions that insert module content. */ public function __call($function, $args) { switch ($function) { case "admin_credits": case "admin_footer": case "admin_header_top": case "admin_header_bottom": case "admin_page_bottom": case "admin_page_top": case "admin_head": case "body_attributes": $blocks = array(); foreach (module::active() as $module) { $helper_class = "{$module->name}_theme"; if (method_exists($helper_class, $function)) { $blocks[] = call_user_func_array(array($helper_class, $function), array_merge(array($this), $args)); } } if ($function == "admin_head") { array_unshift($blocks, $this->combine_files($this->css, "css")); array_unshift($blocks, $this->combine_files($this->scripts, "javascript")); } if (Session::instance()->get("debug")) { if ($function != "admin_head") { array_unshift($blocks, "<div class=\"g-annotated-theme-block g-annotated-theme-block_{$function}\">" . "<div class=\"title\">{$function}</div>"); $blocks[] = "</div>"; } } return implode("\n", $blocks); default: throw new Exception("@todo UNKNOWN_THEME_FUNCTION: {$function}"); } }
static function process_feed($feed, $offset, $limit, $id) { foreach (module::active() as $module) { $class_name = "{$module->name}_rss"; if (method_exists($class_name, $feed)) { return call_user_func(array($class_name, $feed), $offset, $limit, $id); } } }
static function get($request) { $results = array(); foreach (module::active() as $module) { foreach (glob(MODPATH . "{$module->name}/helpers/*_rest.php") as $filename) { $results[] = str_replace("_rest.php", "", basename($filename)); } } return array_unique($results); }
/** * Get all available tasks */ static function get_definitions() { $tasks = array(); foreach (module::active() as $module) { $class_name = "{$module->name}_task"; if (method_exists($class_name, "available_tasks")) { foreach (call_user_func(array($class_name, "available_tasks")) as $task) { $tasks[$task->callback] = $task; } } } return $tasks; }
static function get_available() { $blocks = array(); foreach (module::active() as $module) { $class_name = "{$module->name}_block"; if (method_exists($class_name, "get_list")) { foreach (call_user_func(array($class_name, "get_list")) as $id => $title) { $blocks["{$module->name}:{$id}"] = $title; } } } return $blocks; }
private static function _get_blocks($function) { $blocks = array(); foreach (module::active() as $module) { $class_name = "{$module->name}_block"; if (method_exists($class_name, $function)) { foreach (call_user_func(array($class_name, $function)) as $id => $title) { $blocks["{$module->name}:{$id}"] = $title; } } } return $blocks; }
static function update($item) { $data = array(); $record = ORM::factory("search_record")->where("item_id", $item->id)->find(); if (!$record->loaded) { $record->item_id = $item->id; } foreach (module::active() as $module) { $class_name = "{$module->name}_search"; if (method_exists($class_name, "item_index_data")) { $data[] = call_user_func(array($class_name, "item_index_data"), $record->item()); } } $record->data = join(" ", $data); $record->dirty = 0; $record->save(); }
static function sidebar_blocks($theme) { $block = new Block(); $block->css_id = "gRss"; $block->title = t("Available RSS Feeds"); $block->content = new View("rss_block.html"); $block->content->feeds = array(); foreach (module::active() as $module) { $class_name = "{$module->name}_rss"; if (method_exists($class_name, "available_feeds")) { $block->content->feeds = array_merge( $block->content->feeds, call_user_func(array($class_name, "available_feeds"), $theme->item(), $theme->tag())); } } if ($block->content->feeds) { return $block; } }
static function site($menu, $theme) { $is_admin = user::active()->admin; $menu->append(Menu::factory("link")->id("home")->label(t("Home"))->url(url::site("albums/1"))); $item = $theme->item(); $can_edit = $item && access::can("edit", $item) || $is_admin; $can_add = $item && (access::can("add", $item) || $is_admin); if ($can_add) { $menu->append(Menu::factory("dialog")->id("add_photos_item")->label(t("Add photos"))->url(url::site("simple_uploader/app/{$item->id}"))); } if ($item && $can_edit || $can_add) { $menu->append($options_menu = Menu::factory("submenu")->id("options_menu")->label(t("Options"))); if ($can_edit) { $options_menu->append(Menu::factory("dialog")->id("edit_item")->label($item->is_album() ? t("Edit album") : t("Edit photo"))->url(url::site("form/edit/{$item->type}s/{$item->id}"))); } // @todo Move album options menu to the album quick edit pane if ($item->is_album()) { if ($can_add) { $options_menu->append(Menu::factory("dialog")->id("add_album")->label(t("Add an album"))->url(url::site("form/add/albums/{$item->id}?type=album"))); } if ($can_edit) { $options_menu->append(Menu::factory("dialog")->id("edit_permissions")->label(t("Edit permissions"))->url(url::site("permissions/browse/{$item->id}"))); } } } if ($is_admin) { $menu->append($admin_menu = Menu::factory("submenu")->id("admin_menu")->label(t("Admin"))); self::admin($admin_menu, $theme); foreach (module::active() as $module) { if ($module->name == "gallery") { continue; } $class = "{$module->name}_menu"; if (method_exists($class, "admin")) { call_user_func_array(array($class, "admin"), array(&$admin_menu, $theme)); } } } }
static function get($block_id, $theme) { $block = ""; switch ($block_id) { case "rss_feeds": $feeds = array(); foreach (module::active() as $module) { $class_name = "{$module->name}_rss"; if (method_exists($class_name, "available_feeds")) { $feeds = array_merge($feeds, call_user_func(array($class_name, "available_feeds"), $theme->item(), $theme->tag())); } } if (!empty($feeds)) { $block = new Block(); $block->css_id = "g-rss"; $block->title = t("Available RSS feeds"); $block->content = new View("rss_block.html"); $block->content->feeds = $feeds; } break; } return $block; }
function index() { if (!TEST_MODE) { throw new Kohana_404_Exception(); } // Force strict behavior to flush out bugs early ini_set("display_errors", true); error_reporting(-1); // Jump through some hoops to satisfy the way that we check for the site_domain in // config.php. We structure this such that the code in config will leave us with a // site_domain of "." (for historical reasons) // @todo: for tests, we should force the site_domain to something like example.com $_SERVER["SCRIPT_FILENAME"] = "index.php"; $_SERVER["SCRIPT_NAME"] = "./index.php"; $config = Kohana_Config::instance(); $original_config = DOCROOT . "var/database.php"; $test_config = VARPATH . "database.php"; if (!file_exists($original_config)) { print "Please copy kohana/config/database.php to {$original_config}.\n"; return; } else { copy($original_config, $test_config); $db_config = Kohana::config('database'); if (empty($db_config['unit_test'])) { $default = $db_config['default']; $conn = $default['connection']; $config->set('database.unit_test.benchmark', $default['benchmark']); $config->set('database.unit_test.persistent', $default['persistent']); $config->set('database.unit_test.connection.type', $conn['type']); $config->set('database.unit_test.connection.user', $conn['user']); $config->set('database.unit_test.connection.pass', $conn['pass']); $config->set('database.unit_test.connection.host', $conn['host']); $config->set('database.unit_test.connection.port', $conn['port']); $config->set('database.unit_test.connection.socket', $conn['socket']); $config->set('database.unit_test.connection.database', "{$conn['database']}_test"); $config->set('database.unit_test.character_set', $default['character_set']); $config->set('database.unit_test.table_prefix', $default['table_prefix']); $config->set('database.unit_test.object', $default['object']); $config->set('database.unit_test.cache', $default['cache']); $config->set('database.unit_test.escape', $default['escape']); $db_config = Kohana::config('database'); } if ($db_config['default']['connection']['database'] == $db_config['unit_test']['connection']['database']) { print "Don't use the default database for your unit tests or you'll lose all your data.\n"; return; } try { $db = Database::instance('unit_test'); $db->connect(); // Make this the default database for the rest of this run Database::set_default_instance($db); } catch (Exception $e) { print "{$e->getMessage()}\n"; return; } } try { // Clean out the database if ($tables = $db->list_tables()) { foreach ($db->list_tables() as $table) { $db->query("DROP TABLE {{$table}}"); } } // Clean out the filesystem. Note that this cleans out test/var/database.php, but that's ok // because we technically don't need it anymore. If this is confusing, we could always // arrange to preserve that one file. @system("rm -rf test/var"); @mkdir('test/var/logs', 0777, true); $active_modules = module::$active; // Reset our caches module::$modules = array(); module::$active = array(); module::$var_cache = array(); $db->clear_cache(); // Rest the cascading class path $config->set("core", $config->load("core")); // Install the active modules // Force gallery and user to be installed first to resolve dependencies. gallery_installer::install(true); module::load_modules(); module::install("user"); module::activate("user"); $modules = $paths = array(); foreach (module::available() as $module_name => $unused) { if (in_array($module_name, array("gallery", "user"))) { $paths[] = MODPATH . "{$module_name}/tests"; continue; } if (file_exists($path = MODPATH . "{$module_name}/tests")) { $paths[] = $path; module::install($module_name); module::activate($module_name); } } $config->set('unit_test.paths', $paths); // Trigger late-binding install actions (defined in gallery_event::user_login) graphics::choose_default_toolkit(); $filter = count($_SERVER["argv"]) > 2 ? $_SERVER["argv"][2] : null; print new Unit_Test($modules, $filter); } catch (ORM_Validation_Exception $e) { print "Validation Exception: {$e->getMessage()}\n"; print $e->getTraceAsString() . "\n"; foreach ($e->validation->errors() as $field => $msg) { print "{$field}: {$msg}\n"; } } catch (Exception $e) { print "Exception: {$e->getMessage()}\n"; print $e->getTraceAsString() . "\n"; } }
/** * Handle all theme functions that insert module content. */ public function __call($function, $args) { switch ($function) { case "album_blocks": case "album_bottom": case "album_top": case "credits": case "dynamic_bottom": case "dynamic_top": case "footer": case "head": case "header_bottom": case "header_top": case "page_bottom": case "page_top": case "photo_blocks": case "photo_bottom": case "photo_top": case "resize_bottom": case "resize_top": case "sidebar_blocks": case "sidebar_bottom": case "sidebar_top": case "thumb_bottom": case "thumb_info": case "thumb_top": $blocks = array(); foreach (module::active() as $module) { $helper_class = "{$module->name}_theme"; if (method_exists($helper_class, $function)) { $blocks[] = call_user_func_array(array($helper_class, $function), array_merge(array($this), $args)); } } if (Session::instance()->get("debug")) { if ($function != "head") { array_unshift($blocks, "<div class=\"gAnnotatedThemeBlock gAnnotatedThemeBlock_{$function} gClearFix\">" . "<div class=\"title\">{$function}</div>"); $blocks[] = "</div>"; } } return implode("\n", $blocks); default: throw new Exception("@todo UNKNOWN_THEME_FUNCTION: {$function}"); } }
static function relationships($resource_type, $resource) { $results = array(); foreach (module::active() as $module) { foreach (glob(MODPATH . "{$module->name}/helpers/*_rest.php") as $filename) { $class = str_replace(".php", "", basename($filename)); if (method_exists($class, "relationships")) { if ($tmp = call_user_func(array($class, "relationships"), $resource_type, $resource)) { $results = array_merge($results, $tmp); } } } } return $results; }
public function package() { $this->auto_render = false; $db = Database::instance(); // Drop all tables foreach ($db->list_tables() as $table) { $db->query("DROP TABLE IF EXISTS `{$table}`"); } // Clean out data dir::unlink(VARPATH . "uploads"); dir::unlink(VARPATH . "albums"); dir::unlink(VARPATH . "resizes"); dir::unlink(VARPATH . "thumbs"); dir::unlink(VARPATH . "modules"); dir::unlink(VARPATH . "tmp"); $db->clear_cache(); module::$modules = array(); module::$active = array(); // Use a known random seed so that subsequent packaging runs will reuse the same random // numbers, keeping our install.sql file more stable. srand(0); try { gallery_installer::install(true); module::load_modules(); foreach (array("user", "comment", "organize", "info", "rss", "search", "slideshow", "tag") as $module_name) { module::install($module_name); module::activate($module_name); } } catch (Exception $e) { Kohana::log("error", $e->getTraceAsString()); print $e->getTrace(); throw $e; } url::redirect("scaffold/dump_database"); }
/** * Handle all theme functions that insert module content. */ public function __call($function, $args) { switch ($function) { case "admin_credits": case "admin_footer": case "admin_header_top": case "admin_header_bottom": case "admin_page_bottom": case "admin_page_top": case "admin_head": case "body_attributes": case "html_attributes": $blocks = array(); if (method_exists("gallery_theme", $function)) { switch (count($args)) { case 0: $blocks[] = gallery_theme::$function($this); break; case 1: $blocks[] = gallery_theme::$function($this, $args[0]); break; case 2: $blocks[] = gallery_theme::$function($this, $args[0], $args[1]); break; default: $blocks[] = call_user_func_array(array("gallery_theme", $function), array_merge(array($this), $args)); } } foreach (module::active() as $module) { if ($module->name == "gallery") { continue; } $helper_class = "{$module->name}_theme"; if (class_exists($helper_class) && method_exists($helper_class, $function)) { $blocks[] = call_user_func_array(array($helper_class, $function), array_merge(array($this), $args)); } } $helper_class = theme::$admin_theme_name . "_theme"; if (class_exists($helper_class) && method_exists($helper_class, $function)) { $blocks[] = call_user_func_array(array($helper_class, $function), array_merge(array($this), $args)); } if (Session::instance()->get("debug")) { if ($function != "admin_head" && $function != "body_attributes") { array_unshift($blocks, "<div class=\"g-annotated-theme-block g-annotated-theme-block_{$function} g-clear-fix\">" . "<div class=\"title\">{$function}</div>"); $blocks[] = "</div>"; } } return implode("\n", $blocks); default: throw new Exception("@todo UNKNOWN_THEME_FUNCTION: {$function}"); } }
function Index() { if (!TEST_MODE) { print Kohana::show_404(); } $original_config = DOCROOT . "var/database.php"; $test_config = VARPATH . "database.php"; if (!file_exists($original_config)) { print "Please copy kohana/config/database.php to {$original_config}.\n"; return; } else { copy($original_config, $test_config); $db_config = Kohana::config('database'); if (empty($db_config['unit_test'])) { $default = $db_config['default']; $conn = $default['connection']; Kohana::config_set('database.unit_test.benchmark', $default['benchmark']); Kohana::config_set('database.unit_test.persistent', $default['persistent']); Kohana::config_set('database.unit_test.connection.type', $conn['type']); Kohana::config_set('database.unit_test.connection.user', $conn['user']); Kohana::config_set('database.unit_test.connection.pass', $conn['pass']); Kohana::config_set('database.unit_test.connection.host', $conn['host']); Kohana::config_set('database.unit_test.connection.port', $conn['port']); Kohana::config_set('database.unit_test.connection.socket', $conn['socket']); Kohana::config_set('database.unit_test.connection.database', "{$conn['database']}_test"); Kohana::config_set('database.unit_test.character_set', $default['character_set']); Kohana::config_set('database.unit_test.table_prefix', $default['table_prefix']); Kohana::config_set('database.unit_test.object', $default['object']); Kohana::config_set('database.unit_test.cache', $default['cache']); Kohana::config_set('database.unit_test.escape', $default['escape']); $db_config = Kohana::config('database'); } if ($db_config['default']['connection']['database'] == $db_config['unit_test']['connection']['database']) { print "Don't use the default database for your unit tests or you'll lose all your data.\n"; return; } try { $db = Database::instance('unit_test'); $db->connect(); // Make this the default database for the rest of this run Database::$instances = array('default' => $db); } catch (Exception $e) { print "{$e->getMessage()}\n"; return; } } // Find all tests, excluding sample tests that come with the unit_test module. foreach (glob(MODPATH . "*/tests") as $path) { if ($path != MODPATH . "unit_test/tests") { $paths[] = $path; } } Kohana::config_set('unit_test.paths', $paths); // Clean out the database if ($tables = $db->list_tables()) { foreach ($db->list_tables() as $table) { $db->query("DROP TABLE {$table}"); } } // Clean out the filesystem @system("rm -rf test/var"); @mkdir('test/var/logs', 0777, true); // Reset our caches module::$modules = array(); module::$active = array(); module::$var_cache = array(); $db->clear_cache(); // Install all modules // Force gallery and user to be installed first to resolve dependencies. gallery_installer::install(true); module::load_modules(); module::install("user"); module::activate("user"); $modules = array(); foreach (glob(MODPATH . "*/helpers/*_installer.php") as $file) { $module_name = basename(dirname(dirname($file))); if (in_array($module_name, array("gallery", "user"))) { continue; } module::install($module_name); module::activate($module_name); } $filter = count($_SERVER["argv"]) > 2 ? $_SERVER["argv"][2] : null; print new Unit_Test($modules, $filter); }
function Index() { if (!TEST_MODE) { print Kohana::show_404(); } // Jump through some hoops to satisfy the way that we check for the site_domain in // config.php. We structure this such that the code in config will leave us with a // site_domain of "." (for historical reasons) // @todo: for tests, we should force the site_domain to something like example.com $_SERVER["SCRIPT_FILENAME"] = "index.php"; $_SERVER["SCRIPT_NAME"] = "./index.php"; $original_config = DOCROOT . "var/database.php"; $test_config = VARPATH . "database.php"; if (!file_exists($original_config)) { print "Please copy kohana/config/database.php to {$original_config}.\n"; return; } else { copy($original_config, $test_config); $db_config = Kohana::config('database'); if (empty($db_config['unit_test'])) { $default = $db_config['default']; $conn = $default['connection']; Kohana::config_set('database.unit_test.benchmark', $default['benchmark']); Kohana::config_set('database.unit_test.persistent', $default['persistent']); Kohana::config_set('database.unit_test.connection.type', $conn['type']); Kohana::config_set('database.unit_test.connection.user', $conn['user']); Kohana::config_set('database.unit_test.connection.pass', $conn['pass']); Kohana::config_set('database.unit_test.connection.host', $conn['host']); Kohana::config_set('database.unit_test.connection.port', $conn['port']); Kohana::config_set('database.unit_test.connection.socket', $conn['socket']); Kohana::config_set('database.unit_test.connection.database', "{$conn['database']}_test"); Kohana::config_set('database.unit_test.character_set', $default['character_set']); Kohana::config_set('database.unit_test.table_prefix', $default['table_prefix']); Kohana::config_set('database.unit_test.object', $default['object']); Kohana::config_set('database.unit_test.cache', $default['cache']); Kohana::config_set('database.unit_test.escape', $default['escape']); $db_config = Kohana::config('database'); } if ($db_config['default']['connection']['database'] == $db_config['unit_test']['connection']['database']) { print "Don't use the default database for your unit tests or you'll lose all your data.\n"; return; } try { $db = Database::instance('unit_test'); $db->connect(); // Make this the default database for the rest of this run Database::$instances = array('default' => $db); } catch (Exception $e) { print "{$e->getMessage()}\n"; return; } } try { // Find all tests, excluding sample tests that come with the unit_test module. foreach (glob(MODPATH . "*/tests") as $path) { if ($path != MODPATH . "unit_test/tests") { $paths[] = $path; } } Kohana::config_set('unit_test.paths', $paths); // Clean out the database if ($tables = $db->list_tables()) { foreach ($db->list_tables() as $table) { $db->query("DROP TABLE {$table}"); } } // Clean out the filesystem @system("rm -rf test/var"); @mkdir('test/var/logs', 0777, true); // Reset our caches module::$modules = array(); module::$active = array(); module::$var_cache = array(); $db->clear_cache(); // Rest the cascading class path Kohana::config_set("core", Kohana::config_load("core")); // Install all modules // Force gallery and user to be installed first to resolve dependencies. gallery_installer::install(true); module::load_modules(); module::install("user"); module::activate("user"); $modules = array(); foreach (glob(MODPATH . "*/helpers/*_installer.php") as $file) { $module_name = basename(dirname(dirname($file))); if (in_array($module_name, array("gallery", "user"))) { continue; } module::install($module_name); module::activate($module_name); } // Trigger late-binding install actions (defined in gallery_event::user_login) graphics::choose_default_toolkit(); $filter = count($_SERVER["argv"]) > 2 ? $_SERVER["argv"][2] : null; print new Unit_Test($modules, $filter); } catch (Exception $e) { print "Exception: {$e->getMessage()}\n"; print $e->getTraceAsString() . "\n"; } }
/** * Handle all theme functions that insert module content. */ public function __call($function, $args) { switch ($function) { case "album_blocks": case "album_bottom": case "album_top": case "body_attributes": case "credits": case "dynamic_bottom": case "dynamic_top": case "footer": case "head": case "header_bottom": case "header_top": case "page_bottom": case "page_top": case "photo_blocks": case "photo_bottom": case "photo_top": case "resize_bottom": case "resize_top": case "sidebar_blocks": case "sidebar_bottom": case "sidebar_top": case "thumb_bottom": case "thumb_info": case "thumb_top": $blocks = array(); if (method_exists("gallery_theme", $function)) { switch (count($args)) { case 0: $blocks[] = gallery_theme::$function($this); break; case 1: $blocks[] = gallery_theme::$function($this, $args[0]); break; case 2: $blocks[] = gallery_theme::$function($this, $args[0], $args[1]); break; default: $blocks[] = call_user_func_array(array("gallery_theme", $function), array_merge(array($this), $args)); } } foreach (module::active() as $module) { if ($module->name == "gallery") { continue; } $helper_class = "{$module->name}_theme"; if (method_exists($helper_class, $function)) { $blocks[] = call_user_func_array(array($helper_class, $function), array_merge(array($this), $args)); } } if ($function == "head") { array_unshift($blocks, $this->combine_files($this->css, "css")); array_unshift($blocks, $this->combine_files($this->scripts, "javascript")); } if (Session::instance()->get("debug")) { if ($function != "head") { array_unshift($blocks, "<div class=\"gAnnotatedThemeBlock gAnnotatedThemeBlock_{$function} gClearFix\">" . "<div class=\"title\">{$function}</div>"); $blocks[] = "</div>"; } } return implode("\n", $blocks); default: throw new Exception("@todo UNKNOWN_THEME_FUNCTION: {$function}"); } }
</thead> <tbody align="left" valign="middle"> <?php foreach ($modules as $module => $version) { ?> <tr> <td><?php echo html::anchor('admin/' . $module, $module); ?> </td> <td> <?php if (module::installed($module)) { ?> <?php if (module::active($module)) { ?> <?php echo html::anchor('admin/modules/status/' . $module . '/off', __('disable')); ?> <?php } else { ?> <?php echo html::anchor('admin/modules/status/' . $module . '/on', __('enable')); ?> <?php } ?> <?php } else {