Location: PHPKode > scripts > Image Zoom > image-zoom/core.class.php
<?php
/**
* Core SedLex Plugin
* VersionInclude : 3.0 
*/  

/* Prevent direct access to this file */
if (!defined('ABSPATH')) {
	exit("Sorry, you are not allowed to access this file directly.");
}

if (!class_exists('pluginSedLex')) {

	if (!defined('SL_FRAMEWORK_DIR')) {
		define('SL_FRAMEWORK_DIR', dirname(__FILE__));
	}

	$sedlex_list_scripts = array() ; 
	$sedlex_list_styles = array() ; 
	
	/** =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
	* This PHP class aims at simplifying the developement of new plugin for Wordpress and especially if you do not know how to develop it.
	* Therefore, your plugin class should inherit from this class. Please refer to the HOW TO manual to learn more.
	* 
	* @abstract
	*/
	
	abstract class pluginSedLex {
	

		/** ====================================================================================================================================================
		 * This is our constructor, which is private to force the use of getInstance()
		 *
		 * @return void
		 */
		protected function __construct() {
			
			if ( is_callable( array($this, '_init') ) ) {
				$this->_init();
			}
						
			//Button for tinyMCE
			add_action('init', array( $this, '_button_editor'));
			add_action('parse_request', array($this,'create_js_for_tinymce') , 1);
			
			add_action('admin_menu',  array( $this, 'admin_menu'));
			add_filter('plugin_row_meta', array( $this, 'plugin_actions'), 10, 2);
			add_filter('plugin_action_links', array($this, 'plugin_action_links'), 10, 2);
			add_action('init', array( $this, 'init_textdomain'));
			add_action('init', array( $this, 'update_plugin'));
			
			// Public Script
			add_action('wp_enqueue_scripts', array( $this, 'javascript_front'), 5);
			add_action('wp_enqueue_scripts', array( $this, 'css_front'), 5);
			if (method_exists($this,'_public_js_load')) {
				add_action('wp_enqueue_scripts', array($this,'_public_js_load'));
			}
			if (method_exists($this,'_public_css_load')) {
				add_action('wp_enqueue_scripts', array($this,'_public_css_load'));
			}
			add_action('wp_enqueue_scripts', array( $this, 'flush_js'), 10000000);
			add_action('wp_enqueue_scripts', array( $this, 'flush_css'), 10000000);

			// Admin Script
			add_action('admin_enqueue_scripts', array( $this, 'javascript_admin'), 5); // Only for SL page
			add_action('admin_enqueue_scripts', array( $this, 'css_admin'), 5);// Only for SL page
			if (method_exists($this,'_admin_js_load')) {
				add_action('admin_enqueue_scripts', array($this,'_admin_js_load'));
			}
			if (method_exists($this,'_admin_css_load')) {
				add_action('admin_enqueue_scripts', array($this,'_admin_css_load'));
			}
			add_action('admin_enqueue_scripts', array( $this, 'flush_js'), 10000000);// Only for SL page
			add_action('admin_enqueue_scripts', array( $this, 'flush_css'), 10000000);// Only for SL page
			
			// We add an ajax call for the translation class
			add_action('wp_ajax_translate_add', array('translationSL','translate_add')) ; 
			add_action('wp_ajax_translate_modify', array('translationSL','translate_modify')) ; 
			add_action('wp_ajax_translate_create', array('translationSL','translate_create')) ; 
			add_action('wp_ajax_send_translation', array('translationSL','send_translation')) ; 
			add_action('wp_ajax_update_summary', array('translationSL','update_summary')) ; 
			
			// We add an ajax call for the parameter class
			add_action('wp_ajax_del_param', array($this,'del_param_callback')) ; 
			add_action('wp_ajax_add_param', array($this,'add_param_callback')) ; 
			
			// We add an ajax call for the feedback class
			add_action('wp_ajax_send_feedback', array('feedbackSL','send_feedback')) ; 
						
			// Enable the modification of the content and of the excerpt
			add_filter('the_content', array($this,'the_content_SL'), 1000);
			add_filter('get_the_excerpt', array( $this, 'the_excerpt_SL'),1000000);
			add_filter('get_the_excerpt', array( $this, 'the_excerpt_ante_SL'),2);
			
			// We remove some functionalities
			//remove_action('wp_head', 'feed_links_extra', 3); // Displays the links to the extra feeds such as category feeds
			//remove_action('wp_head', 'feed_links', 2); // Displays the links to the general feeds: Post and Comment Feed
			//remove_action('wp_head', 'rsd_link'); // Displays the link to the Really Simple Discovery service endpoint, EditURI link
			//remove_action('wp_head', 'wlwmanifest_link'); // Displays the link to the Windows Live Writer manifest file.
			//remove_action('wp_head', 'index_rel_link'); // index link
			//remove_action('wp_head', 'parent_post_rel_link'); // prev link
			//remove_action('wp_head', 'start_post_rel_link'); // start link
			//remove_action('wp_head', 'adjacent_posts_rel_link_wp_head'); // Displays relational links for the posts adjacent to the current post.
			//remove_action('wp_head', 'wp_generator'); // Displays the XHTML generator that is generated on the wp_head hook, WP version
			
			$this->signature = '<p style="text-align:right;font-size:75%;">&copy; SedLex - <a href="http://www.sedlex.fr/">http://www.sedlex.fr/</a></p>' ; 
			
			$this->frmk = new coreSLframework() ;
			$this->excerpt_called_SL = false ; 			
		}
				
		/** ====================================================================================================================================================
		* In order to install the plugin, few things are to be done ...
		* This function is not supposed to be called from your plugin : it is a purely internal function called when you activate the plugin
		*  
		* If you have to do some stuff when the plgin is activated (such as update the database format), please create an _update function in your plugin
		* 
		* @access private
		* @see subclass::_update 
		* @see pluginSedLex::uninstall
		* @see pluginSedLex::deactivate
		* @param boolean $network_wide true if a network activation is in progress (see http://core.trac.wordpress.org/ticket/14170#comment:30)
		* @return void
		*/
		
		public function install ($network_wide) {
			global $wpdb;
			global $db_version;
			
			// If the website is multisite, we have to call each install manually to create the table because it is called only for the main site.
			// (see http://core.trac.wordpress.org/ticket/14170#comment:18) 

			if (function_exists('is_multisite') && is_multisite() && $network_wide ){
				$old_blog = $wpdb->blogid;
				$old_prefix = $wpdb->prefix ; 
				// Get all blog ids
				$blogids = $wpdb->get_col($wpdb->prepare("SELECT blog_id FROM $wpdb->blogs"));
				foreach ($blogids as $blog_id) {
					switch_to_blog($blog_id);
					$this->singleSite_install(str_replace($old_prefix, $wpdb->prefix, $this->table_name)) ; 
				}
				switch_to_blog($old_blog);
			} else {
				$this->singleSite_install($this->table_name) ; 
			}
		}
		
		/** ====================================================================================================================================================
		* In order to install the plugin, few things are to be done ...
		* This function is not supposed to be called from your plugin : it is a purely internal function called when you activate the plugin
		* 
		* @access private
		* @see subclass::_update 
		* @see pluginSedLex::uninstall_removedata
		* @see pluginSedLex::deactivate
		* @param string $table_name the SQL table name for the plugin
		* @return void
		*/

		public function singleSite_install($table_name) {
			global $wpdb ; 
			
			if (strlen(trim($this->tableSQL))>0) {
				if($wpdb->get_var("show tables like '".$table_name."'") != $table_name) {
					$sql = "CREATE TABLE " . $table_name . " (".$this->tableSQL. ") DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ;";
			
					require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
					dbDelta($sql);
			
					add_option("db_version", $db_version);
					
					// Gestion de l'erreur
					ob_start() ; 
					$wpdb->print_error();
					$result = ob_get_clean() ; 
					if (strlen($result)>0) {
						echo $result ; 
						die() ; 
					}
				}
			}
				
			if (method_exists($this,'_update')) {
				$this->_update() ; 
			}
		}
		
		/** ====================================================================================================================================================
		* In order to update the plugin, few things are to be done ...
		* This function is not supposed to be called from your plugin : it is a purely internal function called when you activate the plugin
		* 
		* @access private
		* @see subclass::_update 
		* @see pluginSedLex::uninstall_removedata
		* @see pluginSedLex::deactivate
		* @param string $table_name the SQL table name for the plugin
		* @return void
		*/

		public function update_plugin() {
			if (method_exists($this,'_update')) {
				$this->_update() ; 
			}
		}

		/** ====================================================================================================================================================
		* Get the plugin ID
		* 
		* @return string the plugin ID string. the string will be empty if it is not a plugin (i.e. the framework)
		*/
		public function getPluginID () {
			$tmp = $this->pluginID ; 
			if ($tmp=="coreSLframework") 
				return "" ; 
			return $tmp ; 
		}
	
		/** ====================================================================================================================================================
		* In order to deactivate the plugin, few things are to be done ... 
		* This function is not supposed to be called from your plugin : it is a purely internal function called when you de-activate the plugin
		* 
		* For now the function does nothing (but have to be declared)
		* 
		* @access private
		* @see pluginSedLex::install
		* @see pluginSedLex::uninstall_removedata
		* @return void
		*/
		public function deactivate () {
			//Nothing to do
		}
		
		/** ====================================================================================================================================================
		* Get the value of an option of the plugin
		* 
		* For instance: <code> echo $this->get_param('opt1') </code> will return the value of the option 'opt1' stored for this plugin. Please note that two different plugins may have options with the same name without any conflict.
		*
		* @see  pluginSedLex::set_param
		* @see  pluginSedLex::get_name_params
		* @see  pluginSedLex::del_param
		* @see parametersSedLex::parametersSedLex
		* @param string $option the name of the option
		* @return mixed  the value of the option requested
		*/
		
		public function get_param($option) {
		
			if (is_multisite() && preg_match('/^global_/', $option)) {
				$options = get_site_option($this->pluginID.'_options');
			} else {
				$options = get_option($this->pluginID.'_options');
			}
			
			if (!isset($options[$option])) {
				if ( (is_string($this->get_default_option($option))) && (substr($this->get_default_option($option), 0, 1)=="*") ) {
					$options[$option] = substr($this->get_default_option($option), 1) ; 
				} else {
					$options[$option] = $this->get_default_option($option) ; 
				}
				// Update with the default value
				if (is_multisite() && preg_match('/^global_/', $option)) {
					update_site_option($this->pluginID.'_options', $options);
				} else {
					update_option($this->pluginID.'_options', $options);
				}
			} 
			
			return $options[$option] ;
		}
		
		/** ====================================================================================================================================================
		* Get the value of an option of the plugin (macro)
		* 
		* For instance: <code> echo $this->get_param_macro('opt1') </code> will return all values of the option 'opt1' stored for this plugin. Please note that two different plugins may have options with the same name without any conflict.
		*
		* @see  pluginSedLex::set_param
		* @see  pluginSedLex::get_name_params
		* @see  pluginSedLex::del_param
		* @see parametersSedLex::parametersSedLex
		* @param string $option the name of the option
		* @return mixed  the value of the option requested
		*/
		
		public function get_param_macro($option) {
			$i = 0 ; 
			$results = array() ; 
			
			if (is_multisite() && preg_match('/^global_/', $option)) {
				$options = get_site_option($this->pluginID.'_options');
			} else {
				$options = get_option($this->pluginID.'_options');
			}

			while (isset($options[$option."_macro".($i)])) {
				$results[] = $options[$option."_macro".($i)] ; 
				$i++ ; 
			}
			
			return $results ; 
		}

		
		/** ====================================================================================================================================================
		* Get name of all options
		* 
		* For instance: <code> echo $this->get_name_params() </code> will return an array with the name of all the options of the plugin
		*
		* @see  pluginSedLex::set_param
		* @see  pluginSedLex::get_param
		* @see  pluginSedLex::del_param
		* @see parametersSedLex::parametersSedLex
		* @return array an array with all option names
		*/
		
		public function get_name_params() {
			if (is_multisite()) {
				$options = get_site_option($this->pluginID.'_options');
			} else {
				$options = get_option($this->pluginID.'_options');
			}
			
			if (is_array($options)) {
				$results = array() ; 
				foreach ($options as $o => $v) {
					$results[] = $o ; 
				}
				return $results ; 
			} else {
				return array() ; 
			}
		}
		
		/** ====================================================================================================================================================
		* Delete an option of the plugin
		* 
		* For instance: <code> echo $this->get_param('opt1') </code> will return the value of the option 'opt1' stored for this plugin. Please note that two different plugins may have options with the same name without any conflict.
		*
		* @see  pluginSedLex::set_param
		* @see  pluginSedLex::get_name_params
		* @see  pluginSedLex::gel_param
		* @see parametersSedLex::parametersSedLex
		* @param string $option the name of the option
		* @param string $pluginID the plugin ID (or the current plugin ID by default)
		* @return void
		*/
		
		public function del_param($option, $pluginID="") {
			if ($pluginID=="") {
				$pluginID = $this->pluginID ; 
			}
			
			if (is_multisite()) {
				$options = get_site_option($pluginID.'_options');
			} else {
				$options = get_option($pluginID.'_options');
			}
		
			// We handle the case where it is a macro  param
			if (preg_match("/^(.*)_macro([0-9]*)$/", $option, $match)) {
				
				$name_param = $match[1] ; 
				$from_int = intval($match[2]) ; 
				$i = $from_int+1 ; 
				// We shift all the variable name
				while (isset($options[$name_param."_macro".($i)])) {
					$options[$name_param."_macro".($i-1)] = $options[$name_param."_macro".($i)] ; 
					$i++ ; 
				}
				if (isset($options[$name_param."_macro".($i-1)])) {
					unset($options[$name_param."_macro".($i-1)]) ; 
				}
				if ($i==1) {
					$instance_plugin = call_user_func(array($pluginID, 'getInstance'));  ; 
					$options[$name_param."_macro0"] = $instance_plugin->get_default_option($name_param) ; 
				}
			} else {
				// It is not a macro param, then we just unset it
				if (isset($options[$option])) {
					unset($options[$option]) ; 
				}
			}
			
			if (is_multisite()) {
				update_site_option($pluginID.'_options', $options);
			} else {
				update_option($pluginID.'_options', $options);
			}
			return ;
		}
		
		/** ====================================================================================================================================================
		* Callback to remove a parameter 
		*
		* It will also remove any comment for the same
		*
		* @access private
		* @return void
		*/

		function del_param_callback()  {
			global $_POST ; 
			$options = $_POST['param'] ; 
			$pluginID = $_POST['pluginID'] ; 
			
			foreach ($options as $o) {
				$this->del_param($o, $pluginID) ; 
			}

			echo "ok" ; 
			die() ; 
		}
		
		/** ====================================================================================================================================================
		* Callback to add a parameter 
		*
		* It will also remove any comment for the same
		*
		* @access private
		* @return void
		*/

		function add_param_callback()  {
			global $_POST ; 
			$options = $_POST['param'] ; 
			$pluginID = $_POST['pluginID'] ; 
			
			if (is_multisite()) {
				$options_to_be_updated = get_site_option($pluginID.'_options');
			} else {
				$options_to_be_updated = get_option($pluginID.'_options');
			}
			
			foreach ($options as $o) {
				// We handle the case where it is a macro  param
				if (preg_match("/^(.*)_macro$/", $o, $match)) {
					$name_param = $match[1] ; 
					$i = 1 ; 
					// We shift all the variable name
					while (isset($options_to_be_updated[$name_param."_macro".($i)])) {
						$i++ ; 
					}
					$instance_plugin = call_user_func(array($pluginID, 'getInstance'));  ; 
					$options_to_be_updated[$name_param."_macro".($i)] = $instance_plugin->get_default_option($name_param) ;
				} else {
					// It is not a macro param, then we just set it
					$instance_plugin = call_user_func(array($pluginID, 'getInstance'));  ; 
					$options_to_be_updated[$name_param] = $instance_plugin->get_default_option($name_param) ;
				}
			
				if (is_multisite()) {
					update_site_option($pluginID.'_options', $options_to_be_updated);
				} else {
					update_option($pluginID.'_options', $options_to_be_updated);
				}	
			}

			echo "ok" ; 
			die() ; 
		}
		
		/** ====================================================================================================================================================
		* Set the option of the plugin
		*
		* For instance, <code>$this->set_param('opt1', 'val1')</code> will store the string 'val1' for the option 'opt1'. Any object may be stored in the options
		* 
		* @see  pluginSedLex::get_param
		* @see parametersSedLex::parametersSedLex
		* @param string $option the name of the option
		* @param mixed $value the value of the option to be saved
		* @return void
		*/
		public function set_param($option, $value) {
			if (is_multisite() && preg_match('/^global_/', $option)) {
				$options = get_site_option($this->pluginID.'_options');
			} else {
				$options = get_option($this->pluginID.'_options');
			}
			
			$options[$option] = $value ; 
			
			if (is_multisite() && preg_match('/^global_/', $option)) {
				update_site_option($this->pluginID.'_options', $options);
			} else {
				update_option($this->pluginID.'_options', $options);
			}
		}
		
		/** ====================================================================================================================================================
		* Create the menu & submenu in the admin section
		* This function is not supposed to be called from your plugin : it is a purely internal function called when you de-activate the plugin
		* 
		* @access private
		* @return void
		*/
		public function admin_menu() {   
		
			global $menu;
			
			$tmp = explode('/',plugin_basename($this->path)) ; 
			$plugin = $tmp[0]."/".$tmp[0].".php" ; 
			$topLevel = "sedlex.php" ; 
			
			// Fait en sorte qu'il n'y ait qu'un seul niveau 1 pour l'ensemble des plugins que j'ai redige
			$menu_added=false ; 
			foreach ($menu as $i) {
				$key = array_search($topLevel, $i);
				if ($key != '') {
					$menu_added = true;
				}
			}
			if ($menu_added) {
				// Nothing ... because menu is already added
				} else {
				//add main menu
				add_object_page('SL Plugins', 'SL Plugins', 'activate_plugins', $topLevel, array($this,'sedlex_information'));
			
				$page = add_submenu_page($topLevel, __('About...', 'SL_framework'), __('About...', 'SL_framework'), 'activate_plugins', $topLevel, array($this,'sedlex_information'));
			}
		
			//add sub menus
			$number = "" ; 
			if (method_exists($this,'_notify')) {
				$number = $this->_notify() ; 
				if (is_numeric($number)) {
					if ($number>0) {
						$number = "<span class='update-plugins count-1' title='title'><span class='update-count'>".$number."</span></span>" ; 
					} else {
						$number = "" ; 
					}
				} else {
					$number = "" ; 
				}
			}
			
			$page = add_submenu_page($topLevel, $this->pluginName, $this->pluginName . $number, 'activate_plugins', $plugin, array($this,'configuration_page'));			

		}
		
		/** ====================================================================================================================================================
		* Add a link in the new link along with the standard activate/deactivate and edit in the plugin admin page.
		* This function is not supposed to be called from your plugin : it is a purely internal function 
		* 
		* @access private
		* @param array $links links such as activate/deactivate and edit
		* @param string $file the related file of the plugin 
		* @return array of new links set with a Settings link added
		*/
		public function plugin_actions($links, $file) { 
			$tmp = explode('/',plugin_basename($this->path)) ; 
			$plugin = $tmp[0]."/".$tmp[0].".php" ; 
			if ($file == $plugin) {
				return array_merge(
					$links,
					array( '<a href="admin.php?page='.$plugin.'">'. __('Settings', 'SL_framework') .'</a>')
				);
			}
			return $links;
		}
		
		/** ====================================================================================================================================================
		* Handler for the 'plugin_action_links' hook. Adds a "Settings" link to this plugin's entry
		* on the plugin list.
		*
		* @access private
		* @param array $links
		* @param string $file
		* @return array
		*/
		function plugin_action_links($links, $file) {
			$tmp = explode('/',plugin_basename($this->path)) ; 
			$plugin = $tmp[0]."/".$tmp[0].".php" ; 
			if ($file == $plugin) {
				return array_merge(
					$links,
					array( '<a href="admin.php?page='.$plugin.'">'. __('Settings', 'SL_framework') .'</a>')
				);
			}
			return $links;
		}
		
		/** ====================================================================================================================================================
		* Translate the plugin with international settings
		* This function is not supposed to be called from your plugin : it is a purely internal function
		*
		* In order to enable translation, please add .mo and .po files in the /lang folder of the plugin
		*		
		* @access private
		* @return void
		*/
		public function init_textdomain() {
			load_plugin_textdomain($this->pluginID, false, dirname( plugin_basename( $this->path ) ). '/lang/') ;
			load_plugin_textdomain('SL_framework', false, dirname( plugin_basename( $this->path ) ). '/core/lang/') ;
		}
		
		/** ====================================================================================================================================================
		* Functions to add a button in the TinyMCE Editor
		*
		* @access private
		* @return void
		*/
		
		function _button_editor() {
			// Do not modify this function
			if(is_admin()){
				if ( ! current_user_can('edit_posts') && ! current_user_can('edit_pages') )
					return;
					
				if (is_callable( array($this, 'add_tinymce_buttons') ) ) {
					if (count($this->add_tinymce_buttons())>0) {
						if ( get_user_option('rich_editing') == 'true') {
							add_filter('mce_external_plugins', array($this, 'add_custom_button'));
							add_filter('mce_buttons', array($this, 'register_custom_button'), 999 );
							add_filter('tiny_mce_version', array($this, 'my_refresh_mce'));
						}
					}
				}
			}
		}
		
		function register_custom_button($buttons) {
			// Do not modify this function
			if (is_callable( array($this, 'add_tinymce_buttons') ) ) {
				if (count($this->add_tinymce_buttons())>0) {
					array_push($buttons, "|");
				}
				$i = 0 ; 
				foreach ($this->add_tinymce_buttons() as $button) {
					$i++ ; 
					array_push($buttons, "customButton_".$this->pluginID."_".$i) ;
				}
			}
			
			return $buttons;
		}
	
		function add_custom_button($plugin_array) {
			if (is_callable( array($this, 'add_tinymce_buttons') ) ) {
				if (count($this->add_tinymce_buttons())>0) {
					$plugin_array["customPluginButtons_".$this->pluginID] = site_url()."/?output_js_tinymce=customPluginButtons_".$this->pluginID ; 
				}
			}
			return $plugin_array;
		}
		
		function my_refresh_mce($ver) {
			if (is_callable( array($this, 'add_tinymce_buttons') ) ) {
				if (count($this->add_tinymce_buttons())>0) {
					$ver += 1;
				}
			}
			return $ver;
		}
		
		function create_js_for_tinymce() {
			if ((isset($_GET["output_js_tinymce"]))&&($_GET["output_js_tinymce"]=="customPluginButtons_".$this->pluginID)) {
				?>
				(function(){
					tinymce.create('tinymce.plugins.<?php echo "customPluginButtons_".$this->pluginID ; ?>', {
				 
						init : function(ed, url){
						<?php 
						$i = 0 ; 	
						foreach ($this->add_tinymce_buttons() as $button) { 
							$i++ ; 
						?>
							ed.addCommand('<?php echo "customButton_".$this->pluginID."_".$i ; ?>', function(){
								selected_content = tinyMCE.activeEditor.selection.getContent();
								tinyMCE.activeEditor.selection.setContent('<?php echo $button[1] ; ?>' + selected_content + '<?php echo $button[2] ; ?>');
							});
							
							ed.addButton('<?php echo "customButton_".$this->pluginID."_".$i ; ?>', {
								title: '<?php echo $button[0] ; ?>',
								image: '<?php echo $button[3] ; ?>',
								cmd: '<?php echo "customButton_".$this->pluginID."_".$i ; ?>'
							});
						<?php } ?>
						},
						createControl : function(n, cm){
							return null;
						}
					});
					tinymce.PluginManager.add('<?php echo "customPluginButtons_".$this->pluginID ; ?>', tinymce.plugins.<?php echo "customPluginButtons_".$this->pluginID ; ?>);
				})();
				<?php
				die() ; 
			}
		}
		
		/** ====================================================================================================================================================
		* Add a javascript file in the header
		* 
		* For instance, <code> $this->add_js('http://www.monserveur.com/wp-content/plugins/my_plugin/js/foo.js') ; </code> will add the 'my_plugin/js/foo.js' in the header.
		* In order to save bandwidth and boost your website, the framework will concat all the added javascript (by this function) and serve the browser with a single js file 
		* Note : you have to call this function in function <code>your_function</code> called by <code>add_action('wp_print_scripts', array( $this, 'your_function'));</code>
		*
		* @param string $url the complete http url of the javascript (this javascript should be an internal javascript i.e. stored by your blog and not, for instance, stored by Google) 
		* @see pluginSedLex::add_inline_js
		* @see pluginSedLex::flush_js
		* @return void
		*/
		
		public function add_js($url) {
			global $sedlex_list_scripts ; 
			$sedlex_list_scripts[] = str_replace(WP_CONTENT_URL,WP_CONTENT_DIR,$url) ; 
		}
		
		/** ====================================================================================================================================================
		* Add inline javascript in the header
		* 
		* For instance <code> $this->add_inline_js('alert("foo");') ; </code>
		* In order to save bandwidth and boost your website, the framework will concat all the added javascript (by this function) and serve the browser with a single js file 
		* Note : you have to call this function in function <code>your_function</code> called by <code>add_action('wp_print_scripts', array( $this, 'your_function'));</code>
		*
		* @param string $text the javascript to be inserted in the header (without any <script> tags)
		* @see pluginSedLex::add_js
		* @see pluginSedLex::flush_js
		* @return void
		*/
		
		public function add_inline_js($text) {
			global $sedlex_list_scripts ; 
			$id = md5($text) ; 
			// Repertoire de stockage des css inlines
			$path =  WP_CONTENT_DIR."/sedlex/inline_scripts";
			$path_ok = false ; 
			if (!is_dir($path)) {
				if (@mkdir("$path", 0755, true)) {
					$path_ok = true ; 				
				} else {
					SL_Debug::log(get_class(), "The folder ". WP_CONTENT_DIR."/sedlex/inline_scripts"." cannot be created", 2) ; 
				}
			} else {
				$path_ok = true ; 
			}
			
			// On cree le machin
			if ($path_ok) {
				$css_f = $path."/".$id.'.js' ; 
				if (!@is_file($css_f)) {
					@file_put_contents($css_f, $text) ; 
				}
				@chmod($css_f, 0755);
				$sedlex_list_scripts[] = $css_f ; 
			} else {
				echo "\n<script type='text/javascript'>\n" ; 
				echo $text ; 
				echo "\n</script>\n" ; 
			}
		}
		
		/** ====================================================================================================================================================
		* Insert the  'single' javascript file in the page
		* This function is not supposed to be called from your plugin. This function is called automatically once during the rendering
		* 
		* @access private
		* @see pluginSedLex::add_inline_js
		* @see pluginSedLex::add_js
		* @return void
		*/
		
		public  function flush_js($hook) {
			global $sedlex_list_scripts ; 
			
			// If it not a plugin page SL page
			if (is_admin()) {
				$plugin = explode("_", $hook) ; 
				if (!isset($plugin[count($plugin)-1])) {
					return ; 
				}
				if ($plugin[count($plugin)-1]!="sedlex") {
					$plugin = explode("/", $plugin[count($plugin)-1]) ; 
					if ((!isset($plugin[0]))||(!@is_file(WP_PLUGIN_DIR."/".$plugin[0]."/core.class.php")))
						return;
				}
			}

			
			// Repertoire de stockage des css inlines
			$path =  WP_CONTENT_DIR."/sedlex/inline_scripts";
			if (!is_dir($path)) {
				if (!@mkdir("$path", 0755, true)) {
					SL_Debug::log(get_class(), "The folder ". WP_CONTENT_DIR."/sedlex/inline_scripts"." cannot be created", 2) ; 
				}
			}
			
			if (!empty($sedlex_list_scripts)) {
				// We create the file if it does not exist
				$out = "" ; 
				foreach( $sedlex_list_scripts as $file ) {
					if (@is_file($file)) {
						$out .=  "\n/*====================================================*/\n";
						$out .=  "/* FILE ".str_replace(WP_CONTENT_DIR,"",$file)  ."*/\n";
						$out .=  "/*====================================================*/\n";
						$out .= @file_get_contents($file) . "\n";
					} else {
						$out .=  "\n/*====================================================*/\n";
						$out .=  "/* FILE NOT FOUND ".str_replace(WP_CONTENT_DIR,"",$file)  ."*/\n";
						$out .=  "/*====================================================*/\n";						
					}
				}
				$md5 = md5($out) ; 
				if (!@is_file(WP_CONTENT_DIR."/sedlex/inline_scripts/".$md5.".js")) {
					@file_put_contents(WP_CONTENT_DIR."/sedlex/inline_scripts/".$md5.".js", $out) ; 
				}
				
				@chmod(WP_CONTENT_DIR."/sedlex/inline_scripts/".$md5.".js", 0755);
				
				$url = WP_PLUGIN_URL.'/'.str_replace(basename(__FILE__),"",plugin_basename(__FILE__)).'core/load-scripts.php?c=0&load='.$md5 ; 
				wp_enqueue_script('sedlex_scripts', $url, array() ,date('Ymd'));
				$sedlex_list_scripts = array(); 
			}
		}
				
		/** ====================================================================================================================================================
		* Insert the  admin javascript files which is located in the core (you may NOT modify these files) 
		* This function is not supposed to be called from your plugin. This function is called automatically when you are in the admin page of the plugin
		* 
		* @access private
		* @return void
		*/
		
		public function javascript_admin($hook) {
			// If it not a plugin page SL page
			$plugin = explode("_", $hook) ; 
			if (!isset($plugin[count($plugin)-1])) {
				return ; 
			}
			if ($plugin[count($plugin)-1]!="sedlex") {
				$plugin = explode("/", $plugin[count($plugin)-1]) ; 
				if ((!isset($plugin[0]))||(!@is_file(WP_PLUGIN_DIR."/".$plugin[0]."/core.class.php")))
					return;
			}	
			
			if (str_replace(basename( __FILE__),"",plugin_basename( __FILE__))==str_replace(basename( $this->path),"",plugin_basename($this->path))) {
				// For the tabs of the admin page
				wp_enqueue_script('jquery');   
				wp_enqueue_script('jquery-ui-core', '', array('jquery'), false );   
				wp_enqueue_script('jquery-ui-dialog', '', array('jquery'), false );
				wp_enqueue_script('jquery-ui-tabs', '', array('jquery'), false );
				wp_enqueue_script( 'jquery-ui-sortable', '', array('jquery'), false );
				wp_enqueue_script( 'jquery-ui-effects', '', array('jquery', 'jquery-ui'), false );
				
				echo '<script> addLoadEvent = function(func){if(typeof jQuery!="undefined")jQuery(document).ready(func);else if(typeof wpOnload!=\'function\'){wpOnload=func;}else{var oldonload=wpOnload;wpOnload=function(){oldonload();func();}}};</script>'."\r\n" ; 
			
				@chmod(WP_PLUGIN_DIR.'/'.str_replace(basename( __FILE__),"",plugin_basename( __FILE__)) .'core/js/', 0755);
				
				$dir = @opendir(WP_PLUGIN_DIR.'/'.str_replace(basename( __FILE__),"",plugin_basename( __FILE__)) .'core/js/'); 
				if ($dir !== false) {
					while($file = readdir($dir)) {
						if (preg_match('@\.js$@i',$file)) {
							$path = WP_PLUGIN_DIR.'/'.str_replace(basename( __FILE__),"",plugin_basename( __FILE__)) .'core/js/'.$file ; 
							$url = WP_PLUGIN_URL.'/'.str_replace(basename( __FILE__),"",plugin_basename( __FILE__)) .'core/js/'.$file ; 
							if (@filesize($path)>0) {
								$this->add_js($url) ; 
							}				
						}
					}
				}
			}
			
			$name = 'js/js_admin.js' ; 
			$url = WP_PLUGIN_URL.'/'.str_replace(basename( $this->path),"",plugin_basename($this->path)) .$name ; 
			$path = WP_PLUGIN_DIR.'/'.str_replace(basename( $this->path),"",plugin_basename($this->path)) .$name ; 
			if (file_exists($path)) {
				if (@filesize($path)>0) {
					$this->add_js($url) ; 
				}
			}
		}
				
		/** ====================================================================================================================================================
		* Insert the  admin javascript file which is located in js/js_front.js (you may modify this file in order to customize the rendering) 
		* This function is not supposed to be called from your plugin. This function is called automatically.
		* 
		* @access private
		* @return void
		*/
		
		public function javascript_front() {
			$name = 'js/js_front.js' ; 
			$url = WP_PLUGIN_URL.'/'.str_replace(basename( $this->path),"",plugin_basename($this->path)) .$name ; 
			$path = WP_PLUGIN_DIR.'/'.str_replace(basename( $this->path),"",plugin_basename($this->path)) .$name ; 
			if (file_exists($path)) {
				if (@filesize($path)>0) {
					$this->add_js($url) ; 
				}
			}
		}
		
		/** ====================================================================================================================================================
		* Add a CSS file in the header
		* 
		* For instance,  <code>$this->add_css('http://www.monserveur.com/wp-content/plugins/my_plugin/js/foo.css') ;</code> will add the 'my_plugin/js/foo.css' in the header.
		* In order to save bandwidth and boost your website, the framework will concat all the added css (by this function) and serve the browser with a single css file 
		* Note : you have to call this function in function <code>your_function</code> called by <code>add_action('wp_print_styles', array( $this, 'your_function'));</code>
		*
		* @param string $url the complete http url of the css file (this css should be an internal javascript i.e. stored by your blog and not, for instance, stored by Google) 
		* @see pluginSedLex::add_inline_css
		* @see pluginSedLex::flush_css
		* @return void
		*/
		
		public function add_css($url) {
			global $sedlex_list_styles ; 
			$sedlex_list_styles[] = str_replace(WP_CONTENT_URL,WP_CONTENT_DIR,$url) ; 
		}
		
		/** ====================================================================================================================================================
		* Add inline CSS in the header
		*
		* For instance,  <code> $this->add_inline_css('.head { color:#FFFFFF; }') ; </code>
		* In order to save bandwidth and boost your website, the framework will concat all the added css (by this function) and serve the browser with a single css file 
		* Note : you have to call this function in function <code>your_function</code> called by <code>add_action('wp_print_styles', array( $this, 'your_function'));</code>
		*
		* @param string $text the css to be inserted in the header (without any <style> tags)
		* @see pluginSedLex::add_css
		* @see pluginSedLex::flush_css
		* @return void
		*/
		
		public function add_inline_css($text) {
			global $sedlex_list_styles ; 
			$id = md5($text) ; 
			// Repertoire de stockage des css inlines
			$path =  WP_CONTENT_DIR."/sedlex/inline_styles";
			$path_ok = false ; 
			if (!is_dir($path)) {
				if (@mkdir("$path", 0755, true)) {
					$path_ok = true ; 				
				} else {
					SL_Debug::log(get_class(), "The folder ". WP_CONTENT_DIR."/sedlex/inline_styles"." cannot be created", 2) ; 
				}
			} else {
				$path_ok = true ; 
			}
			
			// On cree le machin
			if ($path_ok) {
				$css_f = $path."/".$id.'.css' ; 
				if (!@is_file($css_f)) {
					@file_put_contents($css_f , $text); 
				} 
				@chmod($css_f, 0755);
				$sedlex_list_styles[] = $css_f ; 
			} else {
				echo "\n<style type='text/css'>\n" ; 
				echo $text ; 
				echo "\n</style>\n" ; 
			}
		}
		
		/** ====================================================================================================================================================
		* Insert the 'single' css file in the page
		* This function is not supposed to be called from your plugin. This function is called automatically once during the rendering
		* 
		* @access private
		* @see pluginSedLex::add_inline_css
		* @see pluginSedLex::add_css
		* @return void
		*/
		
		public function flush_css($hook) {
			global $sedlex_list_styles ; 
						
			// If it not a plugin page SL page
			if (is_admin()) {
				$plugin = explode("_", $hook) ; 
				if (!isset($plugin[count($plugin)-1])) {
					return ; 
				}
				if ($plugin[count($plugin)-1]!="sedlex") {
					$plugin = explode("/", $plugin[count($plugin)-1]) ; 
					if ((!isset($plugin[0]))||(!@is_file(WP_PLUGIN_DIR."/".$plugin[0]."/core.class.php")))
						return;
				}
			}
		
			// Repertoire de stockage des css inlines

			$path =  WP_CONTENT_DIR."/sedlex/inline_styles";
			$path_ok = false ; 
			if (!is_dir($path)) {
				if (!@mkdir("$path", 0755, true)) {
					SL_Debug::log(get_class(), "The folder ". WP_CONTENT_DIR."/sedlex/inline_styles cannot be created", 2) ; 
				}
			}

			if (!empty($sedlex_list_styles)) {
				// We create the file if it does not exist
				$out = "" ; 
				foreach( $sedlex_list_styles as $file ) {
					if (@is_file($file)) {
						$out .=  "\n/*====================================================*/\n";
						$out .=  "/* FILE ".str_replace(WP_CONTENT_DIR,"",$file)  ."*/\n";
						$out .=  "/*====================================================*/\n";
						$content = @file_get_contents($file) . "\n";
						// We proceed to some replacement for the image
						if (strpos($file,'/sedlex/inline_styles')!==false) {
							$out .= $content ; 
						} else if (strpos($file,'/core/css')===false) {
							list($plugin, $void) = explode('/', str_replace(WP_PLUGIN_DIR."/", "", $file), 2) ; 
							$content = str_replace( '../core/img/', plugins_url()."/".$plugin.'/core/img/', $content );
							$out .= str_replace( '../img/', plugins_url()."/".$plugin.'/img/', $content );
						} else {
							list($plugin, $void) = explode('/', str_replace(WP_PLUGIN_DIR."/", "", $file), 2) ; 
							$out .= str_replace( '../img/', plugins_url()."/".$plugin.'/core/img/', $content );			
						}
					} else {
						$out .=  "\n/*====================================================*/\n";
						$out .=  "/* FILE NOT FOUND ".str_replace(WP_CONTENT_DIR,"",$file)  ."*/\n";
						$out .=  "/*====================================================*/\n";						
					}
				}
				$md5 = md5($out) ; 
				if (!@is_file(WP_CONTENT_DIR."/sedlex/inline_styles/".$md5.".css")) {
					@file_put_contents(WP_CONTENT_DIR."/sedlex/inline_styles/".$md5.".css", $out) ; 
				}
				
				@chmod(WP_CONTENT_DIR."/sedlex/inline_styles/".$md5.".css", 0755);
				
				$url = WP_PLUGIN_URL.'/'.str_replace(basename(__FILE__),"",plugin_basename( __FILE__)).'core/load-styles.php?c=0&load='.$md5 ; 
				wp_enqueue_style('sedlex_styles', $url, array() ,date('Ymd'));

				$sedlex_list_styles = array(); 
			}
		}
		
		
		/** ====================================================================================================================================================
		* Insert the  admin css files which is located in the core (you may NOT modify these files) 
		* This function is not supposed to be called from your plugin. This function is called automatically when you are in the admin page of the plugin
		* 
		* @access private
		* @return void
		*/
		
		public function css_admin($hook) {

			// If it not a plugin page SL page
			$plugin = explode("_", $hook) ; 
			if (!isset($plugin[count($plugin)-1])) {
				return ; 
			}
			if ($plugin[count($plugin)-1]!="sedlex") {
				$plugin = explode("/", $plugin[count($plugin)-1]) ; 
				if ((!isset($plugin[0]))||(!@is_file(WP_PLUGIN_DIR."/".$plugin[0]."/core.class.php")))
					return;
			}
			
			if (str_replace(basename( __FILE__),"",plugin_basename( __FILE__))==str_replace(basename( $this->path),"",plugin_basename($this->path))) {
				wp_enqueue_style('wp-admin');
				wp_enqueue_style('dashboard');
				wp_enqueue_style('plugin-install');
				
				@chmod(WP_PLUGIN_DIR.'/'.str_replace(basename( __FILE__),"",plugin_basename( __FILE__)) .'core/css/', 0755);
				$dir = @opendir(WP_PLUGIN_DIR.'/'.str_replace(basename( __FILE__),"",plugin_basename( __FILE__)) .'core/css/'); 
				if ($dir!==false) {
					while($file = readdir($dir)) {
						if (preg_match('@\.css$@i',$file)) {
							$path = WP_PLUGIN_DIR.'/'.str_replace(basename( __FILE__),"",plugin_basename( __FILE__)) .'core/css/'.$file ; 
							$url = WP_PLUGIN_URL.'/'.str_replace(basename( __FILE__),"",plugin_basename( __FILE__)) .'core/css/'.$file ; 
							if (@filesize($path)>0) {
								$this->add_css($url) ; 
							}			
						}
					}
				}
			}
			
			$name = 'css/css_admin.css' ; 
			$url = WP_PLUGIN_URL.'/'.str_replace(basename( $this->path),"",plugin_basename($this->path)) .$name ; 
			$path = WP_PLUGIN_DIR.'/'.str_replace(basename( $this->path),"",plugin_basename($this->path)) .$name ; 
			if (file_exists($path)) {
				if (@filesize($path)>0) {
					$this->add_css($url) ; 
				}
			}

		}

		/** ====================================================================================================================================================
		* Insert the  admin css file which is located in css/css_front.css (you may modify this file in order to customize the rendering) 
		* This function is not supposed to be called from your plugin. This function is called automatically.
		* 
		* @access private
		* @return void
		*/
		
		function css_front() {
			$name = 'css/css_front.css' ; 
			$url = WP_PLUGIN_URL.'/'.str_replace(basename( $this->path),"",plugin_basename($this->path)) .$name ; 
			$path = WP_PLUGIN_DIR.'/'.str_replace(basename( $this->path),"",plugin_basename($this->path)) .$name ; 
			if (file_exists($path)) {
				if (@filesize($path)>0) {
					$this->add_css($url) ; 
				}
			}
		}
		
		/** ====================================================================================================================================================
		* This function displays the configuration page of the core 
		* 
		* @access private
		* @return void
		*/
		function sedlex_information() {
			global $submenu;
			global $blog_id ; 
			
			if (((is_multisite())&&($blog_id == 1))||(!is_multisite())) {
				ob_start() ; 
				$params = new parametersSedLex ($this->frmk) ;
				$params->add_title (__('Log options','SL_framework')) ; 
				$params->add_param ("debug_level", __('What is the debug level:','SL_framework')) ; 
				$params->add_comment ("<a href='".str_replace(WP_CONTENT_DIR, WP_CONTENT_URL, SL_Debug::get_log_path())."' target='_blank'>".__('See the debug logs','SL_framework')."</a>") ; 
				$params->add_comment (__('1=log only the critical errors;','SL_framework')) ; 
				$params->add_comment (__('2=log only the critical errors and the standard errors;','SL_framework')) ; 
				$params->add_comment (__('3=log only the critical errors, the standard errors and the warnings;','SL_framework')) ; 
				$params->add_comment (__('4=log information;','SL_framework')) ; 
				$params->add_comment (__('5=log verbose;','SL_framework')) ; 
				
				if (is_multisite()) {
					$params->add_title (__('Multisite Management','SL_framework')) ; 
					$params->add_param ("global_allow_translation_by_blogs", __('Do you want to allow sub-blogs to modify the translations of the plugins:','SL_framework')) ; 
					$params->add_comment (__("If this option is unchecked, the translation tab won't be displayed in the blog administration panel.",'SL_framework')) ; 
				}
	
				echo $params->flush() ; 
				$paramSave = ob_get_clean() ; 

				
				echo "<a name='top'></a>" ; 
			}
						
			//Information about the SL plugins
			?>
			<div class="wrap">
				<div id="icon-themes" class="icon32"><br/></div>
				<h2><?php echo __('Summary page for the plugins developped with the SL framework', 'SL_framework')?></h2>
			</div>
			<div style="padding:20px;">
				<?php echo $this->signature; 
				?>
				<p>&nbsp;</p>
				<?php
				
				$plugins = get_plugins() ; 
				$all_nb = 0 ; 
				foreach($plugins as $url => $data) {
					if (is_plugin_active($url)) {
						$all_nb++ ; 
					}
				}
				$sl_count = 0 ; 
				foreach ($submenu['sedlex.php'] as $ov) {
					$sl_count ++ ; 
				}
?>
				<p><?php printf(__("For now, you have installed %s plugins including %s plugins developped with the SedLex's framework",'SL_framework'), $all_nb, $sl_count-1)?><p/>
				<p><?php printf(__("The core plugin is located at %s",'SL_framework'), "<code>".str_replace(ABSPATH, "", SL_FRAMEWORK_DIR)."</code>")?><p/>
<?php
				
				//======================================================================================
				//= Tab listing all the plugins
				//======================================================================================
		
				$tabs = new adminTabs() ; 
									
				ob_start() ; 
					$table = new adminTable() ; 
					$table->title(array(__("Plugin name", 'SL_framework'), __("Description", 'SL_framework'))) ; 
					$ligne=0 ; 
					foreach ($submenu['sedlex.php'] as $i => $ov) {
						$ligne++ ; 

						$url = $ov[2] ; 
						$plugin_name = explode("/",$url) ;
						if (isset($plugin_name[count($plugin_name)-2])) {
							$plugin_name = $plugin_name[count($plugin_name)-2] ; 
						} else {
							$plugin_name = "?" ; 
						}
						if ($i != 0) {
							$info = pluginSedlex::get_plugins_data(WP_PLUGIN_DIR."/".$url);
							ob_start() ; 
							?>
								<p><b><?php echo $info['Plugin_Name'] ; ?></b></p>
								<p><a href='admin.php?page=<?php echo $url  ; ?>'><?php echo __('Settings', 'SL_framework') ; ?></a> | <?php echo Utils::byteSize(Utils::dirSize(dirname(WP_PLUGIN_DIR.'/'.$url ))) ;?></p>
							<?php

							$cel1 = new adminCell(ob_get_clean()) ; 
							
							ob_start() ; 
								$database = "" ; 
								if ($info['Database']!="") {
									$database = "<img src='".WP_PLUGIN_URL.'/'.str_replace(basename(__FILE__),"",plugin_basename(__FILE__))."core/img/database.png"."' alt='".__('There is a SQL database for this plugin', 'SL_framework')."'/>" ; 
								}
								?>
								<p><?php echo str_replace("<ul>", "<ul style='list-style-type:circle; padding-left:1cm;'>", $info['Description']) ; ?></p>
								<p><?php echo sprintf(__('Version: %s by %s', 'SL_framework'),$info['Version'],$info['Author']) ; ?> (<a href='<?php echo $info['Author_URI'] ; ?>'><?php echo $info['Author_URI'] ; ?></a>)<?php echo $database ; ?></p>
								<?php
							$cel2 = new adminCell(ob_get_clean()) ; 
							
							$table->add_line(array($cel1, $cel2), '1') ; 
						}
					}
					echo $table->flush() ; 
				$tabs->add_tab(__('List of SL plugins',  'SL_framework'), ob_get_clean(), WP_PLUGIN_URL.'/'.str_replace(basename(__FILE__),"",plugin_basename(__FILE__))."core/img/tab_list.png" ) ; 
				
				if (((is_multisite())&&($blog_id == 1))||(!is_multisite())) {

					//======================================================================================
					//= Tab for parameters
					//======================================================================================
					
							
					$tabs->add_tab(__('Parameters of the framework',  'SL_framework'),  $paramSave, WP_PLUGIN_URL.'/'.str_replace(basename(__FILE__),"",plugin_basename(__FILE__))."core/img/tab_param.png") ; 					
					
				}
				
				if (((is_multisite())&&($blog_id == 1))||(!is_multisite())||($this->frmk->get_param('global_allow_translation_by_blogs'))) {
					
					//======================================================================================
					//= Tab for the translation
					//======================================================================================
										
					ob_start() ; 
						$plugin = str_replace("/","",str_replace(basename(__FILE__),"",plugin_basename( __FILE__))) ; 
						$trans = new translationSL("SL_framework", $plugin) ; 
						$trans->enable_translation() ; 
					$tabs->add_tab(__('Manage translation of the framework',  'SL_framework'), ob_get_clean() , WP_PLUGIN_URL.'/'.str_replace(basename(__FILE__),"",plugin_basename(__FILE__))."core/img/tab_trad.png") ; 
				}
								
				echo $tabs->flush() ; 
				
				echo $this->signature; 
				
				?>
			</div>
			<?php
		}
		
		/** ====================================================================================================================================================
		* Get information on the plugin
		* For instance <code> $info = pluginSedlex::get_plugins_data(WP_PLUGIN_DIR.'/my-plugin/my-plugin.php')</code> will return an array with 
		* 	- the folder of the plugin : <code>$info['Dir_Plugin']</code>
		* 	- the name of the plugin : <code>$info['Plugin_Name']</code>		
		* 	- the tags of the plugin : <code>$info['Plugin_Tag']</code>
		* 	- the url of the plugin : <code>$info['Plugin_URI']</code>
		* 	- the description of the plugin : <code>$info['Description']</code>
		* 	- the name of the author : <code>$info['Author']</code>
		* 	- the url of the author : <code>$info['Author_URI']</code>
		* 	- the version number : <code>$info['Version']</code>
		* 	- the email of the Author : <code>$info['Email']</code>
		* 
		* @param string $plugin_file path of the plugin main file. If no paramater is provided, the file is the current plugin main file.
		* @return array information on Name, Author, Description ...
		*/

		static public function get_plugins_data($plugin_file='') {
			if ($plugin_file == "")
				$plugin_file = $this->path ; 
		
			$plugin_data = implode('', file($plugin_file));
			preg_match("|Plugin Name:(.*)|i", $plugin_data, $plugin_name);
			preg_match("|Plugin Tag:(.*)|i", $plugin_data, $plugin_tag);
			preg_match("|Plugin URI:(.*)|i", $plugin_data, $plugin_uri);
			preg_match("|Description:(.*)|i", $plugin_data, $description);
			preg_match("|Author:(.*)|i", $plugin_data, $author_name);
			preg_match("|Author URI:(.*)|i", $plugin_data, $author_uri);
			preg_match("|Author Email:(.*)|i", $plugin_data, $author_email);
			preg_match("|Framework Email:(.*)|i", $plugin_data, $framework_email);
			preg_match('|$this->tableSQL = "(.*)"|i', $plugin_data, $plugin_database);
			if (preg_match("|Version:(.*)|i", $plugin_data, $version)) {
				$version = trim($version[1]);
			} else {
				$version = '';
			}
			
			$plugins_allowedtags = array('a' => array('href' => array()),'code' => array(), 'p' => array() ,'ul' => array() ,'li' => array() ,'strong' => array());

			if (isset($plugin_name[1]))
				$plugin_name = wp_kses(trim($plugin_name[1]), $plugins_allowedtags);
			else 
				$plugin_name = "" ; 
			if (isset($plugin_tag[1]))
				$plugin_tag = wp_kses(trim($plugin_tag[1]), $plugins_allowedtags);
			else 
				$plugin_tag = "" ; 
			if (isset($plugin_uri[1]))
				$plugin_uri = wp_kses(trim($plugin_uri[1]), $plugins_allowedtags);
			else 
				$plugin_uri = "" ; 
			if (isset($description[1]))
				$description = wp_kses(trim($description[1]), $plugins_allowedtags);
			else 
				$description = "" ; 
			if (isset($author_name[1]))
				$author = wp_kses(trim($author_name[1]), $plugins_allowedtags);
			else 
				$author = "" ; 
			if (isset($author_uri[1]))
				$author_uri = wp_kses(trim($author_uri[1]), $plugins_allowedtags);
			else 
				$author_uri = "" ; 
			if (isset($author_email[1]))
				$author_email = wp_kses(trim($author_email[1]), $plugins_allowedtags);
			else 
				$author_email = "" ; 
			if (isset($framework_email[1]))
				$framework_email = wp_kses(trim($framework_email[1]), $plugins_allowedtags);
			else 
				$framework_email = "" ; 
			if (isset($version))
				$version = wp_kses($version, $plugins_allowedtags);
			else 
				$version = "" ; 
			if (isset($plugin_database[1]))
				$database = trim($plugin_database[1]) ; 
			else 
				$database = "" ; 
			
			return array('Dir_Plugin'=>basename(dirname($plugin_file)) , 'Plugin_Name' => $plugin_name,'Plugin_Tag' => $plugin_tag, 'Plugin_URI' => $plugin_uri, 'Description' => $description, 'Author' => $author, 'Author_URI' => $author_uri, 'Email' => $author_email, 'Framework_Email' => $framework_email, 'Version' => $version, 'Database' => $database);
		}
		
		/** ====================================================================================================================================================
		* Ensure that the needed folders are writable by the webserver. 
		* Will check usual folders and files.
		* You may add this in your configuration page <code>$this->check_folder_rights( array(array($theFolderToCheck, "rw")) ) ;</code>
		* If not a error msg is printed
		* 
		* @param array $folders list of array with a first element (the complete path of the folder to check) and a second element (the needed rights "r", "w" [or a combination of those])
		* @return void
		*/
		
		public function check_folder_rights ($folders) {
			$f = array(array(WP_CONTENT_DIR.'/sedlex/',"rw"), 
					array(WP_PLUGIN_DIR.'/'.str_replace(basename( __FILE__),"",plugin_basename( __FILE__)) .'readme.txt',"rw"), 
					array(WP_PLUGIN_DIR.'/'.str_replace(basename( __FILE__),"",plugin_basename( __FILE__)) .'css/',"r"), 
					array(WP_PLUGIN_DIR.'/'.str_replace(basename( __FILE__),"",plugin_basename( __FILE__)) .'js/',"r"), 
					array(WP_PLUGIN_DIR.'/'.str_replace(basename( __FILE__),"",plugin_basename( __FILE__)) .'lang/',"rw"), 
					array(WP_PLUGIN_DIR.'/'.str_replace(basename( __FILE__),"",plugin_basename( __FILE__)) .'core/',"r"), 
					array(WP_PLUGIN_DIR.'/'.str_replace(basename( __FILE__),"",plugin_basename( __FILE__)) .'core/img/',"r"), 
					array(WP_PLUGIN_DIR.'/'.str_replace(basename( __FILE__),"",plugin_basename( __FILE__)) .'core/templates/',"r"), 
					array(WP_PLUGIN_DIR.'/'.str_replace(basename( __FILE__),"",plugin_basename( __FILE__)) .'core/lang/',"rw"), 
					array(WP_PLUGIN_DIR.'/'.str_replace(basename( __FILE__),"",plugin_basename( __FILE__)) .'core/js/',"r"), 
					array(WP_PLUGIN_DIR.'/'.str_replace(basename( __FILE__),"",plugin_basename( __FILE__)) .'core/css/',"r")) ; 
			$folders = array_merge($folders, $f) ; 
			
			$result = "" ; 
			foreach ($folders as $f ) {
				if ( (is_dir($f[0])) || (@is_file($f[0])) ) {
					$readable = Utils::is_readable($f[0]) ; 
					$writable = Utils::is_writable($f[0]) ; 
					
					@chmod($f[0], 0755) ; 
					
					$pb = false ; 
					if ((strpos($f[1], "r")!==false) && (!$readable)) {
						$pb = true ; 
					}
					if ((strpos($f[1], "w")!==false) && (!$writable)) {
						$pb = true ; 
					}
					
					if ($pb) {
						if  (is_dir($f[0])) 
							$result .= "<p>".sprintf(__('The folder %s is not %s !','SL_framework'), "<code>".$f[0]."</code>", "<code>".$f[1]."</code>")."</p>" ; 
						if  (@is_file($f[0])) 
							$result .= "<p>".sprintf(__('The file %s is not %s !','SL_framework'), "<code>".$f[0]."</code>", "<code>".$f[1]."</code>")."</p>" ; 
					}
				} else {
					// We check if the last have an extension
					if (strpos(basename($f[0]) , ".")===false) {
						// It is a folder
						if (!@mkdir($f[0],0755,true)) {
							$result .= "<p>".sprintf(__('The folder %s does not exists and cannot be created !','SL_framework'), "<code>".$f[0]."</code>")."</p>" ; 
						}
					} else {
					
						$foldtemp = str_replace(basename($f[0]), "", str_replace(basename($f[0])."/","", $f[0])) ; 
						// We create the sub folders
						if ((!is_dir($foldtemp))&&(!@mkdir($foldtemp,0755,true))) {
							$result .= "<p>".sprintf(__('The folder %s does not exists and cannot be created !','SL_framework'), "<code>".$foldtemp."</code>")."</p>" ; 
						} else {
							// We touch the file
							@chmod($foldtemp, 0755) ; 
							if (@file_put_contents($f[0], '')===false) {
								$result .= "<p>".sprintf(__('The file %s does not exists and cannot be created !','SL_framework'), "<code>".$f[0]."</code>")."</p>" ; 
							}
						}
					}
				}
			}
			if ($result != "") {
				echo "<div class='error fade'><p>".__('There are some issues with folders rights. Please corret them as soon as possible as they could induce bugs and instabilities.','SL_framework')."</p><p>".__('Please see below:','SL_framework')."</p>".$result."</div>" ; 
			}
		}
		
		/** ====================================================================================================================================================
		* Get the displayed content
		* 
		* @return void
		*/
	
		function the_content_SL($content) {
			global $post ; 
			// If it is the loop and an the_except is called, we leave
			if (!is_single()) {
				// If page 
				if (is_page()) {
					if (method_exists($this,'_modify_content')) {
						return $this->_modify_content($content, 'page', false) ; 
					}
					return $content; 	
				// else
				} else {
					// si excerpt
					if ( (method_exists($this,'_modify_content')) && (!$this->excerpt_called_SL)) {
						return $this->_modify_content($content, get_post_type($post->ID), true) ; 
					}
					return $content ; 
				}
			} else {
	
				if ( (method_exists($this,'_modify_content')) && (!$this->excerpt_called_SL)) {
					return $this->_modify_content($content, get_post_type($post->ID), false) ; 
				}
				return $content ; 
			}
		}
		
		/** ====================================================================================================================================================
		* Get the excerpt content
		* 
		* @return void
		*/
		function the_excerpt_ante_SL($content) {
			$this->excerpt_called_SL=true ; 
			return $content ; 
		}
		
		function the_excerpt_SL($content) {
			global $post ; 
			$this->excerpt_called_SL = false ; 
			
			if ( (method_exists($this,'_modify_content')) && (!$this->excerpt_called_SL)) {
				return $this->_modify_content($content, get_post_type($post->ID), true) ; 
			}
			
			return $content ; 
		}
	}
	
	/** =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
	* This PHP class has only for purpose to fake a plugin class and allow parameters administration for the framework.
	* 
	*/
	class coreSLframework extends pluginSedLex {
	/** ====================================================================================================================================================
	* Plugin initialization
	* 
	* @return void
	*/
	static $instance = false;
	
		/**====================================================================================================================================================
		* Constructor
		*
		* @return void
		*/
		function coreSLframework() {
			$this->path = __FILE__ ; 
			$this->pluginID = get_class() ; 
		}
	
		
		/** ====================================================================================================================================================
		* Define the default option values of the framework
		* 
		* @param string $option the name of the option
		* @return variant of the option
		*/
		public function get_default_option($option) {
			switch ($option) {
				// Alternative default return values (Please modify)
				case 'debug_level' 			: return 3 		; break ; 
				case 'global_allow_translation_by_blogs' : return true ; break ; 
			}
			return null ;
		}	
	}

}
						


?>
Return current item: Image Zoom