Tagcloud in Summary page for 1.2.9

Tagcloud in Summary page for 1.2.9

Postby omurtlak on Wed Dec 16, 2009 5:11 am

first of all sorry for my bad english
i edit the tagcloud plugin and now it is avaible to show it in summary pages

plugintagcloud.class.php (change it as bellow)
Code: Select all

<?php

    lt_include( PLOG_CLASS_PATH."class/plugin/pluginbase.class.php" );

define('TAGCLOUD_FILTER_REGEXP', '/\s*[\s+\.|\?|,|(|)|\-+|\'|\"|!|=|;|&#0215;|\$|\/|:|{|}]\s*/i');
define('MAX_TAGCLOUD_REPEATS_IN_ONE_POST', 3);

    /*
     * This plugin generate TagCloud for a specific Blog
     */
     class PluginTagCloud extends PluginBase
     {
   
        var $pluginEnabled;
        var $cacheFolder;
         
        /*
        * Constructor
        */
        function PluginTagCloud( $source = "" ){

            $this->author = "Ben Yacoub Hatem";
            $this->desc = "This plugin generate TagCloud for a specific Blog, usage
                    :<br/>
                    <b>{ \$tagcloud->getTagCloud()}</b><br/><br/>
                   getTagCloud return html of the Tag Cloud ready to use.<br/>
                   See Readme for example usage.";
               
            $this->PluginBase($source);
            lt_include( PLOG_CLASS_PATH."class/database/db.class.php" );
            $this->db =& Db::getDb();
            $this->id = "tagcloud";
            $this->version = "20070924";
           
            $this->locales = Array("en_UK");
                               
            if( $source == "admin" )
                $this->initAdmin();
            else
                $this->init();
        }
     
        function init()
        {
            // register the events we want
            $this->registerNotification( EVENT_POST_POST_ADD );
            $this->registerNotification( EVENT_POST_POST_UPDATE );
            $this->registerNotification( EVENT_POST_POST_DELETE );   
        }
   
     
        function initAdmin()
        {
            $this->init();
           
            if (defined( "EVENT_POST_ADMIN_PURGE_TEMP_FOLDER" )) {
                // register the events we want
                $this->registerNotification( EVENT_POST_ADMIN_PURGE_TEMP_FOLDER );
            }
                   
            $this->registerAdminAction( "tagcloud", "PluginTagCloudConfigAction" );
            $this->registerAdminAction( "updateTagCloudConfig", "PluginTagCloudUpdateConfigAction" );
            $menu =& Menu::getMenu();
            if( !$menu->entryExists( "/menu/controlCenter/manageAppearancePlugins" ))                       
                $this->addMenuEntry( "/menu/controlCenter", "manageAppearancePlugins", "", "", true, false );           
            $this->addMenuEntry( "/menu/controlCenter/manageAppearancePlugins", "TagCloud", "?op=tagcloud", "" );           
        }
       
        function register()
        {
            $blogSettings = $this->blogInfo->getSettings();
            $this->pluginEnabled = $blogSettings->getValue( "plugin_tagcloud_enabled" );
            if(!$this->isEnabled())
                return;
           
            $config =& Config::getConfig();
            $this->cacheFolder = $config->getValue('temp_folder');
         
            $this->cacheFolder = $this->cacheFolder.'/tagcloud/'.$this->blogInfo->getId();
         
            if( !File::exists( $this->cacheFolder )) {
                File::createDir( $this->cacheFolder, 0755 );
            }
        }
       

        function isEnabled()
        {
            return $this->pluginEnabled;
        }       

        /**
         * process the events that we have registered
         *
         * @see PluginBase::process
         * @see PluginManager
         */
        function process( $eventType, $params )
        {
            $validEvent = false;

            // Looking for EVENT_POST_POST_ADD, EVENT_POST_POST_UPDATE, EVENT_POST_POST_DELETE
            // or EVENT_POST_ADMIN_PURGE_TEMP_FOLDER (if defined)
            if ( $eventType == EVENT_POST_POST_ADD ||
                 $eventType == EVENT_POST_POST_UPDATE ||
                 $eventType == EVENT_POST_POST_DELETE ||
                (defined( "EVENT_POST_ADMIN_PURGE_TEMP_FOLDER" ) && $eventType == EVENT_POST_ADMIN_PURGE_TEMP_FOLDER) )
            {
                $validEvent = true;
            }

            // make sure we're processing the right event!
            if( $validEvent == false)
            {
                return true;
            }
           
            // Load all of the settings for this blog
         $this->register();

            if(!$this->isEnabled())
            {
                return true;
            }
           
            // Update the Blogtime png
            $this->createCloud();

            return true;
        }
       


   /*
   * Return cloud of the latest articles
   */
   function createCloud(){
      $prefix = Db::getPrefix();
      $blogId = $this->blogInfo->getId();
      $blogSettings = $this->blogInfo->getSettings();
       
        if(!$this->isEnabled())
            return false;

        $MaxArticles = $blogSettings->getValue( "plugin_tagcloud_max_articles" );
        $MaxKeywords = $blogSettings->getValue( "plugin_tagcloud_max_keywords" );
       
         $maxSize = $blogSettings->getValue( "plugin_tagcloud_max_size" );
      $maxWeight = $blogSettings->getValue( "plugin_tagcloud_max_weight" );

      $minSize = $blogSettings->getValue( "plugin_tagcloud_min_size" );
      $minWeight = $blogSettings->getValue( "plugin_tagcloud_min_weight" );   
      $minWordLength = $blogSettings->getValue( "plugin_tagcloud_min_word_length" );   
      
      $bannedwords = $blogSettings->getValue( "plugin_tagcloud_banned_keywords" );
      $bannedwords = explode(",", strtolower($bannedwords));

      $MaxArticles = mysql_escape_string($MaxArticles);
   
      $query = "SELECT t.normalized_text,t.normalized_topic FROM " . $prefix .
          "articles a, " . $prefix."articles_text t" .
          " WHERE a.id=t.article_id " .
          " AND a.status=1 AND a.blog_id = " . $blogId .
          " ORDER BY a.date DESC LIMIT 0,$MaxArticles;";
   
      $result = $this->db->Execute($query);
        if(!$result || ($result->RecordCount() == 0))
          return false;

        $data = array();
      // get the articles content
      while ($row = $result->FetchRow()) {
                // Add all words of the topic
         $words = preg_split(TAGCLOUD_FILTER_REGEXP, strtolower($row['normalized_topic']));
            foreach($words as $word){
                if(empty($data[$word]))
                    $data[$word] = 1;
                else
                    $data[$word]++;
            }

                // Limit the amount of occurrences in one post, to prevent
                // one post from taking over all of the statistics.
                // TODO: Make the number of occurrences allowed a configuration
                //       option
            $text_limited = array();
            $words = preg_split(TAGCLOUD_FILTER_REGEXP, strtolower($row['normalized_text']));
            foreach($words as $word){
                if(empty($text_limited[$word])){
                    $text_limited[$word] = 1;
                    if(empty($data[$word]))
                        $data[$word] = 1;
                    else
                        $data[$word]++;
                }
                else if($text_limited[$word] < MAX_TAGCLOUD_REPEATS_IN_ONE_POST){
                    $text_limited[$word]++;
                    $data[$word]++;
                }
            }
      }   
     
      // Remove unwanted keywords
      foreach($data as $k=>$v) {
            $found = array_search($k,$bannedwords);
         if(($found === FALSE || $found === NULL) && (strlen($k) >= $minWordLength)) {
            if (isset($new_acv[$k]))
               $new_acv[$k] += $v;
            else
               $new_acv[$k] = $v;
         }
      }
      
      // First sort the array by value, in reverse order
      arsort($new_acv);
      
      // Now limit the array to $MaxKeywords
        $new_acv = array_slice($new_acv, 0, $MaxKeywords);

            // get the highest and lowest occurrences
        $maxValue = current($new_acv);
        $minValue = end($new_acv);

      // Sort the keys alphabetically.
      ksort( $new_acv );
      
      // Normalize the max value
      $maxValue = $maxValue - $minValue;
            // avoid a divide by zero if all of the words in our group
            // occur exactly the same number of times.
        if($maxValue == 0)
            $maxValue = 1;
      
      // Create the Cloud
        $saveFile = $this->cacheFolder."/tagcloud"; 
       $fh = fopen( $saveFile, "w");

       if ($fh) {
            $rg = $this->blogInfo->getBlogRequestGenerator();
            $baseUrl = $rg->getBaseUrl();
           
            foreach( $new_acv as $k=>$v) {
               
                $value = $v - $minValue;
               
                $size = (($value *$maxSize)/$maxValue) + $minSize;
                $weight = (($value *$maxWeight)/$maxValue) + $minWeight;
               
                if ($size > $maxSize) $size = $maxSize;
                if ($weight > $maxWeight) $weight = $maxWeight;
                $weight = floor($weight / 100) * 100;
               
            $tag = "<a rel=\"nofollow\" href=\"{$baseUrl}?searchTerms=$k&amp;op=Search&amp;blogId={$blogId}\" style=\"font-size: {$size}em; font-weight: {$weight}; line-height: 90%\" title=\"$k\">$k</a>\n";
               
            //$tag = "<a href=\"/search/".urlencode($k)."\" style=\"line-height: 90%\" title=\"$k\">$k</a>\n";
                fwrite($fh, $tag);
           }
      
          fclose($fh);
           File::chMod($saveFile, 0644);
       }
      
      

      // First sort the array by value, in reverse order
      arsort($new_acv);
      
      $saveFileSummary = $this->cacheFolder."/tagcloudsummary"; 
       $fh = fopen( $saveFileSummary, "w");

       if ($fh) {
           
           
            foreach( $new_acv as $k=>$v) {
               
                $value = $v - $minValue;
               
                $size = (($value *$maxSize)/$maxValue) + $minSize;
                $weight = (($value *$maxWeight)/$maxValue) + $minWeight;
               
                if ($size > $maxSize) $size = $maxSize;
                if ($weight > $maxWeight) $weight = $maxWeight;
                $weight = floor($weight / 100) * 100;
                $tag = "<a rel=\"nofollow\" href=\"{$baseUrl}?searchTerms=$k&amp;op=Search&amp;blogId={$blogId}\" style=\"font-size: {$size}em; font-weight: {$weight}; line-height: 90%\" title=\"$k\">$k</a>\n";

               // you can edit tag links for seo friendly link
               // $tag = "<a href=\"/search/".urlencode($k)."\" style=\"line-height: 90%\" title=\"$k\">$k</a>\n";
           


     fwrite($fh, $tag);
           }
      
          fclose($fh);
           File::chMod($saveFile, 0644);
       }
      
    }
   
       /*
   * Return cloud of the latest articles
   */
    function getTagCloud(){

       $Cloud = '';
      
        if ($this->isEnabled())
        {
            $saveFile = $this->cacheFolder."/tagcloud"; 
           
   
            if(File::isReadable($saveFile)){
                $fh = fopen( $saveFile, "r");
                if ($fh)
                {
                    $Cloud = fread($fh, filesize($saveFile));
                    fclose($fh);
                }
            }
        }

        return $Cloud;
    }
   
   
   
    function getPluginConfigurationKeys()
    {
        lt_include( PLOG_CLASS_PATH."class/data/validator/integervalidator.class.php" );
        lt_include( PLOG_CLASS_PATH."class/data/validator/floatvalidator.class.php" );
        lt_include( PLOG_CLASS_PATH."class/data/validator/stringvalidator.class.php" );
       
        return( Array(
                    Array( "name" => "plugin_tagcloud_enabled", "type" => "boolean" ),
                    Array( "name" => "plugin_tagcloud_max_articles",
                           "validator" => new IntegerValidator(), "type" => "integer", "allowEmpty" => true ),
                    Array( "name" => "plugin_tagcloud_max_keywords",
                           "validator" => new IntegerValidator(), "type" => "integer", "allowEmpty" => true ),
                    Array( "name" => "plugin_tagcloud_min_size",
                           "validator" => new FloatValidator(), "type" => "integer", "allowEmpty" => true ),
                    Array( "name" => "plugin_tagcloud_max_size",
                           "validator" => new FloatValidator(), "type" => "integer", "allowEmpty" => true ),
                    Array( "name" => "plugin_tagcloud_min_weight",
                           "validator" => new IntegerValidator(), "type" => "integer", "allowEmpty" => true ),
                    Array( "name" => "plugin_tagcloud_max_weight",
                           "validator" => new IntegerValidator(), "type" => "integer", "allowEmpty" => true ),
                    Array( "name" => "plugin_tagcloud_min_word_length",
                           "validator" => new IntegerValidator(), "type" => "integer", "allowEmpty" => true ),
                    Array( "name" => "plugin_tagcloud_banned_keywords",
                           "validator" => new StringValidator(), "type" => "string", "allowEmpty" => true ),
                    ));
    }

}
?>





in class/locale/locale.class.php (add this bellow functions)
add the function before function Locale( $code ) line;
Code: Select all

function getTagCloudSummary($blogid,$LinestoRead){

       $Cloud = '';
      
      $config =& Config::getConfig();
            $this->cacheFolder = $config->getValue('temp_folder');
         
            $this->cacheFolder = $this->cacheFolder.'/tagcloud/'.$blogid;
         
            $saveFile = $this->cacheFolder."/tagcloudsummary"; 
           
   
            if(File::isReadable($saveFile)){
                $fh = fopen( $saveFile, "r");
                if ($fh)
                {
                    for ($lines=1;$lines<=$LinestoRead; $lines++)
               {
               $Cloud = $Cloud ." ". fgets($fh);
                    }
               
               fclose($fh);
                }
            }
       

        return $Cloud;
    }


function getMostActiveBlogs2( $maxBlogs2 = 0 )
         {
         
         lt_include( PLOG_CLASS_PATH."class/summary/dao/summarystats.class.php" );
      
         $stats2       = new SummaryStats();
          $mostactive = $stats2->getMostActiveBlogs($maxBlogs2);   
         
            return $mostactive;
        }




we put the getTagCloudSummary($blogid,$LinestoRead) to locales.class.php cause locale class is active in all pages

now we can use as bellow;

{ $locale->getTagCloudSummary($blog->getId(),10)}

in summary pages template; usage for most active blogs;

Code: Select all
 {assign var=activeBlogs value=$locale->getMostActiveBlogs2()}
       
   
    {if $activeBlogs}
     
        {foreach from=$activeBlogs item=blog}
         { $locale->getTagCloudSummary($blog->getId(),10)}
         
        {/foreach}
     
    {/if}
omurtlak
 
Posts: 1
Joined: Wed Dec 16, 2009 2:54 am
LifeType Version: 1.2.9

Return to Plugin Development Team

cron