Author: sevein
Date: Mon Aug 13 19:11:45 2012
New Revision: 12090

Log:
Add getRepositories method to QubitUser class, use it to print repository 
affiliation in the user profile page when the app is configured as 
multirepository. Fixes issue 1915.

Modified:
   trunk/apps/qubit/modules/user/templates/indexSuccess.php
   trunk/lib/model/QubitUser.php

Modified: trunk/apps/qubit/modules/user/templates/indexSuccess.php
==============================================================================
--- trunk/apps/qubit/modules/user/templates/indexSuccess.php    Mon Aug 13 
18:41:20 2012        (r12089)
+++ trunk/apps/qubit/modules/user/templates/indexSuccess.php    Mon Aug 13 
19:11:45 2012        (r12090)
@@ -47,6 +47,21 @@
     </div>
   <?php endif; ?>
 
+  <?php if (sfConfig::get('app_multi_repository')): ?>
+    <?php if (0 < count($repositories = $resource->getRepositories())): ?>
+      <div class="field">
+        <h3><?php echo __('Repository affiliation') ?></h3>
+        <div>
+          <ul>
+            <?php foreach ($repositories as $item): ?>
+              <li><?php echo render_title($item) ?></li>
+            <?php endforeach; ?>
+          </ul>
+        </div>
+      </div>
+    <?php endif; ?>
+  <?php endif; ?>
+
 </div>
 
 <?php echo get_partial('showActions', array('resource' => $resource)) ?>

Modified: trunk/lib/model/QubitUser.php
==============================================================================
--- trunk/lib/model/QubitUser.php       Mon Aug 13 18:41:20 2012        (r12089)
+++ trunk/lib/model/QubitUser.php       Mon Aug 13 19:11:45 2012        (r12090)
@@ -144,7 +144,7 @@
       if (!$user->active)
       {
         $error = 'inactive user';
-        
+
         return null;
       }
 
@@ -223,4 +223,72 @@
       }
     }
   }
-} // User
+
+  /**
+   * Get an array of QubitRepository objects where the current user has been
+   * added explicit access via its own user of any of its groups
+   *
+   * @return QubitUser
+   */
+  public function getRepositories()
+  {
+    // Get user's groups
+    $userGroups = array();
+    if (0 < count($aclUserGroups = $this->aclUserGroups))
+    {
+      foreach ($aclUserGroups as $aclUserGroup)
+      {
+        $userGroups[] = $aclUserGroup->groupId;
+      }
+    }
+    else
+    {
+      // User is *always* part of authenticated group
+      $userGroups = array(QubitAclGroup::AUTHENTICATED_ID);
+    }
+
+    // Get access control permissions
+    $criteria = new Criteria;
+    $criteria->addJoin(QubitAclPermission::OBJECT_ID, QubitObject::ID, 
Criteria::LEFT_JOIN);
+    $c1 = $criteria->getNewCriterion(QubitAclPermission::USER_ID, $this->id);
+
+    // Add group criteria
+    if (1 == count($userGroups))
+    {
+      $c2 = $criteria->getNewCriterion(QubitAclPermission::GROUP_ID, 
$userGroups[0]);
+    }
+    else
+    {
+      $c2 = $criteria->getNewCriterion(QubitAclPermission::GROUP_ID, 
$userGroups, Criteria::IN);
+    }
+    $c1->addOr($c2);
+
+    // Add information object criteria
+    $c3 = $criteria->getNewCriterion(QubitObject::CLASS_NAME, 
'QubitInformationObject');
+    $c4 = $criteria->getNewCriterion(QubitAclPermission::OBJECT_ID, null, 
Criteria::ISNULL);
+    $c3->addOr($c4);
+    $c1->addAnd($c3);
+    $criteria->add($c1);
+
+    // Sort
+    $criteria->addAscendingOrderByColumn(QubitAclPermission::CONSTANTS);
+    $criteria->addAscendingOrderByColumn(QubitAclPermission::OBJECT_ID);
+    $criteria->addAscendingOrderByColumn(QubitAclPermission::USER_ID);
+    $criteria->addAscendingOrderByColumn(QubitAclPermission::GROUP_ID);
+
+    // Build ACL
+    $repositories = array();
+    if (0 < count($permissions = QubitAclPermission::get($criteria)))
+    {
+      foreach ($permissions as $item)
+      {
+        if (null !== $constant = $item->getConstants(array('name' => 
'repository')))
+        {
+          $repositories[] = QubitRepository::getBySlug($constant);
+        }
+      }
+    }
+
+    return $repositories;
+  }
+}

-- 
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.com/group/qubit-commits?hl=en.

Reply via email to