activeWidgets; } /** * @return array */ public function getHistory(): array { return $this->history; } /** * @return array */ public function getKeyMetrics(): array { return $this->keyMetrics; } /** * @return array */ public function getLeads(): array { return $this->leads; } /** * @return array */ public function getModules(): array { return $this->modules; } /** * @return array */ public function getOpenTickets(): array { return $this->openTickets; } /** * @return array */ public function getOverdueActivities(): array { return $this->overdueActivities; } /** * @return array */ public function getPotentials(): array { return $this->potentials; } /** * @return array */ public function getQuickCreateModules(): array { return $this->quickCreateModules; } /** * @return array */ public function getRevenuePerSalesPerson(): array { return $this->revenuePerSalesPerson; } /** * @return array */ public function getTicketsByStatus(): array { return $this->ticketsByStatus; } /** * @return array */ public function getTopOpportunities(): array { return $this->topOpportunities; } /** * @return array */ public function getTotalAmountBySalesStage(): array { return $this->totalAmountBySalesStage; } /** * @return array */ public function getUpcomingActivities(): array { return $this->upcomingActivities; } /** * @return array */ public function getUsers(): array { return $this->users; } /** * @return array */ public function getWidgets(): array { return $this->widgets; } /** * @param array $activeWidgets */ public function setActiveWidgets(array $activeWidgets): void { $this->activeWidgets = $activeWidgets; } /** * @param array $history */ public function setHistory(array $history): void { $this->history = $history; } /** * @param array $keyMetrics */ public function setKeyMetrics(array $keyMetrics): void { $this->keyMetrics = $keyMetrics; } /** * @param array $leads */ public function setLeads(array $leads): void { $this->leads = $leads; } /** * @param int $linkId */ public function setLinkId(int $linkId): void { $this->linkId = $linkId; } /** * @param string $moduleName */ public function setModuleName(string $moduleName): void { $this->moduleName = $moduleName; } /** * @param array $modules */ public function setModules(array $modules): void { $this->modules = $modules; } /** * @param string $name */ public function setName(string $name): void { $this->name = $name; } /** * @param array $openTickets */ public function setOpenTickets(array $openTickets): void { $this->openTickets = $openTickets; } /** * @param array $overdueActivities */ public function setOverdueActivities(array $overdueActivities): void { $this->overdueActivities = $overdueActivities; } /** * @param array $potentials */ public function setPotentials(array $potentials): void { $this->potentials = $potentials; } /** * @param array $quickCreateModules */ public function setQuickCreateModules(array $quickCreateModules): void { $this->quickCreateModules = $quickCreateModules; } /** * @param array $revenuePerSalesPerson */ public function setRevenuePerSalesPerson(array $revenuePerSalesPerson): void { $this->revenuePerSalesPerson = $revenuePerSalesPerson; } /** * @param array $ticketsByStatus */ public function setTicketsByStatus(array $ticketsByStatus): void { $this->ticketsByStatus = $ticketsByStatus; } /** * @param array $topOpportunities */ public function setTopOpportunities(array $topOpportunities): void { $this->topOpportunities = $topOpportunities; } /** * @param array $totalAmountBySalesStage */ public function setTotalAmountBySalesStage(array $totalAmountBySalesStage): void { $this->totalAmountBySalesStage = $totalAmountBySalesStage; } /** * @param array $upcomingActivities */ public function setUpcomingActivities(array $upcomingActivities): void { $this->upcomingActivities = $upcomingActivities; } /** * @param int $userId */ public function setUserId(int $userId): void { $this->userId = $userId; } /** * @param array $users */ public function setUsers(array $users): void { $this->users = $users; } /** * @param array $widgets */ public function setWidgets(array $widgets): void { $this->widgets = $widgets; } public function addWidget() { global $current_user; $widget = new Vtiger_Widget_Model(); $widget->set('linkid', $this->linkId); $widget->set('userid', $current_user->id); $widget->set('filterid', NULL); $dashboardModel = Vtiger_DashBoard_Model::getInstance($this->moduleName); $defaultTab = $dashboardModel->getUserDefaultTab($current_user->id); $widget->set('tabid', $defaultTab['id']); $widget->add(); } public function loadPotentialsBySalesPerson() { $moduleName = 'Potentials'; $moduleModel = Vtiger_Module_Model::getInstance($moduleName); $data = $moduleModel->getPotentialsPipelinedAmountPerSalesPerson(); $this->setPotentials($data); } public function loadPotentialsBySalesStage() { $moduleName = 'Potentials'; $moduleModel = Vtiger_Module_Model::getInstance($moduleName); $data = $moduleModel->getPotentialsCountBySalesStage(0 != $this->userId ? $this->userId : 'all', null); $this->setPotentials($data); } public function getPotentialsCountBySalesPerson() { $moduleName = 'Potentials'; $moduleModel = Vtiger_Module_Model::getInstance($moduleName); $data = $moduleModel->getPotentialsCountBySalesPerson(); $this->setPotentials($data); } public function loadHistory() { $pagingModel = new Vtiger_Paging_Model(); $pagingModel->set('page', 1); $pagingModel->set('limit', 50); $moduleModel = Vtiger_Module_Model::getInstance($this->moduleName); $history = $moduleModel->getHistory($pagingModel, '', $this->userId); $updates = []; foreach ($history as $key => $recentActivity) { $modelName = get_class($recentActivity); if ('ModTracker_Record_Model' === $modelName) { if ($recentActivity->isCreate()) { $updates[$key]['mode'] = 'create'; $updates[$key]['module'] = $recentActivity->getParent()->getModule()->getName(); $updates[$key]['record'] = decode_html($recentActivity->getParent()->getName()); $updates[$key]['time'] = decode_html(Vtiger_Util_Helper::formatDateDiffInStrings($recentActivity->getParent()->get('createdtime'))); $updates[$key]['translation'] = decode_html(ucfirst(vtranslate('LBL_ADDED'))); $updates[$key]['user'] = decode_html($recentActivity->getModifiedBy()->getName()); } elseif ($recentActivity->isUpdate()) { $updates[$key]['mode'] = 'update'; $updates[$key]['module'] = $recentActivity->getParent()->getModule()->getName(); $updates[$key]['record'] = decode_html($recentActivity->getParent()->getName()); $updates[$key]['time'] = decode_html(Vtiger_Util_Helper::formatDateDiffInStrings($recentActivity->getActivityTime())); $updates[$key]['translation'] = decode_html(ucfirst(vtranslate('LBL_UPDATED'))); $updates[$key]['user'] = decode_html($recentActivity->getModifiedBy()->getName()); foreach ($recentActivity->getFieldInstances() as $fieldModelKey => $fieldModel) { $updates[$key]['fields'][$fieldModelKey]['field'] = vtranslate($fieldModel->getName()); if ($fieldModel && $fieldModel->getFieldInstance() && $fieldModel->getFieldInstance()->isViewable() && '5' !== $fieldModel->getFieldInstance()->getDisplayType()) { if ('' !== $fieldModel->get('prevalue') && '' !== $fieldModel->get('postvalue') && !('reference' === $fieldModel->getFieldInstance()->getFieldDataType() && ('0' === $fieldModel->get('postvalue') || '0' === $fieldModel->get('prevalue')))) { $updates[$key]['fields'][$fieldModelKey]['translation'] = vtranslate('LBL_CHANGED'); $updates[$key]['fields'][$fieldModelKey]['fromTranslation'] = vtranslate('LBL_FROM'); $updates[$key]['fields'][$fieldModelKey]['preValue'] = Vtiger_Util_Helper::toVtiger6SafeHTML($fieldModel->getDisplayValue(decode_html($fieldModel->get('prevalue')))); } elseif ('' === $fieldModel->get('postvalue') || ('reference' === $fieldModel->getFieldInstance()->getFieldDataType() && '0' === $fieldModel->get('postvalue'))) { $updates[$key]['fields'][$fieldModelKey]['translation'] = vtranslate('LBL_IS_REMOVED'); $updates[$key]['fields'][$fieldModelKey]['preValue'] = Vtiger_Util_Helper::toVtiger6SafeHTML($fieldModel->getDisplayValue(decode_html($fieldModel->get('prevalue')))); } elseif ('' !== $fieldModel->get('postvalue') && !('reference' === $fieldModel->getFieldInstance()->getFieldDataType() && '0' === $fieldModel->get('postvalue'))) { $updates[$key]['fields'][$fieldModelKey]['translation'] = vtranslate('LBL_UPDATED'); } else { $updates[$key]['fields'][$fieldModelKey]['translation'] = vtranslate('LBL_CHANGED'); } if ('' !== $fieldModel->get('postvalue') && !('reference' === $fieldModel->getFieldInstance()->getFieldDataType() && '0' === $fieldModel->get('postvalue'))) { $updates[$key]['fields'][$fieldModelKey]['toTranslation'] = vtranslate('LBL_TO'); $updates[$key]['fields'][$fieldModelKey]['postValue'] = Vtiger_Util_Helper::toVtiger6SafeHTML($fieldModel->getDisplayValue(decode_html($fieldModel->get('postvalue')))); } } } } elseif ($recentActivity->isRelationLink() || $recentActivity->isRelationUnLink()) { $relation = $recentActivity->getRelationInstance(); if (!empty($relation->getLinkedRecord()) && !empty($relation->getLinkedRecord()->getModuleName())) { $updates[$key]['mode'] = 'relation'; $updates[$key]['forTranslation'] = decode_html(vtranslate('LBL_FOR')); $updates[$key]['module'] = $recentActivity->getParent()->getModule()->getName(); $updates[$key]['record'] = decode_html($relation->getParent()->getParent()->getName()); $updates[$key]['relatedRecord'] = decode_html($relation->getLinkedRecord()->getName()); $updates[$key]['time'] = decode_html(Vtiger_Util_Helper::formatDateDiffInStrings($relation->get('changedon'))); $updates[$key]['user'] = decode_html($recentActivity->getModifiedBy()->getName()); if ($recentActivity->isRelationLink()) { $updates[$key]['translation'] = decode_html(ucfirst(vtranslate('LBL_LINKED'))); } else { $updates[$key]['translation'] = decode_html(ucfirst(vtranslate('LBL_UNLINKED'))); } } } elseif ($recentActivity->isRestore()) { $updates[$key]['mode'] = 'restore'; $updates[$key]['module'] = $recentActivity->getParent()->getModule()->getName(); $updates[$key]['record'] = decode_html($recentActivity->getParent()->getName()); $updates[$key]['time'] = decode_html(Vtiger_Util_Helper::formatDateDiffInStrings($recentActivity->getActivityTime())); $updates[$key]['translation'] = decode_html(ucfirst(vtranslate('LBL_RESTORED'))); $updates[$key]['user'] = decode_html($recentActivity->getModifiedBy()->getName()); } elseif ($recentActivity->isDelete()) { $updates[$key]['mode'] = 'delete'; $updates[$key]['module'] = $recentActivity->getParent()->getModule()->getName(); $updates[$key]['record'] = decode_html($recentActivity->getParent()->getName()); $updates[$key]['time'] = decode_html(Vtiger_Util_Helper::formatDateDiffInStrings($recentActivity->getActivityTime())); $updates[$key]['translation'] = decode_html(ucfirst(vtranslate('LBL_DELETED'))); $updates[$key]['user'] = decode_html($recentActivity->getModifiedBy()->getName()); } } elseif ('ModComments_Record_Model' === $modelName) { $updates[$key]['mode'] = 'comment'; $updates[$key]['comment'] = nl2br($recentActivity->get('commentcontent')); $updates[$key]['onTranslation'] = decode_html(ucfirst(vtranslate('LBL_ON'))); $updates[$key]['record'] = decode_html($recentActivity->getParentRecordModel()->getName()); $updates[$key]['time'] = decode_html(Vtiger_Util_Helper::formatDateDiffInStrings($recentActivity->getCommentedTime())); $updates[$key]['translation'] = decode_html(ucfirst(vtranslate('LBL_COMMENTED'))); $updates[$key]['user'] = decode_html($recentActivity->getCommentedByName()); } } $this->setHistory($updates); } public function loadKeyMetrics() { global $current_user, $adb; require_once 'modules/CustomView/ListViewTop.php'; $metricLists = getMetricList(); foreach ($metricLists as $key => $metricList) { $queryGenerator = new EnhancedQueryGenerator($metricList['module'], $current_user); $queryGenerator->initForCustomViewById($metricList['id']); if ('Calendar' === $metricList['module']) { $queryGenerator->addCondition('activitytype', "Emails", 'n', QueryGenerator::$AND); } $metricSQL = $queryGenerator->getQuery(); $result = $adb->query(Vtiger_Functions::mkCountQuery($metricSQL)); if ($result) { $rowcount = $adb->fetch_array($result); $metricLists[$key]['count'] = $rowcount['count']; } } $this->setKeyMetrics($metricLists); } public function loadLeadsByIndustry() { $moduleName = 'Leads'; $moduleModel = Vtiger_Module_Model::getInstance($moduleName); $leads = $moduleModel->getLeadsByIndustry($this->userId, null); $this->setLeads($leads); } public function loadLeadsBySource() { $moduleName = 'Leads'; $moduleModel = Vtiger_Module_Model::getInstance($moduleName); $leads = $moduleModel->getLeadsBySource($this->userId, null); $this->setLeads($leads); } public function loadLeadsByStatus() { $moduleName = 'Leads'; $moduleModel = Vtiger_Module_Model::getInstance($moduleName); $leads = $moduleModel->getLeadsByStatus($this->userId, null); $this->setLeads($leads); } public function loadModules() { $modules = []; $quickCreateModules = []; foreach (Vtiger_Module_Model::getEntityModules() as $module) { $moduleId = $module->getId(); $moduleName = $module->getName(); $modules[$moduleId]['name'] = $moduleName; $modules[$moduleId]['label'] = vtranslate($module->get('label'), $moduleName); } foreach (Vtiger_Module_Model::getAll(array(0, 2)) as $module) { if ($module->isQuickCreateSupported()) { $quickCreateModules[] = $module->getName(); } } $this->setModules($modules); $this->setQuickCreateModules($quickCreateModules); } public function loadOpenTickets() { $moduleName = 'HelpDesk'; $moduleModel = Vtiger_Module_Model::getInstance($moduleName); $openTickets = $moduleModel->getOpenTickets(); $this->setOpenTickets($openTickets); } public function loadOverdueActivities() { $moduleName = 'Calendar'; $listViewModel = Vtiger_ListView_Model::getInstanceForPopup($moduleName); $pagingModel = new Vtiger_Paging_Model(); $pagingModel->set('page', 1); $queryGenerator = $listViewModel->get('query_generator'); $queryGenerator->addCondition('due_date', date('Y-m-d'), 'm'); $queryGenerator->addConditionGlue(QueryGenerator::$AND); $queryGenerator->addCondition('taskstatus', 'Completed', 'n'); $queryGenerator->addConditionGlue(QueryGenerator::$AND); $queryGenerator->addCondition('eventstatus', 'Held', 'n'); $headers = $listViewModel->getListViewHeaders(); $overdueActivities = []; $moduleModel = Vtiger_Module_Model::getInstance($moduleName); $fieldModels = $moduleModel->getFields(); $entries = $listViewModel->getListViewEntries($pagingModel); foreach ($entries as $entry) { if (date('Y-m-d') === date('Y-m-d', strtotime($entry->get('due_date'))) && date('H:i:s') < $entry->get('time_end')) { continue; } $recordId = $entry->getId(); $line = array(); $info = array(); foreach ($headers as $header) { $fieldDataType = $header->getFieldDataType(); $fieldName = $header->get('name'); $value = $entry->get($fieldName); if (in_array($fieldDataType, ['email', 'url', 'reference'])) { $value = trim(strip_tags($value)); } if ('datetime' === $fieldDataType) { $value = date('Y-m-d', strtotime($value)); } $fieldLine = array( 'fieldName' => $fieldName, 'label' => vtranslate($header->get('label'), $moduleName), 'dataType' => $fieldDataType, 'value' => html_entity_decode($value), 'fieldValue' => $entry->get($fieldName), ); if ($header->isNameField()) { $line[] = $fieldLine; } else { $info[] = $fieldLine; } } $headerFields = []; foreach ($fieldModels as $fieldModel) { if ($fieldModel->get('headerfield')) { $value = $entry->get($fieldModel->get('name')); if (in_array($fieldModel->get('uitype'), [10, 13, 17])) { $value = trim(strip_tags(html_entity_decode($fieldModel->getDisplayValue($value)))); } $headerFields[] = [ 'value' => strip_tags($value), 'name' => $fieldModel->get('name'), 'label' => vtranslate($fieldModel->get('label'), $moduleName) ]; } } $isPermitted = false; $recordModel = Vtiger_Record_Model::getInstanceById($recordId); $recordData = $recordModel->getData(); if (!$this->userId || $recordData['assigned_user_id'] == $this->userId) { $isPermitted = true; } if ($isPermitted) { $overdueActivities[] = [ 'id' => $recordId, 'fields' => $line, 'info' => $info, 'headerFields' => $headerFields, ]; } } $this->setOverdueActivities($overdueActivities); } public function loadRevenuePerSalesPerson() { $moduleName = 'Potentials'; $moduleModel = Vtiger_Module_Model::getInstance($moduleName); $data = $moduleModel->getTotalRevenuePerSalesPerson(null); $this->setRevenuePerSalesPerson($data); } public function loadTicketsByStatus() { $moduleName = 'HelpDesk'; $moduleModel = Vtiger_Module_Model::getInstance($moduleName); $tickets = $moduleModel->getTicketsByStatus($this->userId, null); $this->setTicketsByStatus($tickets); } public function loadTopOpportunities() { $moduleName = 'Potentials'; $currentUser = Users_Record_Model::getInstanceById($this->userId, 'Users'); $pagingModel = new Vtiger_Paging_Model(); $pagingModel->set('page', 1); $userCurrencyInfo = getCurrencySymbolandCRate($currentUser->get('currency_id')); $moduleModel = Vtiger_Module_Model::getInstance($moduleName); $models = $moduleModel->getTopPotentials($pagingModel); $opportunities = []; foreach ($models as $key => $model) { $opportunities[$key]['name'] = decode_html($model->getName()); $opportunities[$key]['amount'] = decode_html(CurrencyField::appendCurrencySymbol($model->getDisplayValue('amount'), $userCurrencyInfo['symbol'])); $opportunities[$key]['relatedTo'] = $model->get('related_to') ? decode_html(Vtiger_Util_Helper::getRecordName($model->get('related_to'))) : ''; } $this->setTopOpportunities($opportunities); } public function loadTotalAmountBySalesStage() { $moduleName = 'Potentials'; $moduleModel = Vtiger_Module_Model::getInstance($moduleName); $data = $moduleModel->getPotentialTotalAmountBySalesStage(); $this->setTotalAmountBySalesStage($data); } public function loadUpcomingActivities() { $moduleName = 'Calendar'; $listViewModel = Vtiger_ListView_Model::getInstanceForPopup($moduleName); $pagingModel = new Vtiger_Paging_Model(); $pagingModel->set('page', 1); $queryGenerator = $listViewModel->get('query_generator'); $queryGenerator->addCondition('date_start', date('Y-m-d'), 'h'); $queryGenerator->addConditionGlue(QueryGenerator::$AND); $queryGenerator->addCondition('date_start', date('Y-m-d', strtotime('+1 Month')), 'm'); $queryGenerator->addConditionGlue(QueryGenerator::$AND); $queryGenerator->addCondition('taskstatus', 'Completed', 'n'); $queryGenerator->addConditionGlue(QueryGenerator::$AND); $queryGenerator->addCondition('eventstatus', 'Held', 'n'); $listViewModel->set('orderby', 'date_start'); $listViewModel->set('sortorder', 'ASC'); $headers = $listViewModel->getListViewHeaders(); $upcomingActivities = []; $moduleModel = Vtiger_Module_Model::getInstance($moduleName); $fieldModels = $moduleModel->getFields(); $entries = $listViewModel->getListViewEntries($pagingModel); foreach ($entries as $entry) { if (date('Y-m-d') === date('Y-m-d', strtotime($entry->get('date_start'))) && date('H:i:s') > $entry->get('time_end')) { continue; } $recordId = $entry->getId(); $line = array(); $info = array(); foreach ($headers as $header) { $fieldDataType = $header->getFieldDataType(); $fieldName = $header->get('name'); $value = $entry->get($fieldName); if (in_array($fieldDataType, ['email', 'url', 'reference'])) { $value = trim(strip_tags($value)); } if ('datetime' === $fieldDataType) { $value = date('Y-m-d', strtotime($value)); } $fieldLine = array( 'fieldName' => $fieldName, 'label' => vtranslate($header->get('label'), $moduleName), 'dataType' => $fieldDataType, 'value' => html_entity_decode($value), 'fieldValue' => $entry->get($fieldName), ); if ($header->isNameField()) { $line[] = $fieldLine; } else { $info[] = $fieldLine; } } $headerFields = []; foreach ($fieldModels as $fieldModel) { if ($fieldModel->get('headerfield')) { $value = $entry->get($fieldModel->get('name')); if (in_array($fieldModel->get('uitype'), [10, 13, 17])) { $value = trim(strip_tags(html_entity_decode($fieldModel->getDisplayValue($value)))); } $headerFields[] = [ 'value' => strip_tags($value), 'name' => $fieldModel->get('name'), 'label' => vtranslate($fieldModel->get('label'), $moduleName) ]; } } $isPermitted = false; $recordModel = Vtiger_Record_Model::getInstanceById($recordId); $recordData = $recordModel->getData(); if (!$this->userId || $recordData['assigned_user_id'] == $this->userId) { $isPermitted = true; } if ($isPermitted) { $upcomingActivities[] = [ 'id' => $recordId, 'fields' => $line, 'info' => $info, 'headerFields' => $headerFields, ]; } } $this->setUpcomingActivities($upcomingActivities); } public function loadUsers() { $moduleName = 'Calendar'; $users = []; $currentUser = Users_Record_Model::getCurrentUserModel(); if ($currentUser) { $accessibleUsers = array_keys($currentUser->getAccessibleUsersForModule($moduleName)); $users[] = ['label' => vtranslate('LBL_ALL_USERS', $moduleName), 'value' => 'LBL_SELECT_OPTION']; foreach (getAllUserName() as $id => $userName) { if (in_array($id, $accessibleUsers)) { $users[] = ['label' => vtranslate($userName, $moduleName), 'value' => "$id"]; } } } $this->setUsers($users); } public function loadWidgets() { $dashBoardModel = Vtiger_DashBoard_Model::getInstance($this->moduleName); $dashboardTabs = $dashBoardModel->getActiveTabs(); $dashBoardModel->set('tabid', $dashboardTabs[0]['id']); $activeWidgets = []; $widgets = []; foreach ($dashBoardModel->getSelectableDashboard() as $widget) { if (!in_array($widget->getName(), ['MiniList', 'Notebook'])) { $widgets[] = [ 'name' => $widget->getName(), 'label' => $widget->get('linklabel'), 'linkId' => $widget->get('linkid'), ]; } } foreach ($dashBoardModel->getDashboards($this->moduleName) as $widget) { $activeWidgets[] = [ 'label' => $widget->get('linklabel'), 'linkId' => $widget->get('linkid'), ]; } $this->setWidgets($widgets); $this->setActiveWidgets($activeWidgets); } public function removeWidget() { global $current_user; $widget = Vtiger_Widget_Model::getInstance($this->linkId, $current_user->id); $widget->remove(); } }