Merge pull request #1886 from pratik-joshi/CRM-13681
[civicrm-core.git] / CRM / Member / Form / MembershipView.php
index 451514fa75f016eb336d0e79549619fc1b66f87c..c3c9dd11bf0b22b4e48981b0f1fbf2598d264a21 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /*
  +--------------------------------------------------------------------+
- | CiviCRM version 4.3                                                |
+ | CiviCRM version 4.4                                                |
  +--------------------------------------------------------------------+
  | Copyright CiviCRM LLC (c) 2004-2013                                |
  +--------------------------------------------------------------------+
@@ -101,27 +101,29 @@ class CRM_Member_Form_MembershipView extends CRM_Core_Form {
         $relatedContactId = CRM_Utils_Request::retrieve('cid', 'Positive', $this);
         $relatedDisplayName = CRM_Contact_BAO_Contact::displayName($relatedContactId);
         CRM_Member_BAO_Membership::del($id);
-        CRM_Core_Session::setStatus(ts('Related membership for %1 has been deleted.', array(1 => $relatedDisplayName)), ts('Membership Deleted'), 'success');
+        CRM_Core_Session::setStatus(ts('Related membership for %1 has been deleted.', array(1 => $relatedDisplayName)),
+          ts('Membership Deleted'), 'success');
         break;
       case 'create':
         $ids = array();
         $params = array(
-          'contact_id'           => CRM_Utils_Request::retrieve('rid', 'Positive', $this),
-          'membership_type_id'   => $owner['membership_type_id'],
-          'owner_membership_id'  => $owner['id'],
-          'join_date'            => CRM_Utils_Date::processDate($owner['join_date'], NULL, TRUE, 'Ymd'),
-          'start_date'           => CRM_Utils_Date::processDate($owner['start_date'], NULL, TRUE, 'Ymd'),
-          'end_date'             => CRM_Utils_Date::processDate($owner['end_date'], NULL, TRUE, 'Ymd'),
-          'source'               => ts('Manual Assignment of Related Membership'),
-          'is_test'              => $owner['is_test'],
-          'campaign_id'          => CRM_Utils_Array::value('campaign_id', $owner),
-          'status_id'            => $owner['status_id'],
-          'skipStatusCal'        => TRUE,
-          'createActivity'       => TRUE,
+          'contact_id' => CRM_Utils_Request::retrieve('rid', 'Positive', $this),
+          'membership_type_id' => $owner['membership_type_id'],
+          'owner_membership_id' => $owner['id'],
+          'join_date' => CRM_Utils_Date::processDate($owner['join_date'], NULL, TRUE, 'Ymd'),
+          'start_date' => CRM_Utils_Date::processDate($owner['start_date'], NULL, TRUE, 'Ymd'),
+          'end_date' => CRM_Utils_Date::processDate($owner['end_date'], NULL, TRUE, 'Ymd'),
+          'source' => ts('Manual Assignment of Related Membership'),
+          'is_test' => $owner['is_test'],
+          'campaign_id' => CRM_Utils_Array::value('campaign_id', $owner),
+          'status_id' => $owner['status_id'],
+          'skipStatusCal' => TRUE,
+          'createActivity' => TRUE,
         );
         CRM_Member_BAO_Membership::create($params, $ids);
         $relatedDisplayName = CRM_Contact_BAO_Contact::displayName($params['contact_id']);
-        CRM_Core_Session::setStatus(ts('Related membership for %1 has been created.', array(1 => $relatedDisplayName)), ts('Membership Added'), 'success');
+        CRM_Core_Session::setStatus(ts('Related membership for %1 has been created.', array(1 => $relatedDisplayName)),
+          ts('Membership Added'), 'success');
         break;
       default:
         CRM_Core_Error::fatal(ts("Invalid action specified in URL"));
@@ -164,7 +166,11 @@ class CRM_Member_Form_MembershipView extends CRM_Core_Form {
       }
 
       // build associated contributions
-      CRM_Member_Page_Tab::associatedContribution($values['contact_id'], $id);
+      $this->assign('accessContribution', FALSE);
+      if (CRM_Core_Permission::access('CiviContribute')) {
+        $this->assign('accessContribution', TRUE);
+        CRM_Member_Page_Tab::associatedContribution($values['contact_id'], $id);
+      }
 
       //Provide information about membership source when it is the result of a relationship (CRM-1901)
       $values['owner_membership_id'] = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership',
@@ -217,7 +223,8 @@ END AS 'relType'
       $this->assign('has_related', FALSE);
       // if membership can be granted, and we are the owner of the membership
       if (CRM_Utils_Array::value('relationship_type_id', $membershipType)
-          && !CRM_Utils_Array::value('owner_membership_id', $values)) {
+        && !CRM_Utils_Array::value('owner_membership_id', $values)
+      ) {
         // display related contacts/membership block
         $this->assign('has_related', TRUE);
         $this->assign('max_related', CRM_Utils_Array::value('max_related', $values, ts('Unlimited')));
@@ -238,24 +245,38 @@ SELECT r.id, c.id as cid, c.display_name as name, c.job_title as comment,
   FROM civicrm_relationship r
   LEFT JOIN civicrm_relationship_type rt ON rt.id = r.relationship_type_id
   LEFT JOIN civicrm_contact c ON c.id = r.contact_id_x
-  LEFT JOIN civicrm_membership m ON (m.owner_membership_id = {$values['id']} AND m.contact_id = r.contact_id_x AND m.is_test = 0)
+  LEFT JOIN civicrm_membership m ON (m.owner_membership_id = {$values['id']}
+  AND m.contact_id = r.contact_id_x AND m.is_test = 0)
   LEFT JOIN civicrm_membership_status ms ON ms.id = m.status_id
  WHERE r.contact_id_y = {$values['contact_id']} AND r.is_active = 1  AND c.is_deleted = 0";
         $query = '';
-        foreach (array('a', 'b') as $dir ) {
-          if (CRM_Utils_Array::value($dir, $relTypeDir)) {
+        foreach (array('a', 'b') as $dir) {
+          if (isset($relTypeDir[$dir])) {
             $query .= ($query ? ' UNION ' : '')
-              . str_replace('_y', '_'.$dir, str_replace('_x', '_'.($dir=='a'?'b':'a'), $select))
-              . ' AND r.relationship_type_id IN (' . implode(',', $relTypeDir[$dir]) .')';
+              . str_replace('_y', '_' . $dir, str_replace('_x', '_' . ($dir == 'a' ? 'b' : 'a'), $select))
+              . ' AND r.relationship_type_id IN (' . implode(',', $relTypeDir[$dir]) . ')';
           }
         }
         $query .= " ORDER BY is_current_member DESC";
         $dao = CRM_Core_DAO::executeQuery($query);
         $related = array();
         $relatedRemaining = CRM_Utils_Array::value('max_related', $values, PHP_INT_MAX);
+        $rowElememts = array(
+          'id',
+          'cid',
+          'name',
+          'comment',
+          'relation',
+          'mid',
+          'start_date',
+          'end_date',
+          'is_current_member',
+          'status'
+        );
+
         while ($dao->fetch()) {
           $row = array();
-          foreach (array('id', 'cid', 'name', 'comment', 'relation', 'mid', 'start_date', 'end_date', 'is_current_member', 'status') as $field) {
+          foreach ($rowElememts as $field) {
             $row[$field] = $dao->$field;
           }
           if ($row['mid'] && ($row['is_current_member'] == 1)) {
@@ -267,7 +288,9 @@ SELECT r.id, c.id as cid, c.display_name as name, c.job_title as comment,
                 'mid' => $row['mid'],
               )
             );
-          } else if ($relatedRemaining > 0) {
+          }
+          else {
+            if ($relatedRemaining > 0) {
               $row['action'] = CRM_Core_Action::formLink(self::links(), CRM_Core_Action::ADD,
                 array(
                   'id' => CRM_Utils_Request::retrieve('id', 'Positive', $this),
@@ -275,16 +298,21 @@ SELECT r.id, c.id as cid, c.display_name as name, c.job_title as comment,
                   'rid' => $row['cid'],
                 )
               );
+            }
           }
           $related[] = $row;
         }
         $this->assign('related', $related);
         if ($relatedRemaining <= 0) {
           $this->assign('related_text', ts('None available'));
-        } else if ($relatedRemaining < 100000) {
-          $this->assign('related_text', ts('%1 available', array(1 => $relatedRemaining)));
-        } else {
-          $this->assign('related_text', ts('Unlimited', array(1 => $relatedRemaining)));
+        }
+        else {
+          if ($relatedRemaining < 100000) {
+            $this->assign('related_text', ts('%1 available', array(1 => $relatedRemaining)));
+          }
+          else {
+            $this->assign('related_text', ts('Unlimited', array(1 => $relatedRemaining)));
+          }
         }
       }
 
@@ -296,8 +324,8 @@ SELECT r.id, c.id as cid, c.display_name as name, c.job_title as comment,
         $displayName .= ' (' . ts('default organization') . ')';
       }
 
-      // omitting contactImage from title for now since the summary overlay css doesn't work outside of our crm-container
-      CRM_Utils_System::setTitle(ts('View Membership for') .  ' ' . $displayName);
+      // omitting contactImage from title for now since the summary overlay css doesn't work outside crm-container
+      CRM_Utils_System::setTitle(ts('View Membership for') . ' ' . $displayName);
 
       // add viewed membership to recent items list
       $recentTitle = $displayName . ' - ' . ts('Membership Type:') . ' ' . $values['membership_type'];
@@ -325,7 +353,7 @@ SELECT r.id, c.id as cid, c.display_name as name, c.job_title as comment,
         $recentOther
       );
 
-      CRM_Member_Page_Tab::setContext($values['contact_id']);
+      CRM_Member_Page_Tab::setContext($this, $values['contact_id']);
 
       $memType = CRM_Core_DAO::getFieldValue("CRM_Member_DAO_Membership", $id, "membership_type_id");