示例#1
0
 public function process(Vtiger_Request $request)
 {
     $recordModel = $this->saveRecord($request);
     $loadUrl = $recordModel->getDetailViewUrl();
     if ($request->get('relationOperation')) {
         $parentModuleName = $request->get('sourceModule');
         $parentRecordId = $request->get('sourceRecord');
         $parentRecordModel = Vtiger_Record_Model::getInstanceById($parentRecordId, $parentModuleName);
         //TODO : Url should load the related list instead of detail view of record
         $loadUrl = $parentRecordModel->getDetailViewUrl();
     } else {
         if ($request->get('returnToList')) {
             $moduleModel = $recordModel->getModule();
             $listViewUrl = $moduleModel->getListViewUrl();
             if ($recordModel->get('visibility') === 'Private') {
                 $loadUrl = $listViewUrl;
             } else {
                 $userId = $recordModel->get('assigned_user_id');
                 $sharedType = $moduleModel->getSharedType($userId);
                 if ($sharedType === 'selectedusers') {
                     $currentUserModel = Users_Record_Model::getCurrentUserModel();
                     $sharedUserIds = Calendar_Module_Model::getCaledarSharedUsers($userId);
                     if (!array_key_exists($currentUserModel->id, $sharedUserIds)) {
                         $loadUrl = $listViewUrl;
                     }
                 } else {
                     if ($sharedType === 'private') {
                         $loadUrl = $listViewUrl;
                     }
                 }
             }
         }
     }
     header("Location: {$loadUrl}");
 }
示例#2
0
 /**
  * Function to get relation query for particular module with function name
  * @param <record> $recordId
  * @param <String> $functionName
  * @param Vtiger_Module_Model $relatedModule
  * @return <String>
  */
 public function getRelationQuery($recordId, $functionName, $relatedModule, $relationModel = false)
 {
     if ($functionName === 'get_activities') {
         $userNameSql = getSqlForNameInDisplayFormat(array('first_name' => 'vtiger_users.first_name', 'last_name' => 'vtiger_users.last_name'), 'Users');
         $query = "SELECT CASE WHEN (vtiger_users.user_name not like '') THEN {$userNameSql} ELSE vtiger_groups.groupname END AS user_name,\n\t\t\t\t\t\tvtiger_crmentity.*, vtiger_activity.activitytype, vtiger_activity.subject, vtiger_activity.date_start, vtiger_activity.time_start,\n\t\t\t\t\t\tvtiger_activity.recurringtype, vtiger_activity.due_date, vtiger_activity.time_end, vtiger_activity.visibility,\n\t\t\t\t\t\tvtiger_activity.status AS status\n\t\t\t\t\t\tFROM vtiger_activity\n\t\t\t\t\t\tINNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_activity.activityid\n\t\t\t\t\t\tLEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid\n\t\t\t\t\t\tLEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid\n\t\t\t\t\t\t\tWHERE vtiger_crmentity.deleted = 0 AND vtiger_activity.process = " . $recordId;
         $time = vtlib_purify($_REQUEST['time']);
         if ($time == 'current') {
             $stateActivityLabels = Calendar_Module_Model::getComponentActivityStateLabel('current');
             $query .= " AND (vtiger_activity.activitytype NOT IN ('Emails') AND vtiger_activity.status IN ('" . implode("','", $stateActivityLabels) . "'))";
         }
         if ($time == 'history') {
             $stateActivityLabels = Calendar_Module_Model::getComponentActivityStateLabel('history');
             $query .= " AND (vtiger_activity.activitytype NOT IN ('Emails') AND vtiger_activity.status IN ('" . implode("','", $stateActivityLabels) . "'))";
         }
         $relatedModuleName = $relatedModule->getName();
         $query .= $this->getSpecificRelationQuery($relatedModuleName);
         $instance = CRMEntity::getInstance($relatedModuleName);
         $securityParameter = $instance->getUserAccessConditionsQuerySR($relatedModuleName, false, $recordId);
         if ($securityParameter != '') {
             $query .= $securityParameter;
         }
     } elseif ($functionName === 'get_mails' && $relatedModule->getName() == 'OSSMailView') {
         $query = OSSMailView_Record_Model::getMailsQuery($recordId, $relatedModule->getName());
     } else {
         $query = parent::getRelationQuery($recordId, $functionName, $relatedModule, $relationModel);
     }
     return $query;
 }
	public function process(Vtiger_Request $request)
	{
		$currentUser = Users_Record_Model::getCurrentUserModel();
		$viewer = $this->getViewer($request);
		$moduleName = $request->getModule();

		$stateActivityLabels = Calendar_Module_Model::getComponentActivityStateLabel();

		$page = $request->get('page');
		$linkId = $request->get('linkid');
		$sortOrder = $request->get('sortorder');
		$orderBy = $request->get('orderby');
		$params = ['status' => $stateActivityLabels['in_realization']];
		if ($request->get('switchParams')) {
			$params = ['status' => $request->get('switchParams')];
		}

		$widget = Vtiger_Widget_Model::getInstance($linkId, $currentUser->getId());
		if (!$request->has('owner'))
			$owner = Settings_WidgetsManagement_Module_Model::getDefaultUserId($widget);
		else
			$owner = $request->get('owner');

		$pagingModel = new Vtiger_Paging_Model();
		$pagingModel->set('page', $page);
		$pagingModel->set('limit', (int) $widget->get('limit'));
		$pagingModel->set('orderby', $orderBy);
		$pagingModel->set('sortorder', $sortOrder);

		$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
		$calendarActivities = ($owner === false) ? array() : $moduleModel->getCalendarActivities('upcoming', $pagingModel, $owner, false, $params);

		$switchLabels = [];
		$switchLabels[] = ['label' => vtranslate($stateActivityLabels['in_realization'], 'Calendar'), 'name' => $stateActivityLabels['in_realization']];
		$switchLabels[] = ['label' => vtranslate($stateActivityLabels['not_started'], 'Calendar'), 'name' => $stateActivityLabels['not_started']];

		$msgLabel = 'LBL_NO_SCHEDULED_ACTIVITIES';
		if ($params['status'] == $stateActivityLabels['in_realization']) {
			$msgLabel = 'LBL_NO_CURRENT_ACTIVITIES';
		}
		$viewer->assign('WIDGET', $widget);
		$viewer->assign('MODULE_NAME', $moduleName);
		$viewer->assign('ACTIVITIES', $calendarActivities);
		$viewer->assign('PAGING', $pagingModel);
		$viewer->assign('CURRENTUSER', $currentUser);
		$title_max_length = vglobal('title_max_length');
		$href_max_length = vglobal('href_max_length');
		$viewer->assign('NAMELENGHT', $title_max_length);
		$viewer->assign('OWNER', $owner);
		$viewer->assign('HREFNAMELENGHT', $href_max_length);
		$viewer->assign('NODATAMSGLABLE', $msgLabel);
		$viewer->assign('SWITCH', $switchLabels);
		$viewer->assign('LISTVIEWLINKS', true);
		$content = $request->get('content');
		if (!empty($content)) {
			$viewer->view('dashboards/CalendarActivitiesContents.tpl', $moduleName);
		} else {
			$viewer->view('dashboards/CalendarActivities.tpl', $moduleName);
		}
	}
示例#4
0
 function getActivityType(Vtiger_Request $request)
 {
     $viewer = $this->getViewer($request);
     $moduleName = $request->getModule();
     $viewer->assign('MODULE', $moduleName);
     $viewer->assign('ACTIVITY_TYPE', Calendar_Module_Model::getCalendarTypes());
     $viewer->view('RightPanel.tpl', $moduleName);
 }
 function getReminders(Vtiger_Request $request)
 {
     $recordModels = Calendar_Module_Model::getCalendarReminder();
     foreach ($recordModels as $record) {
         $records[] = $record->getDisplayableValues();
         $record->updateReminderStatus();
     }
     $response = new Vtiger_Response();
     $response->setResult($records);
     $response->emit();
 }
 public function handleEvent($handlerType, $entityData)
 {
     $moduleName = $entityData->getModuleName();
     if ($handlerType == 'vtiger.entity.beforesave' && in_array($moduleName, ['Calendar', 'Events', 'Activity'])) {
         $data = $entityData->getData();
         $state = Calendar_Module_Model::getCalendarState($data);
         if ($state) {
             $entityData->set('activitystatus', $state);
         }
     }
 }
示例#7
0
 /**
  * Function to get Shared Users
  * @param Vtiger_Request $request
  */
 function getSharedUsersList(Vtiger_Request $request)
 {
     $viewer = $this->getViewer($request);
     $currentUser = Users_Record_Model::getCurrentUserModel();
     $moduleName = $request->getModule();
     $sharedUsers = Calendar_Module_Model::getSharedUsersOfCurrentUser($currentUser->id);
     $viewer->assign('MODULE', $moduleName);
     $viewer->assign('SHAREDUSERS', $sharedUsers);
     $viewer->assign('CURRENTUSER_MODEL', $currentUser);
     $viewer->view('CalendarSharedUsers.tpl', $moduleName);
 }
示例#8
0
 /**
  * Function to save a given record model of the current module
  * @param Vtiger_Record_Model $recordModel
  */
 public function saveRecord($recordModel)
 {
     $recordModel = parent::saveRecord($recordModel);
     //code added to send mail to the vtiger_invitees
     $selectUsers = $recordModel->get('selectedusers');
     if (!empty($selectUsers)) {
         $invities = implode(';', $selectUsers);
         $mail_contents = $recordModel->getInviteUserMailData();
         $activityMode = $recordModel->getModuleName() == 'Calendar' ? 'Task' : 'Events';
         sendInvitation($invities, $activityMode, $recordModel->get('subject'), $mail_contents);
     }
 }
	public function preProcess(Vtiger_Request $request, $display = true)
	{
		if ($this->checkPermission($request)) {
			$currentUser = Users_Record_Model::getCurrentUserModel();
			$viewer = $this->getViewer($request);

			$selectedModule = $request->getModule();
			$companyDetails = Vtiger_CompanyDetails_Model::getInstanceById();
			$companyLogo = $companyDetails->getLogo();
			$currentDate = Vtiger_Date_UIType::getDisplayDateValue(date('Y-n-j'));
			$viewer->assign('CURRENTDATE', $currentDate);
			$viewer->assign('MODULE', $selectedModule);
			$viewer->assign('MODULE_NAME', $selectedModule);
			$viewer->assign('QUALIFIED_MODULE', $selectedModule);
			$viewer->assign('PARENT_MODULE', $request->get('parent'));
			$viewer->assign('MENUS', Vtiger_Menu_Model::getAll(true));
			$viewer->assign('VIEW', $request->get('view'));
			$viewer->assign('COMPANY_LOGO', $companyLogo);
			$viewer->assign('USER_MODEL', $currentUser);

			$homeModuleModel = Vtiger_Module_Model::getInstance('Home');
			$viewer->assign('HOME_MODULE_MODEL', $homeModuleModel);
			$viewer->assign('HEADER_LINKS', $this->getHeaderLinks());
			$viewer->assign('ANNOUNCEMENT', $this->getAnnouncement());
			$viewer->assign('SEARCHABLE_MODULES', Vtiger_Module_Model::getSearchableModules());
			$viewer->assign('CHAT_ACTIVE', vtlib_isModuleActive('AJAXChat'));

			//Additional parameters
			$viewer->assign('CURRENT_VIEW', $request->get('view'));
			$viewer->assign('PAGETITLE', $this->getPageTitle($request));
			$viewer->assign('FOOTER_SCRIPTS', $this->getFooterScripts($request));
			$viewer->assign('STYLES', $this->getHeaderCss($request));
			$viewer->assign('LANGUAGE_STRINGS', $this->getJSLanguageStrings($request));
			$viewer->assign('SKIN_PATH', Vtiger_Theme::getCurrentUserThemePath());
			$viewer->assign('IS_PREFERENCE', true);
			$viewer->assign('HTMLLANG', Vtiger_Language_Handler::getShortLanguageName());
			$viewer->assign('LANGUAGE', $currentUser->get('language'));

			$allUsers = Users_Record_Model::getAll(true);
			$sharedUsers = Calendar_Module_Model::getCaledarSharedUsers($currentUser->id);
			$sharedType = Calendar_Module_Model::getSharedType($currentUser->id);
			$viewer->assign('ALL_USERS', $allUsers);
			$viewer->assign('SHAREDUSERS', $sharedUsers);
			$viewer->assign('SHARED_TYPE', $sharedType);
			$viewer->assign('HEADER_SCRIPTS', $this->getHeaderScripts($request));
			if ($display) {
				$this->preProcessDisplay($request);
			}
		}
	}
示例#10
0
 public function preProcess(Vtiger_Request $request, $display = true)
 {
     if ($this->checkPermission($request)) {
         $currentUser = Users_Record_Model::getCurrentUserModel();
         $viewer = $this->getViewer($request);
         $menuModelsList = Vtiger_Menu_Model::getAll(true);
         $selectedModule = $request->getModule();
         $menuStructure = Vtiger_MenuStructure_Model::getInstanceFromMenuList($menuModelsList, $selectedModule);
         // Order by pre-defined automation process for QuickCreate.
         uksort($menuModelsList, array('Vtiger_MenuStructure_Model', 'sortMenuItemsByProcess'));
         $companyDetails = Vtiger_CompanyDetails_Model::getInstanceById();
         $companyLogo = $companyDetails->getLogo();
         $viewer->assign('CURRENTDATE', date('Y-n-j'));
         $viewer->assign('MODULE', $selectedModule);
         $viewer->assign('PARENT_MODULE', $request->get('parent'));
         $viewer->assign('VIEW', $request->get('view'));
         $viewer->assign('MENUS', $menuModelsList);
         $viewer->assign('MENU_STRUCTURE', $menuStructure);
         $viewer->assign('MENU_SELECTED_MODULENAME', $selectedModule);
         $viewer->assign('MENU_TOPITEMS_LIMIT', $menuStructure->getLimit());
         $viewer->assign('COMPANY_LOGO', $companyLogo);
         $viewer->assign('USER_MODEL', $currentUser);
         $viewer->assign('SEARCHABLE_MODULES', Vtiger_Module_Model::getSearchableModules());
         $homeModuleModel = Vtiger_Module_Model::getInstance('Home');
         $viewer->assign('HOME_MODULE_MODEL', $homeModuleModel);
         $viewer->assign('HEADER_LINKS', $this->getHeaderLinks());
         $viewer->assign('ANNOUNCEMENT', $this->getAnnouncement());
         $viewer->assign('CURRENT_VIEW', $request->get('view'));
         $viewer->assign('PAGETITLE', $this->getPageTitle($request));
         $viewer->assign('SCRIPTS', $this->getHeaderScripts($request));
         $viewer->assign('STYLES', $this->getHeaderCss($request));
         $viewer->assign('LANGUAGE_STRINGS', $this->getJSLanguageStrings($request));
         $viewer->assign('SKIN_PATH', Vtiger_Theme::getCurrentUserThemePath());
         $viewer->assign('IS_PREFERENCE', true);
         $viewer->assign('LANGUAGE', $currentUser->get('language'));
         $allUsers = Users_Record_Model::getAll(true);
         $sharedUsers = Calendar_Module_Model::getCaledarSharedUsers($currentUser->id);
         $sharedType = Calendar_Module_Model::getSharedType($currentUser->id);
         $viewer->assign('ALL_USERS', $allUsers);
         $viewer->assign('SHAREDUSERS', $sharedUsers);
         $viewer->assign('SHARED_TYPE', $sharedType);
         // OpenSaaS
         $OSSMenu = OSSMenuManager_Record_Model::getMenu();
         $viewer->assign('MENU_STRUCTURE', $OSSMenu);
         //  OpenSaaS
         if ($display) {
             $this->preProcessDisplay($request);
         }
     }
 }
示例#11
0
 public function getQuery()
 {
     $db = PearDatabase::getInstance();
     $currentUser = Users_Record_Model::getCurrentUserModel();
     $query = "SELECT vtiger_activity.activityid as act_id,vtiger_crmentity.crmid, vtiger_crmentity.smownerid, vtiger_crmentity.setype,\n\t\tvtiger_activity.*, relcrm.setype AS linkmod, relcrm.label AS linklabel, procrm.label AS processlabel, procrm.setype AS processmod\n\t\tFROM vtiger_activity\n\t\tLEFT JOIN vtiger_activitycf\n\t\t\tON vtiger_activitycf.activityid = vtiger_activity.activityid\n\t\tLEFT JOIN vtiger_crmentity\n\t\t\tON vtiger_crmentity.crmid = vtiger_activity.activityid\n\t\tLEFT JOIN vtiger_crmentity relcrm\n\t\t\tON relcrm.crmid = vtiger_activity.link\n\t\tLEFT JOIN vtiger_crmentity procrm\n\t\t\tON procrm.crmid = vtiger_activity.process\n\t\tWHERE vtiger_crmentity.deleted = 0 AND activitytype != 'Emails' ";
     $instance = CRMEntity::getInstance($this->getModuleName());
     $securityParameter = $instance->getUserAccessConditionsQuerySR($this->getModuleName(), $currentUser);
     if ($securityParameter != '') {
         $query .= $securityParameter;
     }
     $params = [];
     if ($this->get('start') && $this->get('end')) {
         $dbStartDateOject = DateTimeField::convertToDBTimeZone($this->get('start'));
         $dbStartDateTime = $dbStartDateOject->format('Y-m-d H:i:s');
         $dbStartDate = $dbStartDateOject->format('Y-m-d');
         $dbEndDateObject = DateTimeField::convertToDBTimeZone($this->get('end'));
         $dbEndDateTime = $dbEndDateObject->format('Y-m-d H:i:s');
         $dbEndDate = $dbEndDateObject->format('Y-m-d');
         $query .= " AND ( (concat(date_start, ' ', time_start)  >= ? AND concat(date_start, ' ', time_start) <= ?) OR (concat(due_date, ' ', time_end)  >= ? AND concat(due_date, ' ', time_end) <= ?) OR (date_start < ? AND due_date > ?) ) ";
         $params[] = $dbStartDateTime;
         $params[] = $dbEndDateTime;
         $params[] = $dbStartDateTime;
         $params[] = $dbEndDateTime;
         $params[] = $dbStartDate;
         $params[] = $dbEndDate;
     }
     if ($this->get('types')) {
         $query .= " AND vtiger_activity.activitytype IN ('" . implode("','", $this->get('types')) . "')";
     }
     if ($this->get('time') == 'current') {
         $stateActivityLabels = Calendar_Module_Model::getComponentActivityStateLabel('current');
         $query .= " AND vtiger_activity.status IN ('" . implode("','", $stateActivityLabels) . "')";
     }
     if ($this->get('time') == 'history') {
         $stateActivityLabels = Calendar_Module_Model::getComponentActivityStateLabel('history');
         $query .= " AND vtiger_activity.status IN ('" . implode("','", $stateActivityLabels) . "')";
     }
     if ($this->get('activitystatus')) {
         $query .= " AND vtiger_activity.status IN ('" . $this->get('activitystatus') . "')";
     }
     if ($this->get('user')) {
         if (is_array($this->get('user'))) {
             $query .= ' AND vtiger_crmentity.smownerid IN (' . implode(",", $this->get('user')) . ')';
         } else {
             $query .= ' AND vtiger_crmentity.smownerid IN (' . $this->get('user') . ')';
         }
     }
     $query .= ' ORDER BY date_start,time_start ASC';
     return ['query' => $query, 'params' => $params];
 }
示例#12
0
 function getReminders(Vtiger_Request $request)
 {
     if ('true' == $request->get('type_remainder')) {
         $recordModels = Calendar_Module_Model::getCalendarReminder(true);
     } else {
         $recordModels = Calendar_Module_Model::getCalendarReminder();
     }
     foreach ($recordModels as $record) {
         $records[] = $record->getDisplayableValues();
         $record->updateReminderStatus(2);
     }
     $response = new Vtiger_Response();
     $response->setResult($records);
     $response->emit();
 }
示例#13
0
 /**
  * Function to get the detail view links (links and widgets)
  * @param <array> $linkParams - parameters which will be used to calicaulate the params
  * @return <array> - array of link models in the format as below
  *                   array('linktype'=>list of link models);
  */
 public function getDetailViewLinks($linkParams)
 {
     $currentUserModel = Users_Privileges_Model::getCurrentUserPrivilegesModel();
     $linkModelList = parent::getDetailViewLinks($linkParams);
     $recordModel = $this->getRecord();
     $moduleName = $recordModel->getModuleName();
     $recordId = $recordModel->getId();
     $status = $recordModel->get('activitystatus');
     $statusActivity = Calendar_Module_Model::getComponentActivityStateLabel('current');
     $lockEdit = Users_Privileges_Model::checkLockEdit($moduleName, $recordId);
     if (Users_Privileges_Model::isPermitted($moduleName, 'EditView', $recordId) && $currentUserModel->hasModuleActionPermission($this->getModule()->getId(), 'DetailView') && !$lockEdit && isPermitted($moduleName, 'ActivityComplete', $recordId) == 'yes' && isPermitted($moduleName, 'ActivityCancel', $recordId) == 'yes' && isPermitted($moduleName, 'ActivityPostponed', $recordId) == 'yes' && in_array($status, $statusActivity)) {
         $basicActionLink = ['linktype' => 'DETAILVIEW', 'linklabel' => 'LBL_SET_RECORD_STATUS', 'linkurl' => '#', 'linkdata' => ['url' => $recordModel->getActivityStateModalUrl()], 'linkicon' => 'glyphicon glyphicon-ok', 'linkclass' => 'showModal closeCalendarRekord'];
         $linkModelList['DETAILVIEW'][] = Vtiger_Link_Model::getInstanceFromValues($basicActionLink);
     }
     return $linkModelList;
 }
示例#14
0
 function process(Vtiger_Request $request)
 {
     $viewer = $this->getViewer($request);
     $moduleName = $request->getModule();
     $currentUser = Users_Record_Model::getCurrentUserModel();
     if ('true' == $request->get('type_remainder')) {
         $recordModels = Calendar_Module_Model::getCalendarReminder(true);
     } else {
         $recordModels = Calendar_Module_Model::getCalendarReminder();
     }
     foreach ($recordModels as $record) {
         $record->updateReminderStatus(2);
     }
     $permissionToSendEmail = vtlib_isModuleActive('OSSMail') && Users_Privileges_Model::isPermitted('OSSMail', 'compose');
     $viewer->assign('PERMISSION_TO_SENDE_MAIL', $permissionToSendEmail);
     $viewer->assign('MODULE_NAME', $moduleName);
     $viewer->assign('RECORDS', $recordModels);
     $viewer->view('Reminders.tpl', $moduleName);
 }
示例#15
0
 public function getCalendarSettings(Vtiger_Request $request)
 {
     $viewer = $this->getViewer($request);
     $currentUserModel = Users_Record_Model::getCurrentUserModel();
     $module = $request->getModule();
     $detailViewModel = Vtiger_DetailView_Model::getInstance('Users', $currentUserModel->id);
     $userRecordStructure = Vtiger_RecordStructure_Model::getInstanceFromRecordModel($detailViewModel->getRecord(), Vtiger_RecordStructure_Model::RECORD_STRUCTURE_MODE_EDIT);
     $recordStructure = $userRecordStructure->getStructure();
     $allUsers = Users_Record_Model::getAll(true);
     $sharedUsers = Calendar_Module_Model::getCaledarSharedUsers($currentUserModel->id);
     $sharedType = Calendar_Module_Model::getSharedType($currentUserModel->id);
     $dayStartPicklistValues = Users_Record_Model::getDayStartsPicklistValues($recordStructure);
     $viewer->assign('CURRENTUSER_MODEL', $currentUserModel);
     $viewer->assign('SHAREDUSERS', $sharedUsers);
     $viewer->assign("DAY_STARTS", Zend_Json::encode($dayStartPicklistValues));
     $viewer->assign('ALL_USERS', $allUsers);
     $viewer->assign('RECORD_STRUCTURE', $recordStructure);
     $viewer->assign('MODULE', $module);
     $viewer->assign('RECORD', $currentUserModel->id);
     $viewer->assign('SHAREDTYPE', $sharedType);
     $viewer->view('CalendarSettings.tpl', $request->getModule());
 }
示例#16
0
 /**
  * Function to get relation query for particular module with function name
  * @param <record> $recordId
  * @param <String> $functionName
  * @param Vtiger_Module_Model $relatedModule
  * @return <String>
  */
 public function getRelationQuery($recordId, $functionName, $relatedModule, $relationModel = false)
 {
     if ($functionName === 'get_activities') {
         $focus = CRMEntity::getInstance($this->getName());
         $focus->id = $recordId;
         $entityIds = $focus->getRelatedContactsIds();
         $entityIds[] = $recordId;
         $entityIds = implode(',', $entityIds);
         $userNameSql = getSqlForNameInDisplayFormat(array('first_name' => 'vtiger_users.first_name', 'last_name' => 'vtiger_users.last_name'), 'Users');
         $query = "SELECT CASE WHEN (vtiger_users.user_name not like '') THEN {$userNameSql} ELSE vtiger_groups.groupname END AS user_name,\n\t\t\t\t\t\tvtiger_crmentity.*, vtiger_activity.activitytype, vtiger_activity.subject, vtiger_activity.date_start, vtiger_activity.time_start,\n\t\t\t\t\t\tvtiger_activity.recurringtype, vtiger_activity.due_date, vtiger_activity.time_end, vtiger_activity.visibility, \n\t\t\t\t\t\tvtiger_activity.status AS status\n\t\t\t\t\t\tFROM vtiger_activity\n\t\t\t\t\t\tINNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_activity.activityid\n\t\t\t\t\t\tLEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid\n\t\t\t\t\t\tLEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid\n\t\t\t\t\t\tWHERE vtiger_crmentity.deleted = 0 AND vtiger_activity.link IN (" . $entityIds . ')';
         $time = vtlib_purify($_REQUEST['time']);
         if ($time == 'current') {
             $stateActivityLabels = Calendar_Module_Model::getComponentActivityStateLabel('current');
             $query .= " AND (vtiger_activity.activitytype NOT IN ('Emails') AND vtiger_activity.status IN ('" . implode("','", $stateActivityLabels) . "'))";
         }
         if ($time == 'history') {
             $stateActivityLabels = Calendar_Module_Model::getComponentActivityStateLabel('history');
             $query .= " AND (vtiger_activity.activitytype NOT IN ('Emails') AND vtiger_activity.status IN ('" . implode("','", $stateActivityLabels) . "'))";
         }
         $relatedModuleName = $relatedModule->getName();
         $query .= $this->getSpecificRelationQuery($relatedModuleName);
         $instance = CRMEntity::getInstance($relatedModuleName);
         $securityParameter = $instance->getUserAccessConditionsQuerySR($relatedModuleName, false, $recordId);
         if ($securityParameter != '') {
             $query .= $securityParameter;
         }
         // There could be more than one contact for an activity.
         $query .= ' GROUP BY vtiger_activity.activityid';
     } elseif ($functionName === 'get_dependents_list' && $relatedModule->getName() == 'OutsourcedProducts') {
         $query = parent::getRelationQuery($recordId, $functionName, $relatedModule, $relationModel);
         $query .= " OR potential IN (SELECT potentialid FROM vtiger_potential INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_potential.potentialid WHERE vtiger_crmentity.deleted = 0 AND related_to = '{$recordId}')";
     } elseif ($functionName === 'get_mails' && $relatedModule->getName() == 'OSSMailView') {
         $query = OSSMailView_Record_Model::getMailsQuery($recordId, $relatedModule->getName());
     } else {
         $query = parent::getRelationQuery($recordId, $functionName, $relatedModule, $relationModel);
     }
     return $query;
 }
示例#17
0
<?php

/* {[The file is published on the basis of YetiForce Public License that can be found in the following directory: licenses/License.html]} */
require_once 'include/main/WebUI.php';
$user = new Users();
$current_user = $user->retrieveCurrentUserInfoFromFile("1");
$adb = PearDatabase::getInstance();
$statusActivity = Calendar_Module_Model::getComponentActivityStateLabel();
$query = 'SELECT vtiger_activity.`activityid`, vtiger_activity.`due_date`,vtiger_activity.`time_end`,vtiger_activity.`date_start`,vtiger_activity.`time_start`,vtiger_activity.`state` FROM vtiger_activity INNER JOIN vtiger_crmentity AS crm ON crm.crmid = vtiger_activity.`activityid` WHERE vtiger_activity.`status` IN (?,?) AND crm.`deleted` = ?';
$result = $adb->pquery($query, [$statusActivity['not_started'], $statusActivity['in_realization'], 0]);
while ($row = $adb->fetch_array($result)) {
    $state = Calendar_Module_Model::getCalendarState($row);
    if ($state) {
        $recordModel = Vtiger_Record_Model::getInstanceById($row['activityid']);
        $recordModel->set('id', $row['activityid']);
        $recordModel->set('activitystatus', $state);
        $recordModel->set('mode', 'edit');
        $recordModel->save();
    }
}
示例#18
0
 public function getEntity()
 {
     $db = PearDatabase::getInstance();
     $module = 'Calendar';
     $currentUser = Users_Record_Model::getCurrentUserModel();
     $query = "SELECT vtiger_activity.activityid as act_id,vtiger_crmentity.crmid, vtiger_crmentity.smownerid, vtiger_crmentity.setype,\n\t\tvtiger_activity.*, relcrm.setype AS linkmod, relcrm.label AS linklabel, procrm.label AS processlabel, procrm.setype AS processmod\n\t\tFROM vtiger_activity\n\t\tLEFT JOIN vtiger_activitycf\n\t\t\tON vtiger_activitycf.activityid = vtiger_activity.activityid\n\t\tLEFT JOIN vtiger_crmentity\n\t\t\tON vtiger_crmentity.crmid = vtiger_activity.activityid\n\t\tLEFT JOIN vtiger_crmentity relcrm\n\t\t\tON relcrm.crmid = vtiger_activity.link\n\t\tLEFT JOIN vtiger_crmentity procrm\n\t\t\tON procrm.crmid = vtiger_activity.process\n\t\tWHERE vtiger_crmentity.deleted = 0 AND activitytype != 'Emails' ";
     $instance = CRMEntity::getInstance($module);
     $securityParameter = $instance->getUserAccessConditionsQuerySR($module, $currentUser);
     if ($securityParameter != '') {
         $query .= $securityParameter;
     }
     $params = array();
     if ($this->get('start') && $this->get('end')) {
         $dbStartDateOject = DateTimeField::convertToDBTimeZone($this->get('start'));
         $dbStartDateTime = $dbStartDateOject->format('Y-m-d H:i:s');
         $dbStartDate = $dbStartDateOject->format('Y-m-d');
         $dbEndDateObject = DateTimeField::convertToDBTimeZone($this->get('end'));
         $dbEndDateTime = $dbEndDateObject->format('Y-m-d H:i:s');
         $dbEndDate = $dbEndDateObject->format('Y-m-d');
         $query .= " AND ( (concat(date_start, ' ', time_start)  >= ? AND concat(date_start, ' ', time_start) <= ?) OR (concat(due_date, ' ', time_end)  >= ? AND concat(due_date, ' ', time_end) <= ?) OR (date_start < ? AND due_date > ?) ) ";
         $params[] = $dbStartDateTime;
         $params[] = $dbEndDateTime;
         $params[] = $dbStartDateTime;
         $params[] = $dbEndDateTime;
         $params[] = $dbStartDate;
         $params[] = $dbEndDate;
     }
     if ($this->get('types')) {
         $query .= " AND vtiger_activity.activitytype IN ('" . implode("','", $this->get('types')) . "')";
     }
     if ($this->get('time') == 'current') {
         $stateActivityLabels = Calendar_Module_Model::getComponentActivityStateLabel('current');
         $query .= " AND vtiger_activity.status IN ('" . implode("','", $stateActivityLabels) . "')";
     }
     if ($this->get('time') == 'history') {
         $stateActivityLabels = Calendar_Module_Model::getComponentActivityStateLabel('history');
         $query .= " AND vtiger_activity.status IN ('" . implode("','", $stateActivityLabels) . "')";
     }
     if ($this->get('activitystatus')) {
         $query .= " AND vtiger_activity.status IN ('" . $this->get('activitystatus') . "')";
     }
     if ($this->get('user')) {
         if (is_array($this->get('user'))) {
             $query .= ' AND vtiger_crmentity.smownerid IN (' . implode(",", $this->get('user')) . ')';
         } else {
             $query .= ' AND vtiger_crmentity.smownerid IN (' . $this->get('user') . ')';
         }
     }
     $query .= ' ORDER BY date_start,time_start ASC';
     $queryResult = $db->pquery($query, $params);
     $result = array();
     for ($i = 0; $i < $db->num_rows($queryResult); $i++) {
         $record = $db->raw_query_result_rowdata($queryResult, $i);
         $item = array();
         $crmid = $record['activityid'];
         $activitytype = $record['activitytype'];
         $item['id'] = $crmid;
         $item['title'] = $record['subject'];
         $item['url'] = 'index.php?module=' . $module . '&view=Detail&record=' . $crmid;
         $item['set'] = $record['activitytype'] == 'Task' ? 'Task' : 'Event';
         $item['lok'] = $record['location'];
         $item['pri'] = $record['priority'];
         $item['sta'] = $record['status'];
         $item['vis'] = $record['visibility'];
         $item['state'] = $record['state'];
         //Relation
         $item['link'] = $record['link'];
         $item['linkl'] = $record['linklabel'];
         $item['linkm'] = $record['linkmod'];
         //Process
         $item['process'] = $record['process'];
         $item['procl'] = $record['processlabel'];
         $item['procm'] = $record['processmod'];
         if ($record['linkmod'] != 'Accounts' && (!empty($record['link']) || !empty($record['process']))) {
             $findId = 0;
             $findMod = '';
             if (!empty($record['link'])) {
                 $findId = $record['link'];
                 $findMod = $record['linkmod'];
             }
             if (!empty($record['process'])) {
                 $findId = $record['process'];
                 $findMod = $record['processmod'];
             }
             $tabInfo = $this->relationAcounts[$findMod];
             if ($tabInfo) {
                 $findResult = $db->pquery('SELECT accountid, accountname FROM vtiger_account ' . 'INNER JOIN ' . $tabInfo[0] . ' ON vtiger_account.accountid = ' . $tabInfo[0] . '.' . $tabInfo[2] . ' WHERE ' . $tabInfo[1] . ' = ?;', [$findId]);
                 if ($db->num_rows($findResult) > 0) {
                     $item['accid'] = $db->query_result_raw($findResult, 0, 'accountid');
                     $item['accname'] = $db->query_result_raw($findResult, 0, 'accountname');
                 }
             }
         }
         $dateTimeFieldInstance = new DateTimeField($record['date_start'] . ' ' . $record['time_start']);
         $userDateTimeString = $dateTimeFieldInstance->getDisplayDateTimeValue($currentUser);
         $dateTimeComponents = explode(' ', $userDateTimeString);
         $dateComponent = $dateTimeComponents[0];
         $startTimeFormated = $dateTimeComponents[1];
         //Conveting the date format in to Y-m-d . since full calendar expects in the same format
         $startDateFormated = DateTimeField::__convertToDBFormat($dateComponent, $currentUser->get('date_format'));
         $dateTimeFieldInstance = new DateTimeField($record['due_date'] . ' ' . $record['time_end']);
         $userDateTimeString = $dateTimeFieldInstance->getDisplayDateTimeValue($currentUser);
         $dateTimeComponents = explode(' ', $userDateTimeString);
         $dateComponent = $dateTimeComponents[0];
         $endTimeFormated = $dateTimeComponents[1];
         //Conveting the date format in to Y-m-d . since full calendar expects in the same format
         $endDateFormated = DateTimeField::__convertToDBFormat($dateComponent, $currentUser->get('date_format'));
         $item['start'] = $startDateFormated . ' ' . $startTimeFormated;
         $item['end'] = $endDateFormated . ' ' . $endTimeFormated;
         $item['allDay'] = $record['allday'] == 1 ? true : false;
         $item['className'] = ' userCol_' . $record['smownerid'] . ' calCol_' . $activitytype;
         if ($this->has('widget') && $this->get('widget') == true) {
             $widgetElements = $this->getWidgetElements($widgetElements, $startDateFormated, $endDateFormated, $activitytype);
             $result = array_values($widgetElements);
         } else {
             $result[] = $item;
         }
     }
     return $result;
 }
示例#19
0
 public function getRelationQueryForActivities($recordId, $relatedModule, $relationModel)
 {
     $query = 'SELECT vtiger_crmentity.*,vtiger_activity.* FROM vtiger_activity ' . ' INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_activity.activityid' . ' WHERE vtiger_activity.deleted = 0';
     $referenceLinkClass = Vtiger_Loader::getComponentClassName('UIType', 'ReferenceLink', $relatedModule->getName());
     $referenceLinkInstance = new $referenceLinkClass();
     if (in_array($this->getName(), $referenceLinkInstance->getReferenceList())) {
         $query .= ' AND vtiger_activity.`link` = ';
     } else {
         $referenceProcessClass = Vtiger_Loader::getComponentClassName('UIType', 'ReferenceProcess', $relatedModule->getName());
         $referenceProcessInstance = new $referenceProcessClass();
         if (in_array($this->getName(), $referenceProcessInstance->getReferenceList())) {
             $query .= ' AND vtiger_activity.`process` = ';
         } else {
             $referenceSubProcessClass = Vtiger_Loader::getComponentClassName('UIType', 'ReferenceSubProcess', $relatedModule->getName());
             $referenceSubProcessInstance = new $referenceSubProcessClass();
             if (in_array($this->getName(), $referenceSubProcessInstance->getReferenceList())) {
                 $query .= ' AND vtiger_activity.`subprocess` = ';
             } else {
                 throw new AppException('LBL_HANDLER_NOT_FOUND');
             }
         }
     }
     $query .= $recordId;
     $time = vtlib_purify($_REQUEST['time']);
     if ($time == 'current') {
         $stateActivityLabels = Calendar_Module_Model::getComponentActivityStateLabel('current');
         $query .= " AND (vtiger_activity.activitytype NOT IN ('Emails') AND vtiger_activity.status IN ('" . implode("','", $stateActivityLabels) . "'))";
     }
     if ($time == 'history') {
         $stateActivityLabels = Calendar_Module_Model::getComponentActivityStateLabel('history');
         $query .= " AND (vtiger_activity.activitytype NOT IN ('Emails') AND vtiger_activity.status IN ('" . implode("','", $stateActivityLabels) . "'))";
     }
     return $query;
 }
示例#20
0
 /**
  * Function to get the record model based on the request parameters
  * @param Vtiger_Request $request
  * @return Vtiger_Record_Model or Module specific Record Model instance
  */
 public function getRecordModelFromRequest(Vtiger_Request $request)
 {
     $recordModel = parent::getRecordModelFromRequest($request);
     $startDate = $request->get('date_start');
     if (!empty($startDate)) {
         //Start Date and Time values
         $startTime = Vtiger_Time_UIType::getTimeValueWithSeconds($request->get('time_start'));
         $startDate = Vtiger_Date_UIType::getDBInsertedValue($request->get('date_start'));
         if ($startTime) {
             $startDateTime = Vtiger_Datetime_UIType::getDBDateTimeValue($request->get('date_start') . " " . $startTime);
             list($startDate, $startTime) = explode(' ', $startDateTime);
         }
         $recordModel->set('date_start', $startDate);
         $recordModel->set('time_start', $startTime);
     }
     $endDate = $request->get('due_date');
     if (!empty($endDate)) {
         //End Date and Time values
         $endTime = $request->get('time_end');
         $endDate = Vtiger_Date_UIType::getDBInsertedValue($request->get('due_date'));
         if ($endTime) {
             $endTime = Vtiger_Time_UIType::getTimeValueWithSeconds($endTime);
             $endDateTime = Vtiger_Datetime_UIType::getDBDateTimeValue($request->get('due_date') . " " . $endTime);
             list($endDate, $endTime) = explode(' ', $endDateTime);
         }
         $recordModel->set('time_end', $endTime);
         $recordModel->set('due_date', $endDate);
     }
     $record = $request->get('record');
     if (!$record) {
         $activityType = $request->get('activitytype');
         $visibility = $request->get('visibility');
         if (empty($activityType)) {
             $recordModel->set('activitytype', 'Task');
             $visibility = 'Private';
             $recordModel->set('visibility', $visibility);
         }
     }
     if (empty($visibility)) {
         $assignedUserId = $recordModel->get('assigned_user_id');
         $sharedType = Calendar_Module_Model::getSharedType($assignedUserId);
         if ($sharedType == 'selectedusers') {
             $sharedType = 'public';
         }
         $recordModel->set('visibility', ucfirst($sharedType));
     }
     return $recordModel;
 }
示例#21
0
 /**
  * Function returns the Calendar Events for the module
  * @param <String> $mode - upcoming/overdue mode
  * @param <Vtiger_Paging_Model> $pagingModel - $pagingModel
  * @param <String> $user - all/userid
  * @param <String> $recordId - record id
  * @return <Array>
  */
 function getCalendarActivities($mode, $pagingModel, $user, $recordId = false)
 {
     $currentUser = Users_Record_Model::getCurrentUserModel();
     $db = PearDatabase::getInstance();
     if (!$user) {
         $user = $currentUser->getId();
     }
     $currentActivityLabels = Calendar_Module_Model::getComponentActivityStateLabel('current');
     $nowInUserFormat = Vtiger_Datetime_UIType::getDisplayDateValue(date('Y-m-d H:i:s'));
     $nowInDBFormat = Vtiger_Datetime_UIType::getDBDateTimeValue($nowInUserFormat);
     list($currentDate, $currentTime) = explode(' ', $nowInDBFormat);
     if (in_array($this->getName(), ['Accounts', 'Leads', 'Contacts', 'Vendors', 'OSSEmployees'])) {
         $relationField = 'link';
     }
     if (in_array($this->getName(), ['Campaigns', 'HelpDesk', 'Potentials', 'Project', 'ServiceContracts'])) {
         $relationField = 'process';
     }
     $query = "SELECT vtiger_crmentity.crmid, crmentity2.crmid AS parent_id, vtiger_crmentity.description as description, vtiger_crmentity.smownerid, vtiger_crmentity.smcreatorid, vtiger_crmentity.setype, vtiger_activity.* FROM vtiger_activity\n\t\t\t\t\tINNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_activity.activityid\n\t\t\t\t\tINNER JOIN vtiger_crmentity AS crmentity2 ON vtiger_activity." . $relationField . " = crmentity2.crmid AND crmentity2.deleted = 0 AND crmentity2.setype = ?\n\t\t\t\t\tLEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid WHERE vtiger_crmentity.deleted=0";
     $params = [$this->getName()];
     if ($recordId) {
         $query .= ' AND vtiger_activity.' . $relationField . ' = ?';
         array_push($params, $recordId);
     }
     if ($mode === 'current') {
         $query .= " AND (vtiger_activity.activitytype NOT IN ('Emails') AND vtiger_activity.status IN (" . generateQuestionMarks($currentActivityLabels) . "))";
         $params = array_merge($params, $currentActivityLabels);
     } elseif ($mode === 'history') {
         $query .= " AND (vtiger_activity.activitytype NOT IN ('Emails') AND vtiger_activity.status NOT IN (" . generateQuestionMarks($currentActivityLabels) . "))";
         $params = array_merge($params, $currentActivityLabels);
     } elseif ($mode === 'upcoming') {
         $query .= " AND (vtiger_activity.activitytype NOT IN ('Emails'))\n\t\t\t\t\tAND (vtiger_activity.status is NULL OR vtiger_activity.status NOT IN ('Completed', 'Deferred'))";
         $query .= " AND due_date >= '{$currentDate}'";
     } elseif ($mode === 'overdue') {
         $query .= " AND (vtiger_activity.activitytype NOT IN ('Emails'))\n\t\t\t\t\tAND (vtiger_activity.status is NULL OR vtiger_activity.status NOT IN ('Completed', 'Deferred'))";
         $query .= " AND due_date < '{$currentDate}'";
     }
     if ($user != 'all' && $user != '') {
         if ($user === $currentUser->id) {
             $query .= " AND vtiger_crmentity.smownerid = ?";
             array_push($params, $user);
         }
     }
     $moduleName = 'Calendar';
     $instance = CRMEntity::getInstance($moduleName);
     $securityParameter = $instance->getUserAccessConditionsQuerySR($moduleName, $currentUser, $recordId);
     if ($securityParameter != '') {
         $query .= $securityParameter;
     }
     $query .= " ORDER BY date_start, time_start LIMIT " . $pagingModel->getStartIndex() . ", " . ($pagingModel->getPageLimit() + 1);
     $result = $db->pquery($query, $params);
     $numOfRows = $db->num_rows($result);
     $groupsIds = Vtiger_Util_Helper::getGroupsIdsForUsers($currentUser->getId());
     $activities = array();
     for ($i = 0; $i < $numOfRows; $i++) {
         $newRow = $db->query_result_rowdata($result, $i);
         $model = Vtiger_Record_Model::getCleanInstance('Calendar');
         $ownerId = $newRow['smownerid'];
         $currentUser = Users_Record_Model::getCurrentUserModel();
         $visibleFields = array('activitytype', 'date_start', 'time_start', 'due_date', 'time_end', 'assigned_user_id', 'visibility', 'smownerid', 'crmid');
         $visibility = true;
         if (in_array($ownerId, $groupsIds)) {
             $visibility = false;
         } else {
             if ($ownerId == $currentUser->getId()) {
                 $visibility = false;
             }
         }
         if (!$currentUser->isAdminUser() && $newRow['activitytype'] != 'Task' && $newRow['visibility'] == 'Private' && $ownerId && $visibility) {
             foreach ($newRow as $data => $value) {
                 if (in_array($data, $visibleFields) != -1) {
                     unset($newRow[$data]);
                 }
             }
             $newRow['subject'] = vtranslate('Busy', 'Events') . '*';
         }
         if ($newRow['activitytype'] == 'Task') {
             unset($newRow['visibility']);
         }
         $sql = "SELECT * FROM vtiger_invitees WHERE activityid = '" . $newRow['crmid'] . "'";
         $result_invitees = $db->query($sql);
         while ($recordinfo = $db->fetch_array($result_invitees)) {
             $newRow['selectedusers'][] = $recordinfo['inviteeid'];
         }
         $model->setData($newRow);
         $model->setId($newRow['crmid']);
         $activities[] = $model;
     }
     $pagingModel->calculatePageRange($activities);
     if ($numOfRows > $pagingModel->getPageLimit()) {
         array_pop($activities);
         $pagingModel->set('nextPageExists', true);
     } else {
         $pagingModel->set('nextPageExists', false);
     }
     return $activities;
 }
示例#22
0
 public static function getCalendarState($data = [])
 {
     if ($data) {
         $activityStatus = $data['activitystatus'];
         if (in_array($activityStatus, Calendar_Module_Model::getComponentActivityStateLabel('history'))) {
             return false;
         }
         $dueDateTime = $data['due_date'] . ' ' . $data['time_end'];
         $startDateTime = $data['date_start'] . ' ' . $data['time_start'];
         $dates = ['start' => $startDateTime, 'end' => $dueDateTime, 'current' => null];
         foreach ($dates as $key => $date) {
             $date = new DateTimeField($date);
             $userFormatedString = $date->getDisplayDate();
             $timeFormatedString = $date->getDisplayTime();
             $dBFomatedDate = DateTimeField::convertToDBFormat($userFormatedString);
             $dates[$key] = strtotime($dBFomatedDate . " " . $timeFormatedString);
         }
         $activityStatusLabels = Calendar_Module_Model::getComponentActivityStateLabel();
         $state = $activityStatusLabels['not_started'];
         if ($dates['end'] > $dates['current'] && $dates['start'] < $dates['current']) {
             $state = $activityStatusLabels['in_realization'];
         } elseif ($dates['end'] > $dates['current']) {
             $state = $activityStatusLabels['not_started'];
         } elseif ($dates['end'] < $dates['current']) {
             $state = $activityStatusLabels['overdue'];
         }
         return $state;
     }
     return false;
 }
示例#23
0
    /**
     * Function returns the Calendar Events for the module
     * @param <String> $mode - upcoming/overdue mode
     * @param <Vtiger_Paging_Model> $pagingModel - $pagingModel
     * @param <String> $user - all/userid
     * @param <String> $recordId - record id
     * @return <Array>
     */
    function getCalendarActivities($mode, $pagingModel, $user, $recordId = false, $paramsMore = [])
    {
        $currentUser = Users_Record_Model::getCurrentUserModel();
        $db = PearDatabase::getInstance();
        if (!$user) {
            $user = $currentUser->getId();
        }
        $orderBy = $pagingModel->getForSql('orderby');
        $sortOrder = $pagingModel->getForSql('sortorder');
        if (empty($sortOrder) || !in_array(strtolower($sortOrder), ['asc', 'desc'])) {
            $sortOrder = 'ASC';
        }
        if (empty($orderBy)) {
            $orderBy = "due_date {$sortOrder}, time_end {$sortOrder}";
        } else {
            $orderBy .= ' ' . $sortOrder;
        }
        $stateActivityLabels = Calendar_Module_Model::getComponentActivityStateLabel();
        $nowInUserFormat = Vtiger_Datetime_UIType::getDisplayDateTimeValue(date('Y-m-d H:i:s'));
        $nowInDBFormat = Vtiger_Datetime_UIType::getDBDateTimeValue($nowInUserFormat);
        $instance = CRMEntity::getInstance('Calendar');
        $userAccessConditions = $instance->getUserAccessConditionsQuerySR('Calendar');
        $params = [];
        $query = 'SELECT vtiger_crmentity.crmid, vtiger_crmentity.smownerid, vtiger_crmentity.setype, vtiger_activity.*
			FROM vtiger_activity
			INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_activity.activityid
			WHERE vtiger_crmentity.deleted=0 ';
        $query .= $userAccessConditions;
        if ($mode === 'upcoming') {
            $query .= "AND (vtiger_activity.activitytype NOT IN ('Emails'))\n\t\t\tAND (vtiger_activity.status is NULL OR vtiger_activity.status IN (?))";
            array_push($params, $paramsMore['status']);
        } elseif ($mode === 'overdue') {
            $overdueActivityLabels = Calendar_Module_Model::getComponentActivityStateLabel('overdue');
            $query .= "AND (vtiger_activity.activitytype NOT IN ('Emails'))\n\t\t\tAND (vtiger_activity.status is NULL OR vtiger_activity.status IN (?))";
            //AND CONCAT(due_date,' ',time_end) < '$nowInDBFormat'";
            array_push($params, $overdueActivityLabels);
        } elseif ($mode === 'assigned_upcoming') {
            $stateActivityLabels = Calendar_Module_Model::getComponentActivityStateLabel('current');
            $query .= "AND (vtiger_activity.status is NULL OR vtiger_activity.status IN (" . generateQuestionMarks($stateActivityLabels) . ")) AND vtiger_crmentity.smcreatorid = ?";
            $params = array_merge($params, $stateActivityLabels);
            $params[] = $currentUser->getId();
        } elseif ($mode === 'assigned_over') {
            $overdueActivityLabels = Calendar_Module_Model::getComponentActivityStateLabel('overdue');
            $query .= "AND (vtiger_activity.status is NULL OR vtiger_activity.status IN (?)) AND vtiger_crmentity.smcreatorid = ?";
            array_push($params, $overdueActivityLabels, $currentUser->getId());
        } elseif ($mode === 'createdByMeButNotMine') {
            if ($paramsMore['activitesType'] != 'upcoming') {
                $status = [$stateActivityLabels['not_started'], $stateActivityLabels['in_realization']];
            } else {
                $status = [$stateActivityLabels['overdue']];
            }
            $query .= "AND (vtiger_activity.status is NULL OR vtiger_activity.status IN (" . generateQuestionMarks($status) . ")) AND vtiger_crmentity.smcreatorid = ? AND vtiger_crmentity.smownerid NOT IN (?) ";
            $params = array_merge($params, $status);
            array_push($params, $currentUser->getId(), $currentUser->getId());
        }
        $accessibleUsers = $currentUser->getAccessibleUsers();
        $accessibleGroups = $currentUser->getAccessibleGroups();
        if ($user != 'all' && $user != '' && (array_key_exists($user, $accessibleUsers) || array_key_exists($user, $accessibleGroups))) {
            $query .= ' AND vtiger_crmentity.smownerid = ?';
            $params[] = $user;
        }
        $query .= ' ORDER BY ' . $orderBy . ' LIMIT ?, ?';
        $params[] = $pagingModel->getStartIndex();
        $params[] = $pagingModel->getPageLimit() + 1;
        $result = $db->pquery($query, $params);
        $activities = [];
        while ($row = $db->fetch_array($result)) {
            $model = Vtiger_Record_Model::getCleanInstance('Calendar');
            $model->setData($row);
            $model->setId($row['crmid']);
            if ($row['parent_id']) {
                if (isRecordExists($row['parent_id'])) {
                    $record = Vtiger_Record_Model::getInstanceById($row['parent_id']);
                    if ($record->getModuleName() == 'Accounts') {
                        $model->set('contractor', $record);
                    } else {
                        if ($record->getModuleName() == 'Potentials') {
                            if (isRecordExists($record->get('related_to'))) {
                                $recordContractor = Vtiger_Record_Model::getInstanceById($record->get('related_to'));
                                $model->set('contractor', $recordContractor);
                            }
                        } else {
                            if ($record->getModuleName() == 'Project') {
                                if (isRecordExists($record->get('linktoaccountscontacts'))) {
                                    $recordContractor = Vtiger_Record_Model::getInstanceById($record->get('linktoaccountscontacts'));
                                    $model->set('contractor', $recordContractor);
                                }
                            } else {
                                if ($record->getModuleName() == 'ServiceContracts') {
                                    if (isRecordExists($record->get('sc_realted_to'))) {
                                        $recordContractor = Vtiger_Record_Model::getInstanceById($record->get('sc_realted_to'));
                                        $model->set('contractor', $recordContractor);
                                    }
                                } else {
                                    if ($record->getModuleName() == 'HelpDesk') {
                                        if (isRecordExists($record->get('parent_id'))) {
                                            $recordContractor = Vtiger_Record_Model::getInstanceById($record->get('parent_id'));
                                            $model->set('contractor', $recordContractor);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            $contactsA = getActivityRelatedContacts($row['activityid']);
            if (count($contactsA)) {
                foreach ($contactsA as $j => $rcA2) {
                    $contactsA[$j] = '<a href="index.php?module=Contacts&view=Detail&record=' . $j . '">' . $rcA2 . '</a>';
                    $model->set('contact_id', $contactsA);
                }
            }
            $activities[] = $model;
        }
        $pagingModel->calculatePageRange($activities);
        if ($result->rowCount() > $pagingModel->getPageLimit()) {
            array_pop($activities);
            $pagingModel->set('nextPageExists', true);
        } else {
            $pagingModel->set('nextPageExists', false);
        }
        return $activities;
    }
示例#24
0
 /**
  * Function to get the record model based on the request parameters
  * @param Vtiger_Request $request
  * @return Vtiger_Record_Model or Module specific Record Model instance
  */
 public function getRecordModelFromRequest(Vtiger_Request $request)
 {
     $recordModel = parent::getRecordModelFromRequest($request);
     $startDate = $request->get('date_start');
     if (!empty($startDate)) {
         //Start Date and Time values
         $startTime = Vtiger_Time_UIType::getTimeValueWithSeconds($request->get('time_start'));
         $startDate = Vtiger_Date_UIType::getDBInsertedValue($request->get('date_start'));
         if ($startTime) {
             $startDateTime = Vtiger_Datetime_UIType::getDBDateTimeValue($request->get('date_start') . " " . $startTime);
             list($startDate, $startTime) = explode(' ', $startDateTime);
         }
         $recordModel->set('date_start', $startDate);
         $recordModel->set('time_start', $startTime);
     }
     $endDate = $request->get('due_date');
     if (!empty($endDate)) {
         //End Date and Time values
         $endTime = $request->get('time_end');
         $endDate = Vtiger_Date_UIType::getDBInsertedValue($request->get('due_date'));
         if ($endTime) {
             $endTime = Vtiger_Time_UIType::getTimeValueWithSeconds($endTime);
             $endDateTime = Vtiger_Datetime_UIType::getDBDateTimeValue($request->get('due_date') . " " . $endTime);
             list($endDate, $endTime) = explode(' ', $endDateTime);
         }
         $recordModel->set('time_end', $endTime);
         $recordModel->set('due_date', $endDate);
     }
     $record = $request->get('record');
     if (!$record) {
         $activityType = $request->get('activitytype');
         $visibility = $request->get('visibility');
         if (empty($activityType)) {
             $recordModel->set('activitytype', 'Task');
             $visibility = 'Private';
             $recordModel->set('visibility', $visibility);
         }
     }
     if (empty($visibility)) {
         $assignedUserId = $recordModel->get('assigned_user_id');
         $sharedType = Calendar_Module_Model::getSharedType($assignedUserId);
         if ($sharedType == 'selectedusers') {
             $sharedType = 'public';
         }
         $recordModel->set('visibility', ucfirst($sharedType));
     }
     $time = strtotime($endTime) - strtotime($startTime);
     $diffinSec = strtotime($endDate) - strtotime($startDate);
     $diff_days = floor($diffinSec / (60 * 60 * 24));
     $hours = (double) $time / 3600 + $diff_days * 24;
     $minutes = ((double) $hours - (int) $hours) * 60;
     $recordModel->set('duration_hours', (int) $hours);
     $recordModel->set('duration_minutes', round($minutes, 0));
     return $recordModel;
 }
示例#25
0
 /** Function to insert values in vtiger_activity_reminder_popup table for the specified module
  * @param $cbmodule -- module:: Type varchar
  */
 function insertIntoActivityReminderPopup($cbmodule)
 {
     $adb = PearDatabase::getInstance();
     $cbrecord = $this->id;
     unset($_SESSION['next_reminder_time']);
     if (isset($cbmodule) && isset($cbrecord)) {
         $cbdate = getValidDBInsertDateValue($this->column_fields['date_start']);
         $cbtime = $this->column_fields['time_start'];
         $reminderQuery = 'SELECT reminderid FROM vtiger_activity_reminder_popup WHERE semodule = ? and recordid = ?';
         $reminderParams = [$cbmodule, $cbrecord];
         $reminderidres = $adb->pquery($reminderQuery, $reminderParams);
         $reminderid = null;
         if ($reminderidres->rowCount() > 0) {
             $reminderid = $adb->query_result($reminderidres, 0, 'reminderid');
         }
         $currentStates = Calendar_Module_Model::getComponentActivityStateLabel('current');
         $state = Calendar_Module_Model::getCalendarState($this->column_fields);
         if (in_array($state, $currentStates)) {
             $status = 0;
         } else {
             $status = 1;
         }
         if (isset($reminderid)) {
             $adb->update('vtiger_activity_reminder_popup', ['date_start' => $cbdate, 'time_start' => $cbtime, 'status' => $status], 'reminderid = ?', [$reminderid]);
         } else {
             $adb->insert('vtiger_activity_reminder_popup', ['recordid' => $cbrecord, 'semodule' => $cbmodule, 'date_start' => $cbdate, 'time_start' => $cbtime, 'status' => $status]);
         }
     }
 }