Author: david
Date: Fri Oct 23 21:17:37 2009
New Revision: 3819

Log:
Move code for filtering lucence search by draft status and repository into 
QubitAcl methods to re-use in search.

Modified:
   trunk/apps/qubit/modules/informationobject/actions/listAction.class.php
   trunk/plugins/qbAclPlugin/lib/QubitAcl.class.php

Modified: 
trunk/apps/qubit/modules/informationobject/actions/listAction.class.php
==============================================================================
--- trunk/apps/qubit/modules/informationobject/actions/listAction.class.php     
Fri Oct 23 18:05:14 2009        (r3818)
+++ trunk/apps/qubit/modules/informationobject/actions/listAction.class.php     
Fri Oct 23 21:17:37 2009        (r3819)
@@ -81,98 +81,8 @@
       $query = $request->query;
     }
 
-    $deniedRepositories = array();
-    $repositoryAccess = QubitAcl::getRepositoryAccess(QubitAclAction::READ_ID);
-    if (1 == count($repositoryAccess))
-    {
-      // If all repositories are denied 'read' access, re-route user to login
-      if (QubitAcl::DENY == $repositoryAccess[0]['access'])
-      {
-        QubitAcl::forwardUnauthorized();
-      }
-    }
-    else
-    {
-      $subquery = new Zend_Search_Lucene_Search_Query_MultiTerm();
-      while ($repo = array_shift($repositoryAccess))
-      {
-        if ('*' != $repo['id'])
-        {
-          $subquery->addTerm(new Zend_Search_Lucene_Index_Term($repo['id'], 
'repositoryid'));
-          if (QubitAcl::DENY == $repo['access'])
-          {
-            $deniedRepositories[] = $repo['id'];
-          }
-        }
-        else
-        {
-          if (QubitAcl::DENY == $repo['access'])
-          {
-            // Require repos to be specifically allowed (all others prohibited)
-            $query->addSubquery($subquery, true /* required */);
-          }
-          else
-          {
-            // Prohibit specified repos (all others allowed)
-            $query->addSubquery($subquery, false /* prohibited */);
-          }
-        }
-      }
-    }
-
-    // Filter out 'draft' items by repository
-    $repositoryViewDrafts = 
QubitAcl::getRepositoryAccess(QubitAclAction::VIEW_DRAFT_ID);
-    if (1 == count($repositoryViewDrafts))
-    {
-      if (QubitAcl::DENY == $repositoryViewDrafts[0]['access'])
-      {
-        // Don't show *any* draft info objects
-        $query->addSubquery(new Zend_Search_Lucene_Search_Query_Term(new 
Zend_Search_Lucene_Index_Term(QubitTerm::PUBLICATION_STATUS_DRAFT_ID, 
'publicationStatusId')), false);
-      }
-    }
-    else
-    {
-      // Get last rule in list, it will be the global rule with the opposite
-      // access of the preceeding rules (e.g. if last rule is "DENY ALL" then
-      // preceeding rules will be "ALLOW" rules)
-      $globalRule = array_pop($repositoryViewDrafts);
-
-      // If global rule is GRANT, then listed repos are exceptions so remove
-      // from results
-      if (QubitAcl::GRANT == $globalRule['access'])
-      {
-        while ($repo = array_shift($repositoryViewDrafts))
-        {
-          // Don't bother excluding repos (again) that have no read access at 
all
-          if (in_array($repo['id'], $deniedRepositories))
-          {
-            continue;
-          }
-
-          $subquery = new Zend_Search_Lucene_Search_Query_MultiTerm();
-          $subquery->addTerm(new Zend_Search_Lucene_Index_Term($repo['id'], 
'repositoryid'), true);
-          $subquery->addTerm(new 
Zend_Search_Lucene_Index_Term(QubitTerm::PUBLICATION_STATUS_DRAFT_ID, 
'publicationStatusId'), true);
-
-          // Filter rule should look like: "-(+id:356 +status:draft) -(+id:357 
+status:draft)"
-          $query->addSubquery($subquery, false /* prohibited */);
-        }
-      }
-
-      // If global rule is DENY, then only show the listed repo drafts
-      else
-      {
-        $subquery = new Zend_Search_Lucene_Search_Query_MultiTerm();
-
-        while ($repo = array_shift($repositoryViewDrafts))
-        {
-          $subquery->addTerm(new Zend_Search_Lucene_Index_Term($repo['id'], 
'repositoryid'), null);
-        }
-        $subquery->addTerm(new 
Zend_Search_Lucene_Index_Term(QubitTerm::PUBLICATION_STATUS_PUBLISHED_ID, 
'publicationStatusId'), null);
-
-        // Filter rule should look like "+(id:(356 357 358) status:published)"
-        $query->addSubquery($subquery, true /* required */);
-      }
-    }
+    $query = QubitAcl::searchFilterByRepository($query, 
QubitAclAction::READ_ID);
+    $query = QubitAcl::searchFilterDrafts($query);
 
     $this->pager = new QubitSearchPager;
     $this->pager->hits = $search->getEngine()->getIndex()->find($query);

Modified: trunk/plugins/qbAclPlugin/lib/QubitAcl.class.php
==============================================================================
--- trunk/plugins/qbAclPlugin/lib/QubitAcl.class.php    Fri Oct 23 18:05:14 
2009        (r3818)
+++ trunk/plugins/qbAclPlugin/lib/QubitAcl.class.php    Fri Oct 23 21:17:37 
2009        (r3819)
@@ -464,4 +464,107 @@
 
     throw new sfStopException();
   }
+
+  public static function searchFilterByRepository($query, $action)
+  {
+    $deniedRepositories = array();
+    $repositoryAccess = QubitAcl::getRepositoryAccess($action);
+    if (1 == count($repositoryAccess))
+    {
+      // If all repositories are denied access, re-route user to login
+      if (QubitAcl::DENY == $repositoryAccess[0]['access'])
+      {
+        QubitAcl::forwardUnauthorized();
+      }
+    }
+    else
+    {
+      $subquery = new Zend_Search_Lucene_Search_Query_MultiTerm();
+      while ($repo = array_shift($repositoryAccess))
+      {
+        if ('*' != $repo['id'])
+        {
+          $subquery->addTerm(new Zend_Search_Lucene_Index_Term($repo['id'], 
'repositoryid'));
+          if (QubitAcl::DENY == $repo['access'])
+          {
+            $deniedRepositories[] = $repo['id'];
+          }
+        }
+        else
+        {
+          if (QubitAcl::DENY == $repo['access'])
+          {
+            // Require repos to be specifically allowed (all others prohibited)
+            $query->addSubquery($subquery, true /* required */);
+          }
+          else
+          {
+            // Prohibit specified repos (all others allowed)
+            $query->addSubquery($subquery, false /* prohibited */);
+          }
+        }
+      }
+    }
+
+    return $query;
+  }
+
+  public static function searchFilterDrafts($query)
+  {
+    // Filter out 'draft' items by repository
+    $repositoryViewDrafts = 
QubitAcl::getRepositoryAccess(QubitAclAction::VIEW_DRAFT_ID);
+    if (1 == count($repositoryViewDrafts))
+    {
+      if (QubitAcl::DENY == $repositoryViewDrafts[0]['access'])
+      {
+        // Don't show *any* draft info objects
+        $query->addSubquery(new Zend_Search_Lucene_Search_Query_Term(new 
Zend_Search_Lucene_Index_Term(QubitTerm::PUBLICATION_STATUS_DRAFT_ID, 
'publicationStatusId')), false);
+      }
+    }
+    else
+    {
+      // Get last rule in list, it will be the global rule with the opposite
+      // access of the preceeding rules (e.g. if last rule is "DENY ALL" then
+      // preceeding rules will be "ALLOW" rules)
+      $globalRule = array_pop($repositoryViewDrafts);
+
+      // If global rule is GRANT, then listed repos are exceptions so remove
+      // from results
+      if (QubitAcl::GRANT == $globalRule['access'])
+      {
+        while ($repo = array_shift($repositoryViewDrafts))
+        {
+          // Don't bother excluding repos (again) that have no read access at 
all
+          if (in_array($repo['id'], $deniedRepositories))
+          {
+            continue;
+          }
+
+          $subquery = new Zend_Search_Lucene_Search_Query_MultiTerm();
+          $subquery->addTerm(new Zend_Search_Lucene_Index_Term($repo['id'], 
'repositoryid'), true);
+          $subquery->addTerm(new 
Zend_Search_Lucene_Index_Term(QubitTerm::PUBLICATION_STATUS_DRAFT_ID, 
'publicationStatusId'), true);
+
+          // Filter rule should look like: "-(+id:356 +status:draft) -(+id:357 
+status:draft)"
+          $query->addSubquery($subquery, false /* prohibited */);
+        }
+      }
+
+      // If global rule is DENY, then only show the listed repo drafts
+      else
+      {
+        $subquery = new Zend_Search_Lucene_Search_Query_MultiTerm();
+
+        while ($repo = array_shift($repositoryViewDrafts))
+        {
+          $subquery->addTerm(new Zend_Search_Lucene_Index_Term($repo['id'], 
'repositoryid'), null);
+        }
+        $subquery->addTerm(new 
Zend_Search_Lucene_Index_Term(QubitTerm::PUBLICATION_STATUS_PUBLISHED_ID, 
'publicationStatusId'), null);
+
+        // Filter rule should look like "+(id:(356 357 358) status:published)"
+        $query->addSubquery($subquery, true /* required */);
+      }
+    }
+
+    return $query;
+  }
 }

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Qubit Toolkit Commits" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.ca/group/qubit-commits?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to