From: <nk...@us...> - 2014-09-14 21:47:12
|
Revision: 52511 http://sourceforge.net/p/tikiwiki/code/52511 Author: nkoth Date: 2014-09-14 21:47:05 +0000 (Sun, 14 Sep 2014) Log Message: ----------- [NEW] Tiki Addons: a way to add a package of tpl, profiles, prefs, and libs as an addon to Tiki. (profiles part still being worked on) Modified Paths: -------------- trunk/admin/include_features.php trunk/lib/csslib.php trunk/lib/init/initlib.php trunk/lib/init/smarty.php trunk/lib/prefslib.php trunk/templates/admin/include_features.tpl trunk/templates/tiki-admin.tpl trunk/tiki-admin.php trunk/tiki-setup_base.php Added Paths: ----------- trunk/addons/ trunk/addons/index.php trunk/addons/tikisample_helloworld/ trunk/addons/tikisample_helloworld/lib/ trunk/addons/tikisample_helloworld/lib/HelloWorld.php trunk/addons/tikisample_helloworld/lib/libs.xml trunk/addons/tikisample_helloworld/prefs/ trunk/addons/tikisample_helloworld/prefs/ta_tikisample_helloworld.php trunk/addons/tikisample_helloworld/profiles/ trunk/addons/tikisample_helloworld/templates/ trunk/addons/tikisample_helloworld/templates/admin/ trunk/addons/tikisample_helloworld/templates/admin/include_ta_tikisample_helloworld.tpl trunk/addons/tikisample_helloworld/templates/tikisample-helloworld.tpl trunk/addons/tikisample_helloworld/tikiaddon.json trunk/addons/tikisample_helloworld/views/ trunk/addons/tikisample_helloworld/views/helloworld.php trunk/lib/core/TikiAddons/ trunk/lib/core/TikiAddons/Addon.php trunk/lib/core/TikiAddons/Utilities.php trunk/lib/core/TikiAddons.php trunk/lib/wiki-plugins/wikiplugin_addon.php Added: trunk/addons/index.php =================================================================== --- trunk/addons/index.php (rev 0) +++ trunk/addons/index.php 2014-09-14 21:47:05 UTC (rev 52511) @@ -0,0 +1,10 @@ +<?php +// (c) Copyright 2002-2013 by authors of the Tiki Wiki CMS Groupware Project +// +// All Rights Reserved. See copyright.txt for details and a complete list of authors. +// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. +// $Id: index.php 51571 2014-06-03 14:36:41Z chibaguy $ + +// This redirects to the sites root to prevent directory browsing +header("location: ../tiki-index.php"); +die; Added: trunk/addons/tikisample_helloworld/lib/HelloWorld.php =================================================================== --- trunk/addons/tikisample_helloworld/lib/HelloWorld.php (rev 0) +++ trunk/addons/tikisample_helloworld/lib/HelloWorld.php 2014-09-14 21:47:05 UTC (rev 52511) @@ -0,0 +1,18 @@ +<?php + +namespace tikiaddon\tikisample\helloworld; + +class Foo +{ + private $message = ''; + + function __construct() + { + $this->message = "Hello World!"; + } + + function hello() + { + return $this->message; + } +} Added: trunk/addons/tikisample_helloworld/lib/libs.xml =================================================================== --- trunk/addons/tikisample_helloworld/lib/libs.xml (rev 0) +++ trunk/addons/tikisample_helloworld/lib/libs.xml 2014-09-14 21:47:05 UTC (rev 52511) @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<container xmlns="http://symfony.com/schema/dic/services"> + <services> + <service id="tikiaddon.tikisample.helloworld.foo" class="tikiaddon\tikisample\helloworld\Foo"> + <file>%kernel.root_dir%/addons/tikisample_helloworld/lib/HelloWorld.php</file> + </service> + </services> +</container> Added: trunk/addons/tikisample_helloworld/prefs/ta_tikisample_helloworld.php =================================================================== --- trunk/addons/tikisample_helloworld/prefs/ta_tikisample_helloworld.php (rev 0) +++ trunk/addons/tikisample_helloworld/prefs/ta_tikisample_helloworld.php 2014-09-14 21:47:05 UTC (rev 52511) @@ -0,0 +1,25 @@ +<?php + +// Warning: pref names have a limit of 40 characters +// Please prefix with ta_ (short for tikiaddon) and your package vendor and name + +function prefs_ta_tikisample_helloworld_list() +{ + return array( + 'ta_tikisample_helloworld_on' => array( // This main _on pref is mandatory + 'name' => tra('Activate Tiki Sample Hello World'), + 'description' => tra('Activate Tiki Sample Hello World Addon'), + 'type' => 'flag', + 'admin' => 'ta_tikisample_helloworld', + 'tags' => array('basic'), + 'default' => 'y', + ), + 'ta_tikisample_helloworld_boldtext' => array( + 'name' => tra('Bold Text'), + 'description' => tra('Bold text'), + 'type' => 'flag', + 'tags' => array('basic'), + 'default' => 'y', + ), + ); +} \ No newline at end of file Added: trunk/addons/tikisample_helloworld/templates/admin/include_ta_tikisample_helloworld.tpl =================================================================== --- trunk/addons/tikisample_helloworld/templates/admin/include_ta_tikisample_helloworld.tpl (rev 0) +++ trunk/addons/tikisample_helloworld/templates/admin/include_ta_tikisample_helloworld.tpl 2014-09-14 21:47:05 UTC (rev 52511) @@ -0,0 +1,23 @@ +{remarksbox type="tip" title="{tr}Tip{/tr}"}{tr}Welcome to the Tiki Sample Hello World Addon{/tr}{/remarksbox} +<form action="tiki-admin.php?page=ta_tikisample_helloworld" method="post"> + <div class="row"> + <div class="form-group col-lg-12 clearfix"> + <div class="pull-right"> + <input type="submit" class="btn btn-primary btn-sm" title="{tr}Apply Changes{/tr}" value="{tr}Apply{/tr}"> + </div> + </div> + </div> + {tabset name="admin_ta_tikisample_helloworld"} + {tab name="{tr}Main features{/tr}"} + {preference name=ta_tikisample_helloworld_on} + {preference name=ta_tikisample_helloworld_boldtext} + {/tab} + {/tabset} + <div class="row"> + <div class="form-group col-lg-12 clearfix"> + <div class="text-center"> + <input type="submit" class="btn btn-primary btn-sm" title="{tr}Apply Changes{/tr}" value="{tr}Apply{/tr}"> + </div> + </div> + </div> +</form> \ No newline at end of file Added: trunk/addons/tikisample_helloworld/templates/tikisample-helloworld.tpl =================================================================== --- trunk/addons/tikisample_helloworld/templates/tikisample-helloworld.tpl (rev 0) +++ trunk/addons/tikisample_helloworld/templates/tikisample-helloworld.tpl 2014-09-14 21:47:05 UTC (rev 52511) @@ -0,0 +1,4 @@ +<div> +<h2>Is it working?</h2> +<p>{if $prefs.ta_tikisample_helloworld_boldtext == 'y'}<b>{/if}{$bar|escape}{if $prefs.ta_tikisample_helloworld_boldtext == 'y'}</b>{/if}</p> +</div> Added: trunk/addons/tikisample_helloworld/tikiaddon.json =================================================================== --- trunk/addons/tikisample_helloworld/tikiaddon.json (rev 0) +++ trunk/addons/tikisample_helloworld/tikiaddon.json 2014-09-14 21:47:05 UTC (rev 52511) @@ -0,0 +1,10 @@ +{ + "name": "Hello World", + "package": "tikisample/helloworld", + "version": "0.1", + "url": "http://dev.tiki.org/TikiAddonHelloWorld", + "smarty": true, + "depends": [ + {"package":"tikisample/helloworld", "version":"0+.*"} + ] +} Added: trunk/addons/tikisample_helloworld/views/helloworld.php =================================================================== --- trunk/addons/tikisample_helloworld/views/helloworld.php (rev 0) +++ trunk/addons/tikisample_helloworld/views/helloworld.php 2014-09-14 21:47:05 UTC (rev 52511) @@ -0,0 +1,32 @@ +<?php +// (c) Copyright 2002-2013 by authors of the Tiki Wiki CMS Groupware Project +// +// All Rights Reserved. See copyright.txt for details and a complete list of authors. +// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. +// $Id$ + +namespace tikiaddon\tikisample\helloworld; + +function helloworld($data, $params) +{ + // extracts parameters passed from wikiplugin_addon.php + // Note that $data is the data passed as well + extract($params, EXTR_SKIP); + + $helloworld = \TikiAddons::get('tikisample_helloworld'); + + $foo = $helloworld->lib('foo'); + + // Warning: the following lines use the Tiki global smarty object, + // which is *bad* practice as it can cause variables to be overwritten. + // \TikiLib::lib('smarty')->assign('bar', $foo->hello()); + // $output = \TikiLib::lib('smarty')->fetch('tikisample-helloworld.tpl'); + + // The following is the safer way. + // Also Remember to prefix your template name with vendor- unless you intend to + // overwrite Tiki templates. Note that theme templates take priority over addon templates. + $helloworld->smarty->assign('bar', $foo->hello()); + $output = $helloworld->smarty->fetch('tikisample-helloworld.tpl'); + + return $output; +} Modified: trunk/admin/include_features.php =================================================================== --- trunk/admin/include_features.php 2014-09-13 15:55:39 UTC (rev 52510) +++ trunk/admin/include_features.php 2014-09-14 21:47:05 UTC (rev 52511) @@ -11,5 +11,8 @@ exit; } +$addonprefs = TikiLib::lib('prefs')->getAddonPrefs(); +$smarty->assign('addonprefs', $addonprefs); + $smarty->assign('php_major_version', substr(PHP_VERSION, 0, strpos(PHP_VERSION, '.'))); ask_ticket('admin-inc-features'); Added: trunk/lib/core/TikiAddons/Addon.php =================================================================== --- trunk/lib/core/TikiAddons/Addon.php (rev 0) +++ trunk/lib/core/TikiAddons/Addon.php 2014-09-14 21:47:05 UTC (rev 52511) @@ -0,0 +1,134 @@ +<?php +// (c) Copyright 2002-2013 by authors of the Tiki Wiki CMS Groupware Project +// +// All Rights Reserved. See copyright.txt for details and a complete list of authors. +// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. +// $Id$ + +class TikiAddons_Addon +{ + + private $libraries = array(); + private $configuration = null; + public $smarty = null; + + function __construct($folder) + { + $prefname = 'ta_' . $folder . '_on'; + if (!isset($GLOBALS['prefs'][$prefname]) || $GLOBALS['prefs'][$prefname] != 'y') { + throw new Exception(tra('Addon is not activated: ') . $folder); + } + $file = TIKI_PATH . "/addons/$folder/tikiaddon.json"; + $this->configuration = json_decode(file_get_contents($file)); + $this->checkDependencies(); + if ($this->configuration->smarty) { + $this->smarty = new Smarty; + $this->smarty->addTemplateDir(TIKI_PATH . "/addons/" . $this->getVendor() . "_" . $this->getShortName() . "/templates/"); + $this->smarty->assign('prefs', $GLOBALS['prefs']); + } + } + + function getName() + { + return $this->configuration->name; + } + + function getPackage() + { + return $this->configuration->package; + } + + function getVersion() + { + return $this->configuration->version; + } + + function getURL() + { + return $this->configuration->url; + } + + function getVendor() + { + $parts = explode('/', $this->getPackage()); + return $parts[0]; + } + + function getShortName() + { + $parts = explode('/', $this->getPackage()); + return $parts[1]; + } + + function getDepends() { + if (is_array($this->configuration->depends)) { + return $this->configuration->depends; + } else { + return array(); + } + } + + function getSemanticVersion($version) + { + return explode('.', $version); + } + + function lib($name) + { + if (isset($this->libraries[$name])) { + return $this->libraries[$name]; + } + + $container = TikiInit::getContainer(); + $service = 'tikiaddon.' . $this->getVendor() . '.' . $this->getShortName() . '.' . $name; + + if ($lib = $container->get($service, \Symfony\Component\DependencyInjection\ContainerInterface::NULL_ON_INVALID_REFERENCE)) { + return $lib; + } + + unlink(TIKI_PATH . '/temp/cache/container.php'); // Remove the container cache to help transition + throw new Exception(tr("%0 library not found. It may be a typo or caused by a recent update.", $name)); + } + + private function checkDependencies() { + $installed = array(); + $versions = array(); + foreach (Tikiaddons::getInstalled() as $conf) { + $versions[$conf->package] = $conf->version; + $installed[] = $conf->package; + } + foreach ($this->getDepends() as $depend) { + if (!in_array($depend->package, $installed)) { + throw new Exception($this->getPackage() . tra(' cannot load because it is missing the following dependency: ') . $depend->package); + } + if (!$this->checkVersionMatch($versions[$depend->package], $depend->version)) { + throw new Exception($this->getPackage() . tra(' cannot load because it is missing a required version of a dependency: ') . $depend->package . ' versiom ' . $depend->version); + } + } + return true; + } + + function checkVersionMatch($version, $pattern) { + $semanticVersion = $this->getSemanticVersion($version); + $semanticPattern = $this->getSemanticVersion($pattern); + foreach ($semanticPattern as $k => $v) { + if (!isset($semanticVersion[$k])) { + $semanticVersion[$k] = 0; + } + if (strpos($v, '-') !== false) { + if ((int) $semanticVersion[$k] > (int) str_replace('-', '', $v)) { + return false; + } + } elseif (strpos($v, '+') !== false) { + if ((int) $semanticVersion[$k] < (int) str_replace('+', '', $v)) { + return false; + } + } elseif ($v != '*') { + if ((int) $semanticVersion[$k] !== (int) $v) { + return false; + } + } + } + return true; + } +} \ No newline at end of file Added: trunk/lib/core/TikiAddons/Utilities.php =================================================================== --- trunk/lib/core/TikiAddons/Utilities.php (rev 0) +++ trunk/lib/core/TikiAddons/Utilities.php 2014-09-14 21:47:05 UTC (rev 52511) @@ -0,0 +1,13 @@ +<?php +// (c) Copyright 2002-2013 by authors of the Tiki Wiki CMS Groupware Project +// +// All Rights Reserved. See copyright.txt for details and a complete list of authors. +// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. +// $Id$ + +class TikiAddons_Utilities +{ + + + +} Added: trunk/lib/core/TikiAddons.php =================================================================== --- trunk/lib/core/TikiAddons.php (rev 0) +++ trunk/lib/core/TikiAddons.php 2014-09-14 21:47:05 UTC (rev 52511) @@ -0,0 +1,49 @@ +<?php +// (c) Copyright 2002-2013 by authors of the Tiki Wiki CMS Groupware Project +// +// All Rights Reserved. See copyright.txt for details and a complete list of authors. +// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. +// $Id$ + +abstract class TikiAddons +{ + private static $installed = array(); + private static $paths = array(); + protected static $addons = array(); + + public static function refresh() + { + self::$installed = array(); + self::$paths = array(); + foreach ( glob(TIKI_PATH . '/addons/*/tikiaddon.json') as $file ) { + try { + $conf = json_decode(file_get_contents($file)); + $package = str_replace('_', '/', basename(dirname($file))); + self::$installed[$package] = $conf; + self::$paths[$package] = dirname($file); + } catch (InvalidArgumentException $e) { + // Do nothing, absence of tikiaddon.json + } + } + } + + public static function get($name) + { + if (isset(self::$addons[$name])) { + return self::$addons[$name]; + } + + return new TikiAddons_Addon($name); + } + + public static function getInstalled() + { + return self::$installed; + } + + public static function getPaths() + { + return self::$paths; + } + +} \ No newline at end of file Modified: trunk/lib/csslib.php =================================================================== --- trunk/lib/csslib.php 2014-09-13 15:55:39 UTC (rev 52510) +++ trunk/lib/csslib.php 2014-09-14 21:47:05 UTC (rev 52511) @@ -21,7 +21,15 @@ $available_layouts[$layoutName] = ucfirst($layoutName); } } - + foreach (TikiAddons::getPaths() as $path) { + if (file_exists($path . '/templates/layouts/')) { + foreach (scandir($path . '/templates/layouts/') as $layoutName) { + if ($layoutName[0] != '.' && $layoutName != 'index.php') { + $available_layouts[$layoutName] = ucfirst($layoutName); + } + } + } + } return $available_layouts; } Modified: trunk/lib/init/initlib.php =================================================================== --- trunk/lib/init/initlib.php 2014-09-13 15:55:39 UTC (rev 52510) +++ trunk/lib/init/initlib.php 2014-09-14 21:47:05 UTC (rev 52511) @@ -77,6 +77,14 @@ // Do nothing, absence of custom.xml file is expected } + foreach ( glob( TIKI_PATH . '/addons/*/lib/libs.xml' ) as $file ) { + try { + $loader->load($file); + } catch (InvalidArgumentException $e) { + // Do nothing, absence of libs.xml file is expected + } + } + $container->compile(); $dumper = new PhpDumper($container); Modified: trunk/lib/init/smarty.php =================================================================== --- trunk/lib/init/smarty.php 2014-09-13 15:55:39 UTC (rev 52510) +++ trunk/lib/init/smarty.php 2014-09-14 21:47:05 UTC (rev 52511) @@ -487,6 +487,9 @@ $this->addTemplatedir($this->main_template_dir.'/'.$tikidomain.'/'); } $this->addTemplateDir($this->main_template_dir.'/styles/'.$style_base.'/'); + foreach (TikiAddons::getPaths() as $path) { + $this->addTemplateDir($path . '/templates/'); + } $this->addTemplateDir($this->main_template_dir.'/layouts/'.$prefs['site_layout'].'/'); $this->addTemplateDir($this->main_template_dir.'/layouts/'); $this->addTemplateDir($this->main_template_dir); Modified: trunk/lib/prefslib.php =================================================================== --- trunk/lib/prefslib.php 2014-09-13 15:55:39 UTC (rev 52510) +++ trunk/lib/prefslib.php 2014-09-14 21:47:05 UTC (rev 52511) @@ -409,8 +409,12 @@ private function loadData( $name ) { if (in_array($name, $this->system_modified)) return null; - if ( false !== $pos = strpos($name, '_') ) { + if ( substr($name, 0, 3) == 'ta_' ) { + $midpos = strpos($name, '_', 3); + $pos = strpos($name, '_', $midpos + 1); $file = substr($name, 0, $pos); + } elseif ( false !== $pos = strpos($name, '_') ) { + $file = substr($name, 0, $pos); } else { $file = 'global'; } @@ -439,6 +443,11 @@ private function realLoad($file, $partial) { $inc_file = __DIR__ . "/prefs/{$file}.php"; + if (substr($file, 0, 3) == "ta_") { + $paths = TikiAddons::getPaths(); + $package = str_replace('_', '/', substr($file, 3)); + $inc_file = $paths[$package] . "/prefs/{$file}.php"; + } if (file_exists($inc_file)) { require_once $inc_file; $function = "prefs_{$file}_list"; @@ -809,6 +818,13 @@ continue; $files[] = substr(basename($file), 0, -4); } + foreach (TikiAddons::getPaths() as $path) { + foreach ( glob( $path . '/prefs/*.php') as $file ) { + if (basename($file) === "index.php") + continue; + $files[] = substr(basename($file), 0, -4); + } + } return $files; } @@ -944,5 +960,17 @@ return false; } + + public function getAddonPrefs() + { + global $prefs; + $ret = array(); + foreach (array_keys($prefs) as $prefName) { + if (substr($prefName, 0, 3) == 'ta_' && substr($prefName, -3) == '_on') { + $ret[] = $prefName; + } + } + return $ret; + } } Added: trunk/lib/wiki-plugins/wikiplugin_addon.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_addon.php (rev 0) +++ trunk/lib/wiki-plugins/wikiplugin_addon.php 2014-09-14 21:47:05 UTC (rev 52511) @@ -0,0 +1,66 @@ +<?php +// (c) Copyright 2002-2013 by authors of the Tiki Wiki CMS Groupware Project +// +// All Rights Reserved. See copyright.txt for details and a complete list of authors. +// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. +// $Id$ + +function wikiplugin_addon_info() +{ + return array( + 'name' => tra('Tiki Addon View'), + 'documentation' => 'PluginAddon', + 'description' => tra('Display output of a Tiki Addon View'), + 'prefs' => array('wikiplugin_addon'), + 'validate' => 'all', + 'body' => '', + 'filter' => 'rawhtml_unsafe', + 'tags' => array( 'basic' ), + 'extraparams' => true, + 'params' => array( + 'package' => array( + 'required' => true, + 'name' => tra('Name of package (vendor/name)'), + 'description' => tra('Name of package in the form vendor/name'), + 'filter' => 'text', + ), + 'view' => array( + 'required' => true, + 'name' => tra('Name of the view'), + 'description' => tra('Name of the view file without the .php'), + 'filter' => 'text', + ), + ), + ); +} + +function wikiplugin_addon($data, $params) +{ + if (empty($params['package']) || empty($params['view'])) { + return tra("Please specify the name of the package and the view."); + } + + $extraparams = $params; + + $parts = explode('/', $params['package']); + $path = TIKI_PATH . '/addons/' . $parts[0] . '_' . $parts[1] . '/views/' . $params['view'] . '.php'; + + if (!file_exists($path)) { + return tra("Error: Unable to locate view file for the package."); + } + + require_once($path); + + $functionname = "tikiaddon\\" . $parts[0] . "\\" . $parts[1] . "\\" . $params['view']; + + if (!function_exists($functionname)) { + return tra("Error: Unable to locate function name for the view."); + } + + $prefname = 'ta_' . $parts[0] . '_' . $parts[1] . '_on'; + if (!isset($GLOBALS['prefs'][$prefname]) || $GLOBALS['prefs'][$prefname] != 'y') { + return tra('Addon is not activated: ') . $folder; + } + + return "~np~" . $functionname($data, $params) . "~/np~"; +} Modified: trunk/templates/admin/include_features.tpl =================================================================== --- trunk/templates/admin/include_features.tpl 2014-09-13 15:55:39 UTC (rev 52510) +++ trunk/templates/admin/include_features.tpl 2014-09-14 21:47:05 UTC (rev 52511) @@ -237,7 +237,11 @@ </fieldset> </div> {/tab} - +{tab name="{tr}Addons{/tr}" key=addons} + {foreach $addonprefs as $addon} + {preference name="{$addon|escape}"} + {/foreach} +{/tab} {/tabset} <div class="row"> Modified: trunk/templates/tiki-admin.tpl =================================================================== --- trunk/templates/tiki-admin.tpl 2014-09-13 15:55:39 UTC (rev 52510) +++ trunk/templates/tiki-admin.tpl 2014-09-14 21:47:05 UTC (rev 52511) @@ -36,7 +36,7 @@ "calendar", "intertiki", "video", "freetags", "i18n", "wysiwyg", "copyright", "category", "module", "look", "textarea", "ads", "profiles", "semantic", "plugins", "webservices", -'sefurl', 'connect', 'metrics', 'payment', 'rating', 'socialnetworks', 'share', "workspace"))} +'sefurl', 'connect', 'metrics', 'payment', 'rating', 'socialnetworks', 'share', "workspace")) or isset($addonadmin) and $addonadmin == 'y'} {assign var="include" value=$smarty.get.page} {else} {assign var="include" value="list_sections"} Modified: trunk/tiki-admin.php =================================================================== --- trunk/tiki-admin.php 2014-09-13 15:55:39 UTC (rev 52510) +++ trunk/tiki-admin.php 2014-09-14 21:47:05 UTC (rev 52511) @@ -643,6 +643,9 @@ include_once ("admin/include_$adminPage.php"); $url = 'tiki-admin.php' . '?page=' . $adminPage; } + if (substr($adminPage, 0, 3) == 'ta_') { + $smarty->assign('addonadmin', 'y'); + } if (isset($icons[$adminPage])) { $icon = $icons[$adminPage]; Modified: trunk/tiki-setup_base.php =================================================================== --- trunk/tiki-setup_base.php 2014-09-13 15:55:39 UTC (rev 52510) +++ trunk/tiki-setup_base.php 2014-09-14 21:47:05 UTC (rev 52511) @@ -216,6 +216,10 @@ if (isset($prefs['feature_fullscreen']) && $prefs['feature_fullscreen'] == 'y') { require_once ('lib/setup/fullscreen.php'); } + +// Retrieve Tiki addons +TikiAddons::refresh(); + // Retrieve all preferences require_once ('lib/setup/prefs.php'); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |