[pLog-svn] r1798 - in plog/branches/plog-1.0.1/class: locale plugin

oscar at devel.plogworld.net oscar at devel.plogworld.net
Sun Apr 10 19:28:00 GMT 2005


Author: oscar
Date: 2005-04-10 19:27:59 +0000 (Sun, 10 Apr 2005)
New Revision: 1798

Modified:
   plog/branches/plog-1.0.1/class/locale/locales.class.php
   plog/branches/plog-1.0.1/class/plugin/pluginbase.class.php
   plog/branches/plog-1.0.1/class/plugin/pluginmanager.class.php
Log:
this should allow users to add new locales to plugin dynamically, without the need to alter the PluginBase::locales array as it was so far. In addition to that, plugins do not load *all* the locales that they provide as it was being done so far, so hopefully this will reduce the memory consumption too...

Modified: plog/branches/plog-1.0.1/class/locale/locales.class.php
===================================================================
--- plog/branches/plog-1.0.1/class/locale/locales.class.php	2005-04-10 15:39:27 UTC (rev 1797)
+++ plog/branches/plog-1.0.1/class/locale/locales.class.php	2005-04-10 19:27:59 UTC (rev 1798)
@@ -51,7 +51,7 @@
         {
         	// array to keep track of the locales that we have already loaded, so that
             // we don't have to fetch them from disk
-        	static $loadedLocales;
+        	static $loadedLocales;        	
 
             // if there is no locale parameter, we use the default one
         	if( $localeCode == null ) {
@@ -66,27 +66,21 @@
             }
             else { 
             	$locale = new Locale( $localeCode );
-
-    			// check if we have any plugin locales loaded for this language
-    			global $_plugins_loadedLocales;
-    			
-    			// loop through all the plugins, and check which ones of them provide the current locale and
-    			// which ones doesn't. If the blog uses a locale that the plugin does not provide, then we'll
-    			// use en_UK as the default, or else we'll load the correct one.
-    			foreach( $_plugins_loadedLocales as $pluginId => $pluginLocales ) {
-        			 if( is_array( $pluginLocales )) {
-        			     // let's check if the plugin has the locale that we need
-        			     if( isset( $pluginLocales["$localeCode"] )) {
-        			         $locale->mergeLocale( $pluginLocales["$localeCode"] );
-        			     }
-        			     else {
-        			         if( isset( $pluginLocales["en_UK"] )) {
-        			             $locale->mergeLocale( $pluginLocales["en_UK"] );        			         
-        			         }        			         
-        			     }
-        			 }
-    			}
-
+                $pm =& PluginManager::getPluginManager();                
+                foreach( $pm->_pluginList as $pluginId ) {
+                    if( $pm->pluginHasLocale( $pluginId, $localeCode )) {
+                        // if the plugin provides the locale that we need, continue
+                        $pluginLocale = Locales::getPluginLocale( $pluginId, $localeCode );                        
+                    }
+                    else {
+                        // if not, try to load en_UK by default
+                        $pluginLocale = Locales::getPluginLocale( $pluginId, "en_UK" );
+                    }
+                    
+                    // merge the plugin locale with the big locale
+                    $locale->mergeLocale( $pluginLocale );                    
+                }
+                
                 $loadedLocales[$localeCode] = $locale;
             }
 			
@@ -102,7 +96,7 @@
 		 */
 		function getPluginLocale( $pluginId, $localeCode = null )
 		{
-        	global $_plugins_loadedLocales;
+        	global $_plugins_loadedLocales;        	
 
         	if( $localeCode == null ) {
             	$config =& Config::getConfig();

Modified: plog/branches/plog-1.0.1/class/plugin/pluginbase.class.php
===================================================================
--- plog/branches/plog-1.0.1/class/plugin/pluginbase.class.php	2005-04-10 15:39:27 UTC (rev 1797)
+++ plog/branches/plog-1.0.1/class/plugin/pluginbase.class.php	2005-04-10 19:27:59 UTC (rev 1798)
@@ -324,17 +324,16 @@
 		}
 		
 		/**
-		 * returns the list of supported locales by this plugin, or an empty array if the plugin
-		 * does not define any array.
+		 * returns true whether the plugin has the given locale
 		 *
-		 * @return Array
+		 * @param localeCode the locale that we'd like to check
+		 * @return whether the plugin provides the requested locale
 		 */
-		function getSupportedLocales()
+		function hasLocale( $localeCode )
 		{
-			if( !is_array( $this->locales ))
-				return Array();
-			else
-				return $this->locales;
+		  $path = "plugins/".$this->getId()."/locale/locale_".$localeCode.".php";
+		  
+		  return( File::isReadable( $path ));
 		}
     }
 ?>

Modified: plog/branches/plog-1.0.1/class/plugin/pluginmanager.class.php
===================================================================
--- plog/branches/plog-1.0.1/class/plugin/pluginmanager.class.php	2005-04-10 15:39:27 UTC (rev 1797)
+++ plog/branches/plog-1.0.1/class/plugin/pluginmanager.class.php	2005-04-10 19:27:59 UTC (rev 1798)
@@ -78,6 +78,11 @@
 			if( $this->_pluginList == "" )
 				$this->_pluginList = Array();
         }
+        
+        function getPluginList()
+        {
+            return( $this->_pluginList );
+        }
 
         /**
          * Sets the blog info
@@ -162,11 +167,8 @@
 						$className = "Plugin".$plugin;
 						include_once( $pluginFullPath );
 						$classInstance = new $className();
-						$name = $classInstance->getId();
-						$supportedLocales = $classInstance->getSupportedLocales();
-                   		foreach( $supportedLocales as $locale ) {
-							$this->_loadPluginLocale( $classInstance->getId(), $locale );
-						}
+						$name = $classInstance->getId();						
+
 						$classInstance->setPluginFolder( PLOG_CLASS_PATH.$pluginFile."/" );
 						
 						// tell the resource loader that it should try to load actions from this folder
@@ -339,5 +341,18 @@
 
             return $events;
         }
+        
+        /**
+         * returns true if the plugin provides the requested locale
+         *
+         * @param pluginId The plugin identifier that we're like to check
+         * @param localeCode the locale code
+         * @return True if the plugin has this locale or false otherwise
+         * @static
+         */
+        function pluginHasLocale( $pluginId, $localeCode ) 
+        {
+            return( File::isReadable( "plugins/$pluginId/locale/locale_{$localeCode}.php" ));
+        }
     }
 ?>




More information about the pLog-svn mailing list