> ------------------------------------------------------------------------------ :: HISTORY | release | date | | 1.0.0 | 2010/03/30 | * Update class & function names | | | | 1.1.0 | 2010/03/30 | * add the BBtoHTML function | | | | 1.2.0 | 2010/07/28 | * add the loadConfigFromFile function | | | | 1.3.0 | 2010/10/13 | * add the addHeaderCSS, addHeaderJS functions | | | | 1.3.1 | 2010/10/20 | * applyHeaderItems functions implemented with an | | | higher priority on the 'loc_begin_page_header' event | | | | | | * implement the getUserLanguageDesc() function, using | | | extended description function if present | | | | | | * implement the getPiwigoSystemPath() function | | | | | | * implement the rmDir() function | | | | 1.3.2 | 2011/01/28 | * implement the addUI() function | | | | | | * implement getMinified() & setMinifiedState() functions | | | | 1.3.3 | 2011/02/01 | * fix bug on loadConfig() function | | | | | | * update deleteConfig() function (allow to be used to | | | delete the GPCCore config) | | | | | | * mantis bug:2167 | | | | 1.3.4 | 2011/02/02 | * mantis bug:2170 | | | . File path for RBuilder registered plugins is corrupted | | | | | | * mantis bug:2178 | | | . RBuilder register function don't work | | | | | | * mantis bug:2179 | | | . JS file loaded in wrong order made incompatibility | | | with Lightbox, GMaps & ASE plugins (and probably other) | | | | 1.4.0 | 2011/04/10 | * Updated for piwigo 2.2 | | | | 1.4.1 | 2011/09/19 | * Add [var] and [form_mail] markup interpreter | | | | | 2012/05/25 | * Add GPCUserAgent class | | | | | | * Compatibility with jquery 1.7.2 & jquery-ui 1.8.16 | | | . remove getMinified() & setMinifiedState() functions | | | (let piwigo combined function manage the minified | | | state) | | | . add manually each component for ui functionnalities | | | | | | * Remove google translate connector (google has changed the useage | | | and now an API key is needed) | | | | | | * Add js objects: inputDate, inputFilterBox, inputPages, inputSortBox, inputTag | | | dynamicTable | | | | | | * AddHeaderCSS and AddJS are ignored if called in an ajax session (AJAX_CALL defined) | | | | 1.4.2 | 2012/07/27 | * AddHeaderContent can manage 'raw' content | | | | 1.4.3 | 2012/08/29 | * Add js objects: inputTreeList + inputExportBox + download | | | | | | * Update js objects: inputText (bug fix) | | | | | | * Add urlBuild function | | | | | | | | | ------------------------------------------------------------------------------ no constructor, only static function are provided - static function loadConfig - static function loadConfigFromFile - static function saveConfig - static function deleteConfig - static function getRegistered - static function getModulesInfos - static function register - static function unregister - static function BBtoHTML - static function VarToHTML - static function TabsToHTML - static function FormMailToHTML - static function addHeaderCSS - static function addHeaderJS - static function addUI - static function getUserLanguageDesc - static function getPiwigoSystemPath - static function formatOctet - static function rmDir - static function applyMarkups - static function setTemplateToken - static function addHeaderContent - static function urlBuild ---------------------------------------------------------------------- */ class GPCCore { static private $piwigoSystemPath; static public $pluginName = "GPCCore"; static protected $headerItems = array( 'css' => array(), 'js' => array() ); static public function init() { global $conf; self::$piwigoSystemPath=dirname(dirname(dirname(dirname(__FILE__)))); if((isset($conf['gpc.markup.bb']) && $conf['gpc.markup.bb']) || (isset($conf['gpc.markup.var']) && $conf['gpc.markup.var']) || (isset($conf['gpc.markup.form']) && $conf['gpc.markup.form']) ) { add_event_handler('render_category_name', array('GPCCore', 'applyMarkups'), EVENT_HANDLER_PRIORITY_NEUTRAL+5); add_event_handler('render_category_description', array('GPCCore', 'applyMarkups'), EVENT_HANDLER_PRIORITY_NEUTRAL+5, 2); add_event_handler('render_element_description', array('GPCCore', 'applyMarkups'), EVENT_HANDLER_PRIORITY_NEUTRAL+5); add_event_handler('AP_render_content', array('GPCCore', 'applyMarkups'), EVENT_HANDLER_PRIORITY_NEUTRAL+5); } } /* --------------------------------------------------------------------------- * grum plugin classes informations functions * -------------------------------------------------------------------------*/ static public function getModulesInfos() { return( Array( Array('name' => "CommonPlugin", 'version' => "2.3.0"), Array('name' => "GPCAjax", 'version' => "3.1.0"), Array('name' => "GPCCategorySelector", 'version' => "1.0.1"), Array('name' => "GPCCompress", 'version' => "1.4.0"), Array('name' => "GPCCore", 'version' => "1.4.3"), //Array('name' => "GPCCss", 'version' => "3.1.0"), removed with v1.4.1 Array('name' => "GPCExport", 'version' => "1.0.0"), Array('name' => "GPCPagesNavigation", 'version' => "2.0.0"), Array('name' => "GPCPublicIntegration", 'version' => "2.0.0"), Array('name' => "GPCRequestBuilder", 'version' => "1.1.7"), Array('name' => "GPCTables", 'version' => "1.5.0"), Array('name' => "GPCTabSheet", 'version' => "1.1.2"), //Array('name' => "GPCTranslate", 'version' => "2.1.1"), doesn't exist anymore Array('name' => "GPCUserAgent", 'version' => "1.0.1"), Array('name' => "GPCUsersGroups", 'version' => "2.1.0") ) ); } /* --------------------------------------------------------------------------- * register oriented functions * -------------------------------------------------------------------------*/ /** * register a plugin using GPC * * @param String $pluginName : the plugin name * @param String $release : the plugin version like "2.0.0" * @param String $GPCNeed : the minimal version of GPC needed by the plugin to * work * @return Boolean : true if registering is Ok, otherwise false */ static public function register($plugin, $release, $GPCneeded) { $config=Array(); if(!self::loadConfig(self::$pluginName, $config)) { $config['registered']=array(); } $config['registered'][$plugin]=Array( 'name' => $plugin, 'release' => $release, 'needed' => $GPCneeded, 'date' => date("Y-m-d"), ); return(self::saveConfig(self::$pluginName, $config)); } /** * unregister a plugin using GPC * * assume that if the plugin was not registerd before, unregistering returns * a true value * * @param String $pluginName : the plugin name * @return Boolean : true if registering is Ok, otherwise false */ static public function unregister($plugin) { $config=Array(); if(self::loadConfig(self::$pluginName, $config)) { if(array_key_exists('registered', $config)) { if(array_key_exists($plugin, $config['registered'])) { unset($config['registered'][$plugin]); return(self::saveConfig(self::$pluginName, $config)); } } } // assume if the plugin was not registered before, unregistering it is OK return(true); } /** * return the list of registered plugins * @return Array : list of registered plugins */ static public function getRegistered() { $config=Array(); if(self::loadConfig(self::$pluginName, $config)) { if(array_key_exists('registered', $config)) { return($config['registered']); } } return(Array()); } /* --------------------------------------------------------------------------- * config oriented functions * -------------------------------------------------------------------------*/ /** * load config from CONFIG_TABLE into an array * * @param String $pluginName : the plugin name, must contain only alphanumerical * character * @param Array $config : array, initialized or not with default values ; the * config values are loaded in this value * @return Boolean : true if config is loaded, otherwise false */ static public function loadConfig($pluginName, &$config=Array()) { global $conf; if(!isset($conf[$pluginName.'_config'])) { return(false); } $configValues = unserialize($conf[$pluginName.'_config']); reset($configValues); while (list($key, $val) = each($configValues)) { if(is_array($val)) { foreach($val as $key2 => $val2) { $config[$key][$key2]=$val2; if(isset($conf['plugin.'.$pluginName]) and isset($conf['plugin.'.$pluginName][$key]) and isset($conf['plugin.'.$pluginName][$key][$key2])) $config[$key][$key2]=$conf['plugin.'.$pluginName][$key][$key2]; } } else { $config[$key]=$val; if(isset($conf['plugin.'.$pluginName]) and isset($conf['plugin.'.$pluginName][$key])) $config[$key]=$conf['plugin.'.$pluginName][$key]; } } $conf[$pluginName.'_config']=serialize($config); return(true); } /** * load config from a file into an array * * note : the config file is a PHP file one var $conf used as an array, * like the piwigo $conf var * * @param String $fileName : the file name * @param Array $config : array, initialized or not with default values ; the * config values are loaded in this value * @return Boolean : true if config is loaded, otherwise false */ static public function loadConfigFromFile($fileName, &$config=Array()) { $conf=array(); if(!is_array($config) or !file_exists($fileName)) { return(false); } include_once($fileName); foreach($conf as $key=>$val) { $config[$key]=$val; } return(true); } /** * save var $my_config into CONFIG_TABLE * * @param String $pluginName : the plugin name, must contain only alphanumerical * character * @param Array $config : array of configuration values * @return Boolean : true if config is saved, otherwise false */ static public function saveConfig($pluginName, $config) { global $conf; $sql="REPLACE INTO ".CONFIG_TABLE." VALUES('".$pluginName."_config', '" .pwg_db_real_escape_string(serialize($config))."', '')"; $result=pwg_query($sql); if($result) { $conf[$pluginName.'_config']=serialize($config); return true; } else { return false; } } /** * delete config from CONFIG_TABLE * * @param String $pluginName : the plugin name, must contain only alphanumerical * character ; if empty, assume GPCCore config * @return Boolean : true if config is deleted, otherwise false */ static public function deleteConfig($pluginName='') { if($pluginName=='') $pluginName=self::$pluginName; $sql="DELETE FROM ".CONFIG_TABLE." WHERE param='".$pluginName."_config'"; $result=pwg_query($sql); if($result) { return true; } else { return false; } } /** * convert (light) BB tag to HTML tag * * all BB codes are not recognized, only : * - [ul] [/ul] * - [li] [/li] * - [b] [/b] * - [i] [/i] * - [url] [/url] * - carriage return is replaced by a
* * @param String $text : text to convert * @return String : BB to HTML text */ static public function BBtoHTML($text) { $patterns = Array( '/\[li\](.*?)\[\/li\]\n*/im', '/\[b\](.*?)\[\/b\]/ism', '/\[i\](.*?)\[\/i\]/ism', '/\[p\](.*?)\[\/p\]/ism', '/\[url\]([\w]+?:\/\/[^ \"\n\r\t<]*?)\[\/url\]/ism', '/\[url=([\w]+?:\/\/[^ \"\n\r\t<]*?)\](.*?)\[\/url\]/ism', '/\n{0,1}\[ul\]\n{0,1}/im', '/\n{0,1}\[\/ul\]\n{0,1}/im', '/\n{0,1}\[ol\]\n{0,1}/im', '/\n{0,1}\[\/ol\]\n{0,1}/im', '/\n/im', ); $replacements = Array( '
  • \1
  • ', '\1', '\1', '

    \1

    ', '\1', '\2', '', '
      ', '
    ', '
    ', ); return(preg_replace($patterns, $replacements, $text)); } /** * apply [var] tag * * [var=] * with : * - USER * - GALLERY_TITLE * - NB_PHOTOS * - CATEGORY * - TOKEN * - IP * * @param String $text : text to convert * @return String : processed text */ static public function VarToHTML($text) { global $user, $page, $conf; $patterns = Array( '/\[var=user\]/im', '/\[var=gallery_title\]/im', '/\[var=nb_photos\]/im', '/\[var=category\]/im', '/\[var=token\]/im', '/\[var=ip\]/im' ); $replacements = Array( isset($user['username'])?$user['username']:'', isset($conf['gallery_title'])?$conf['gallery_title']:'', isset($user['nb_total_images'])?$user['nb_total_images']:'', isset($page['category']['name'])?$page['category']['name']:'', get_pwg_token(), $_SERVER['REMOTE_ADDR'] ); return(preg_replace($patterns, $replacements, $text)); } /** * apply [form_mail] tag * * @param String $text : text to convert * @return String : processed text */ static public function FormMailToHTML($text) { global $template; $file=GPCCore::getPiwigoSystemPath().'/'.PWG_LOCAL_DIR.'templates/GPCFormMsg.tpl'; if(!file_exists($file)) $file=dirname(dirname(__FILE__))."/templates/GPCFormMsg.tpl"; $template->set_filename('gpc_form', $file); $template->assign('token', get_pwg_token() ); $patterns = Array( '/\[form_mail\]/im' ); $replacements = Array( $template->parse('gpc_form', true) ); if(preg_match($patterns[0], $text)>0) { GPCCore::addHeaderJS('gpc.markup.formMail', GPC_PATH.'js/markup.formMail.js', array('jquery')); return(preg_replace($patterns, $replacements, $text)); } return($text); } /** * apply [tab], [/tab] and [tabs] tags * * @param String $text : text to convert * @return String : processed text */ static public function TabsToHTML($text) { $result=array(); $tabs=''; if(preg_match_all('/\[tab=([^(;\]).]*)(?:;(default))?;([^\].]*)\]/im', $text, $result, PREG_SET_ORDER)>0) { foreach($result as $val) { $tabs.="
  • ".$val[3]."
  • "; } $tabs="
      ".$tabs."
    "; } else return($text); $patterns = Array( '/\[tabs\]/im', '/\[tab=([^(;\]).]*)(?!;default);.*\]/im', '/\[tab=([^(;\]).]*);default;(.*)\]/im', '/\[\/tab\]/im' ); $replacements = Array( $tabs, '