[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/modules/Contacts/models/ -> Module.php (source)

   1  <?php
   2  /*+***********************************************************************************
   3   * The contents of this file are subject to the vtiger CRM Public License Version 1.0
   4   * ("License"); You may not use this file except in compliance with the License
   5   * The Original Code is:  vtiger CRM Open Source
   6   * The Initial Developer of the Original Code is vtiger.
   7   * Portions created by vtiger are Copyright (C) vtiger.
   8   * All Rights Reserved.
   9   * ************************************************************************************/
  10  
  11  class Contacts_Module_Model extends Vtiger_Module_Model {
  12      /**
  13       * Function to get the Quick Links for the module
  14       * @param <Array> $linkParams
  15       * @return <Array> List of Vtiger_Link_Model instances
  16       */
  17  	public function getSideBarLinks($linkParams) {
  18          $parentQuickLinks = parent::getSideBarLinks($linkParams);
  19  
  20          $quickLink = array(
  21                  'linktype' => 'SIDEBARLINK',
  22                  'linklabel' => 'LBL_DASHBOARD',
  23                  'linkurl' => $this->getDashBoardUrl(),
  24                  'linkicon' => '',
  25          );
  26  
  27          //Check profile permissions for Dashboards
  28          $moduleModel = Vtiger_Module_Model::getInstance('Dashboard');
  29          $userPrivilegesModel = Users_Privileges_Model::getCurrentUserPrivilegesModel();
  30          $permission = $userPrivilegesModel->hasModulePermission($moduleModel->getId());
  31          if($permission) {
  32              $parentQuickLinks['SIDEBARLINK'][] = Vtiger_Link_Model::getInstanceFromValues($quickLink);
  33          }
  34  
  35          return $parentQuickLinks;
  36      }
  37  
  38      /**
  39       * Function returns the Calendar Events for the module
  40       * @param <Vtiger_Paging_Model> $pagingModel
  41       * @return <Array>
  42       */
  43  	public function getCalendarActivities($mode, $pagingModel, $user, $recordId = false) {
  44          $currentUser = Users_Record_Model::getCurrentUserModel();
  45          $db = PearDatabase::getInstance();
  46  
  47          if (!$user) {
  48              $user = $currentUser->getId();
  49          }
  50  
  51          $nowInUserFormat = Vtiger_Datetime_UIType::getDisplayDateValue(date('Y-m-d H:i:s'));
  52          $nowInDBFormat = Vtiger_Datetime_UIType::getDBDateTimeValue($nowInUserFormat);
  53          list($currentDate, $currentTime) = explode(' ', $nowInDBFormat);
  54  
  55          $query = "SELECT vtiger_crmentity.crmid, crmentity2.crmid AS contact_id, vtiger_crmentity.smownerid, vtiger_crmentity.setype, vtiger_activity.* FROM vtiger_activity
  56                      INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_activity.activityid
  57                      INNER JOIN vtiger_cntactivityrel ON vtiger_cntactivityrel.activityid = vtiger_activity.activityid
  58                      INNER JOIN vtiger_crmentity AS crmentity2 ON vtiger_cntactivityrel.contactid = crmentity2.crmid AND crmentity2.deleted = 0 AND crmentity2.setype = ?
  59                      LEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid";
  60  
  61          $query .= Users_Privileges_Model::getNonAdminAccessControlQuery('Calendar');
  62  
  63          $query .= " WHERE vtiger_crmentity.deleted=0
  64                      AND (vtiger_activity.activitytype NOT IN ('Emails'))
  65                      AND (vtiger_activity.status is NULL OR vtiger_activity.status NOT IN ('Completed', 'Deferred'))
  66                      AND (vtiger_activity.eventstatus is NULL OR vtiger_activity.eventstatus NOT IN ('Held'))";
  67  
  68          if ($recordId) {
  69              $query .= " AND vtiger_cntactivityrel.contactid = ?";
  70          } elseif ($mode === 'upcoming') {
  71              $query .= " AND due_date >= '$currentDate'";
  72          } elseif ($mode === 'overdue') {
  73              $query .= " AND due_date < '$currentDate'";
  74          }
  75  
  76          $params = array($this->getName());
  77          if ($recordId) {
  78              array_push($params, $recordId);
  79          }
  80  
  81          if($user != 'all' && $user != '') {
  82              if($user === $currentUser->id) {
  83                  $query .= " AND vtiger_crmentity.smownerid = ?";
  84                  array_push($params, $user);
  85              }
  86          }
  87  
  88          $query .= " ORDER BY date_start, time_start LIMIT ". $pagingModel->getStartIndex() .", ". ($pagingModel->getPageLimit()+1);
  89  
  90          $result = $db->pquery($query, $params);
  91          $numOfRows = $db->num_rows($result);
  92          
  93          $groupsIds = Vtiger_Util_Helper::getGroupsIdsForUsers($currentUser->getId());
  94          $activities = array();
  95          for($i=0; $i<$numOfRows; $i++) {
  96              $newRow = $db->query_result_rowdata($result, $i);
  97              $model = Vtiger_Record_Model::getCleanInstance('Calendar');
  98              $ownerId = $newRow['smownerid'];
  99              $currentUser = Users_Record_Model::getCurrentUserModel();
 100              $visibleFields = array('activitytype','date_start','time_start','due_date','time_end','assigned_user_id','visibility','smownerid','crmid');
 101              $visibility = true;
 102              if(in_array($ownerId, $groupsIds)) {
 103                  $visibility = false;
 104              } else if($ownerId == $currentUser->getId()){
 105                  $visibility = false;
 106              }
 107              if(!$currentUser->isAdminUser() && $newRow['activitytype'] != 'Task' && $newRow['visibility'] == 'Private' && $ownerId && $visibility) {
 108                  foreach($newRow as $data => $value) {
 109                      if(in_array($data, $visibleFields) != -1) {
 110                          unset($newRow[$data]);
 111                      }
 112                  }
 113                  $newRow['subject'] = vtranslate('Busy','Events').'*';
 114              }
 115              if($newRow['activitytype'] == 'Task') {
 116                  unset($newRow['visibility']);
 117              }
 118              
 119              $model->setData($newRow);
 120              $model->setId($newRow['crmid']);
 121              $activities[] = $model;
 122          }
 123          
 124          $pagingModel->calculatePageRange($activities);
 125          if($numOfRows > $pagingModel->getPageLimit()){
 126              array_pop($activities);
 127              $pagingModel->set('nextPageExists', true);
 128          } else {
 129              $pagingModel->set('nextPageExists', false);
 130          }
 131  
 132          return $activities;
 133      }
 134  
 135      /**
 136       * Function returns query for module record's search
 137       * @param <String> $searchValue - part of record name (label column of crmentity table)
 138       * @param <Integer> $parentId - parent record id
 139       * @param <String> $parentModule - parent module name
 140       * @return <String> - query
 141       */
 142  	function getSearchRecordsQuery($searchValue, $parentId=false, $parentModule=false) {
 143          if($parentId && $parentModule == 'Accounts') {
 144              $query = "SELECT * FROM vtiger_crmentity
 145                          INNER JOIN vtiger_contactdetails ON vtiger_contactdetails.contactid = vtiger_crmentity.crmid
 146                          WHERE deleted = 0 AND vtiger_contactdetails.accountid = $parentId AND label like '%$searchValue%'";
 147              return $query;
 148          } else if($parentId && $parentModule == 'Potentials') {
 149              $query = "SELECT * FROM vtiger_crmentity
 150                          INNER JOIN vtiger_contactdetails ON vtiger_contactdetails.contactid = vtiger_crmentity.crmid
 151                          LEFT JOIN vtiger_contpotentialrel ON vtiger_contpotentialrel.contactid = vtiger_contactdetails.contactid
 152                          LEFT JOIN vtiger_potential ON vtiger_potential.contact_id = vtiger_contactdetails.contactid
 153                          WHERE deleted = 0 AND (vtiger_contpotentialrel.potentialid = $parentId OR vtiger_potential.potentialid = $parentId)
 154                          AND label like '%$searchValue%'";
 155              
 156                  return $query;
 157          } else if ($parentId && $parentModule == 'HelpDesk') {
 158              $query = "SELECT * FROM vtiger_crmentity
 159                          INNER JOIN vtiger_contactdetails ON vtiger_contactdetails.contactid = vtiger_crmentity.crmid
 160                          INNER JOIN vtiger_troubletickets ON vtiger_troubletickets.contact_id = vtiger_contactdetails.contactid
 161                          WHERE deleted=0 AND vtiger_troubletickets.ticketid  = $parentId  AND label like '%$searchValue%'";
 162  
 163              return $query;
 164          } else if($parentId && $parentModule == 'Campaigns') {
 165              $query = "SELECT * FROM vtiger_crmentity
 166                          INNER JOIN vtiger_contactdetails ON vtiger_contactdetails.contactid = vtiger_crmentity.crmid
 167                          INNER JOIN vtiger_campaigncontrel ON vtiger_campaigncontrel.contactid = vtiger_contactdetails.contactid
 168                          WHERE deleted=0 AND vtiger_campaigncontrel.campaignid = $parentId AND label like '%$searchValue%'";
 169  
 170              return $query;
 171          } else if($parentId && $parentModule == 'Vendors') {
 172              $query = "SELECT vtiger_crmentity.* FROM vtiger_crmentity
 173                          INNER JOIN vtiger_contactdetails ON vtiger_contactdetails.contactid = vtiger_crmentity.crmid
 174                          INNER JOIN vtiger_vendorcontactrel ON vtiger_vendorcontactrel.contactid = vtiger_contactdetails.contactid
 175                          WHERE deleted=0 AND vtiger_vendorcontactrel.vendorid = $parentId AND label like '%$searchValue%'";
 176  
 177              return $query;
 178          } else if ($parentId && $parentModule == 'Quotes') {
 179              $query = "SELECT * FROM vtiger_crmentity
 180                          INNER JOIN vtiger_contactdetails ON vtiger_contactdetails.contactid = vtiger_crmentity.crmid
 181                          INNER JOIN vtiger_quotes ON vtiger_quotes.contactid = vtiger_contactdetails.contactid
 182                          WHERE deleted=0 AND vtiger_quotes.quoteid  = $parentId  AND label like '%$searchValue%'";
 183  
 184              return $query;
 185          } else if ($parentId && $parentModule == 'PurchaseOrder') {
 186              $query = "SELECT * FROM vtiger_crmentity
 187                          INNER JOIN vtiger_contactdetails ON vtiger_contactdetails.contactid = vtiger_crmentity.crmid
 188                          INNER JOIN vtiger_purchaseorder ON vtiger_purchaseorder.contactid = vtiger_contactdetails.contactid
 189                          WHERE deleted=0 AND vtiger_purchaseorder.purchaseorderid  = $parentId  AND label like '%$searchValue%'";
 190  
 191              return $query;
 192          } else if ($parentId && $parentModule == 'SalesOrder') {
 193              $query = "SELECT * FROM vtiger_crmentity
 194                          INNER JOIN vtiger_contactdetails ON vtiger_contactdetails.contactid = vtiger_crmentity.crmid
 195                          INNER JOIN vtiger_salesorder ON vtiger_salesorder.contactid = vtiger_contactdetails.contactid
 196                          WHERE deleted=0 AND vtiger_salesorder.salesorderid  = $parentId  AND label like '%$searchValue%'";
 197  
 198              return $query;
 199          } else if ($parentId && $parentModule == 'Invoice') {
 200              $query = "SELECT * FROM vtiger_crmentity
 201                          INNER JOIN vtiger_contactdetails ON vtiger_contactdetails.contactid = vtiger_crmentity.crmid
 202                          INNER JOIN vtiger_invoice ON vtiger_invoice.contactid = vtiger_contactdetails.contactid
 203                          WHERE deleted=0 AND vtiger_invoice.invoiceid  = $parentId  AND label like '%$searchValue%'";
 204  
 205              return $query;
 206          }
 207  
 208          return parent::getSearchRecordsQuery($parentId, $parentModule);
 209      }
 210  
 211  
 212      /**
 213       * Function to get relation query for particular module with function name
 214       * @param <record> $recordId
 215       * @param <String> $functionName
 216       * @param Vtiger_Module_Model $relatedModule
 217       * @return <String>
 218       */
 219  	public function getRelationQuery($recordId, $functionName, $relatedModule) {
 220          if ($functionName === 'get_activities') {
 221              $userNameSql = getSqlForNameInDisplayFormat(array('first_name' => 'vtiger_users.first_name', 'last_name' => 'vtiger_users.last_name'), 'Users');
 222  
 223              $query = "SELECT CASE WHEN (vtiger_users.user_name not like '') THEN $userNameSql ELSE vtiger_groups.groupname END AS user_name,
 224                          vtiger_cntactivityrel.contactid, vtiger_seactivityrel.crmid AS parent_id,
 225                          vtiger_crmentity.*, vtiger_activity.activitytype, vtiger_activity.subject, vtiger_activity.date_start, vtiger_activity.time_start,
 226                          vtiger_activity.recurringtype, vtiger_activity.due_date, vtiger_activity.time_end, vtiger_activity.visibility,
 227                          CASE WHEN (vtiger_activity.activitytype = 'Task') THEN (vtiger_activity.status) ELSE (vtiger_activity.eventstatus) END AS status
 228                          FROM vtiger_activity
 229                          INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_activity.activityid
 230                          INNER JOIN vtiger_cntactivityrel ON vtiger_cntactivityrel.activityid = vtiger_activity.activityid
 231                          LEFT JOIN vtiger_seactivityrel ON vtiger_seactivityrel.activityid = vtiger_activity.activityid
 232                          LEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid
 233                          LEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid
 234                              WHERE vtiger_cntactivityrel.contactid = ".$recordId." AND vtiger_crmentity.deleted = 0
 235                                  AND vtiger_activity.activitytype <> 'Emails'";
 236  
 237              $relatedModuleName = $relatedModule->getName();
 238              $query .= $this->getSpecificRelationQuery($relatedModuleName);
 239              $nonAdminQuery = $this->getNonAdminAccessControlQueryForRelation($relatedModuleName);
 240              if ($nonAdminQuery) {
 241                  $query = appendFromClauseToQuery($query, $nonAdminQuery);
 242              }
 243          } else {
 244              $query = parent::getRelationQuery($recordId, $functionName, $relatedModule);
 245          }
 246  
 247          return $query;
 248      }
 249  
 250      /**
 251       * Function to get list view query for popup window
 252       * @param <String> $sourceModule Parent module
 253       * @param <String> $field parent fieldname
 254       * @param <Integer> $record parent id
 255       * @param <String> $listQuery
 256       * @return <String> Listview Query
 257       */
 258  	public function getQueryByModuleField($sourceModule, $field, $record, $listQuery) {
 259          if (in_array($sourceModule, array('Campaigns', 'Potentials', 'Vendors', 'Products', 'Services', 'Emails'))
 260                  || ($sourceModule === 'Contacts' && $field === 'contact_id' && $record)) {
 261              switch ($sourceModule) {
 262                  case 'Campaigns'    : $tableName = 'vtiger_campaigncontrel';    $fieldName = 'contactid';    $relatedFieldName ='campaignid';    break;
 263                  case 'Potentials'    : $tableName = 'vtiger_contpotentialrel';    $fieldName = 'contactid';    $relatedFieldName ='potentialid';    break;
 264                  case 'Vendors'        : $tableName = 'vtiger_vendorcontactrel';    $fieldName = 'contactid';    $relatedFieldName ='vendorid';        break;
 265                  case 'Products'        : $tableName = 'vtiger_seproductsrel';        $fieldName = 'crmid';        $relatedFieldName ='productid';        break;
 266              }
 267  
 268              if ($sourceModule === 'Services') {
 269                  $condition = " vtiger_contactdetails.contactid NOT IN (SELECT relcrmid FROM vtiger_crmentityrel WHERE crmid = '$record' UNION SELECT crmid FROM vtiger_crmentityrel WHERE relcrmid = '$record') ";
 270              } elseif ($sourceModule === 'Emails') {
 271                  $condition = ' vtiger_contactdetails.emailoptout = 0';
 272              } elseif ($sourceModule === 'Contacts' && $field === 'contact_id') {
 273                  $condition = " vtiger_contactdetails.contactid != '$record'";
 274              } else {
 275                  $condition = " vtiger_contactdetails.contactid NOT IN (SELECT $fieldName FROM $tableName WHERE $relatedFieldName = '$record')";
 276              }
 277  
 278              $position = stripos($listQuery, 'where');
 279              if($position) {
 280                  $split = spliti('where', $listQuery);
 281                  $overRideQuery = $split[0] . ' WHERE ' . $split[1] . ' AND ' . $condition;
 282              } else {
 283                  $overRideQuery = $listQuery. ' WHERE ' . $condition;
 284              }
 285              return $overRideQuery;
 286          }
 287      }
 288      
 289      public function getDefaultSearchField(){
 290          return "lastname";
 291      }
 292      
 293  }


Generated: Fri Nov 28 20:08:37 2014 Cross-referenced by PHPXref 0.7.1