[pLog-svn] r3314 - plog/trunk/class/dao

jondaley at devel.lifetype.net jondaley at devel.lifetype.net
Mon May 1 22:22:52 GMT 2006


Author: jondaley
Date: 2006-05-01 22:22:51 +0000 (Mon, 01 May 2006)
New Revision: 3314

Modified:
   plog/trunk/class/dao/articlecategories.class.php
   plog/trunk/class/dao/articles.class.php
Log:
removed debug info

Modified: plog/trunk/class/dao/articlecategories.class.php
===================================================================
--- plog/trunk/class/dao/articlecategories.class.php	2006-05-01 21:36:06 UTC (rev 3313)
+++ plog/trunk/class/dao/articlecategories.class.php	2006-05-01 22:22:51 UTC (rev 3314)
@@ -158,7 +158,7 @@
 					break;
 			}
 			
-			print_r($sorting);
+//			print_r($sorting);
 		
 			$categories = $this->getMany( "blog_id",
 			                              $blogId,

Modified: plog/trunk/class/dao/articles.class.php
===================================================================
--- plog/trunk/class/dao/articles.class.php	2006-05-01 21:36:06 UTC (rev 3313)
+++ plog/trunk/class/dao/articles.class.php	2006-05-01 22:22:51 UTC (rev 3314)
@@ -70,11 +70,31 @@
         }
         
         /**
+         * Check to see if an article title already exists.  Used
+         * when article urls don't have dates in them, so post names
+         * must be unique across the entire blog.
+         *
+         * @param artTitle Identifier of the article we want to fetch
+         * @param blogId If set, the article must belong to the given blog
+         * @return Returns an Article object or 'false' otherwise.
+         */        
+        function checkBlogArticleTitle( $artTitle, $blogId = -1, $artId = -1 )
+        {
+			$prefix = $this->getPrefix();
+            $query = "SELECT a.id FROM {$prefix}articles a ";
+
+			$query .= "WHERE a.slug = '".Db::qstr($artTitle)."'";
+            if( $blogId != -1 )
+                $query .= " AND a.blog_id = ".Db::qstr($blogId);
+            if( $artId != -1 )
+                $query .= " AND a.id != $artId;";
+
+            return $this->_getBlogArticleFromQuery( $query, false, true );
+        }
+
+                /**
          * Gets an article from the database, given its slug, this is used
          * with the fancy permalinks
-         * This method will always return the first matching article, so
-         * if there're more than one article with the same title, you will
-         * always get only one of them.
          *
          * @param artTitle Identifier of the article we want to fetch
          * @param blogId If set, the article must belong to the given blog
@@ -112,11 +132,11 @@
 			
 			return( $article );
         }
-        
+
         /**
          * @private
          */
-        function _getBlogArticleFromQuery( $query, $includeHiddenFields )
+        function _getBlogArticleFromQuery( $query, $includeHiddenFields, $onlyCheck=false )
         {
             // we send the query and then fetch the first array with the result
             $result = $this->Execute( $query );
@@ -127,8 +147,12 @@
             if ( $result->RecordCount() == 0)
                 return false;
 
+            if($onlyCheck){
+                $result->Close();
+                return true;
+            }
+            
             $row = $result->FetchRow( $result );
-
             $article = $this->mapRow( $row, $includeHiddenFields );
 
             return $article;        
@@ -755,6 +779,20 @@
          */
         function addArticle( &$newArticle )
         {
+
+            $slug = $newArticle->getPostSlug();
+            $i = 1;
+                // check if there already is a blog with the same mangled name
+            while($this->checkBlogArticleTitle($slug, $newArticle->getBlog())){
+                $i++;
+                    // and if so, assign a new one
+                    // if we already tried with blogname+"i" we have
+                    // to strip "i" before adding it again!
+                $slug = substr($slug, 0,
+                               ($i > 2) ? strlen($slug)-strlen($i-1) : strlen($slug)).$i;
+            }
+            $newArticle->setPostSlug($slug);
+
             include_once( PLOG_CLASS_PATH.'class/dao/customfields/customfields.class.php' );
             include_once( PLOG_CLASS_PATH."class/dao/blogs.class.php" );
             
@@ -890,6 +928,20 @@
          */
         function updateArticle( $article )
         {
+            $slug = $article->getPostSlug();
+            $i = 1;
+                // check if there already is a blog with the same mangled name
+            while($this->checkBlogArticleTitle($slug, $article->getBlog(),
+                                               $article->getId())){
+                $i++;
+                    // and if so, assign a new one
+                    // if we already tried with slug+"i" we have
+                    // to strip "i" before adding it again!
+                $slug = substr($slug, 0,
+                               ($i > 2) ? strlen($slug)-strlen($i-1) : strlen($slug)).$i;
+            }
+            $article->setPostSlug($slug);
+            
 			// keep the old version, since we're going to need it to udpate the category counters
 			$oldArticle = $this->getArticle( $article->getId());
 		



More information about the pLog-svn mailing list