first commit

This commit is contained in:
BACHIR SOULDI
2025-09-28 08:49:37 +01:00
commit 2794e62571
16819 changed files with 2664196 additions and 0 deletions

View File

@@ -0,0 +1,89 @@
<?php
/*+***********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*************************************************************************************/
class Reports_ChartActions_Action extends Vtiger_Action_Controller {
function __construct() {
parent::__construct();
$this->exposeMethod('pinChartToDashboard');
$this->exposeMethod('unpinChartFromDashboard');
}
public function checkPermission(Vtiger_Request $request) {
$moduleName = $request->getModule();
$moduleModel = Reports_Module_Model::getInstance($moduleName);
$currentUserPriviligesModel = Users_Privileges_Model::getCurrentUserPrivilegesModel();
if(!$currentUserPriviligesModel->hasModulePermission($moduleModel->getId())) {
throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
}
}
public function process(Vtiger_Request $request) {
$mode = $request->get('mode');
if(!empty($mode)) {
$this->invokeExposedMethod($mode, $request);
return;
}
}
/**
* Function to add the report chart to dashboard
* @param Vtiger_Request $request
*/
public function pinChartToDashboard(Vtiger_Request $request){
$db = PearDatabase::getInstance();
$reportid = $request->get('reportid');
$currentUser = Users_Record_Model::getCurrentUserModel();
$currentuserid = $currentUser->getId();
$widgetTitle = $request->get('title');
$response = new Vtiger_Response();
$query = "SELECT 1 FROM vtiger_module_dashboard_widgets WHERE reportid = ? AND userid = ?";
$param = array($reportid,$currentuserid);
$result = $db->pquery($query, $param);
$numOfRows = $db->num_rows($result);
if($numOfRows >= 1){
$result = array('pinned'=>false,'duplicate'=>true);
$response->setResult($result);
$response->emit();
return;
}
$dashBoardTabId = $request->get('dashBoardTabId');
if(empty($dashBoardTabId)) {
// In Vtiger7, we need to pin this report widget to first tab of that user
$dasbBoardModel = Vtiger_DashBoard_Model::getInstance("Reports");
$defaultTab = $dasbBoardModel->getUserDefaultTab($currentUser->getId());
$dashBoardTabId = $defaultTab['id'];
}
$query = "INSERT INTO vtiger_module_dashboard_widgets (userid,reportid,linkid,title,dashboardtabid) VALUES (?,?,?,?,?)";
$param = array($currentuserid,$reportid,0,$widgetTitle,$dashBoardTabId);
$result = $db->pquery($query, $param);
$result = array('pinned'=>true,'duplicate'=>false);
$response->setResult($result);
$response->emit();
}
function unpinChartFromDashboard($request) {
$db = PearDatabase::getInstance();
$reportid = $request->get('reportid');
$currentUser = Users_Record_Model::getCurrentUserModel();
$widgetInstance = Vtiger_Widget_Model::getInstanceWithReportId($reportid, $currentUser->getId());
$widgetInstance->remove();
$response = new Vtiger_Response();
$response->setResult(array('unpinned' => true));
$response->emit();
}
}

View File

@@ -0,0 +1,63 @@
<?php
/*+***********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*************************************************************************************/
class Reports_ChartSave_Action extends Reports_Save_Action {
public function process(Vtiger_Request $request) {
$moduleName = $request->getModule();
$record = $request->get('record');
$reportModel = new Reports_Record_Model();
$reportModel->setModule('Reports');
if(!empty($record) && !$request->get('isDuplicate')) {
$reportModel->setId($record);
}
$reportModel->set('reportname', $request->get('reportname'));
$reportModel->set('folderid', $request->get('folderid'));
$reportModel->set('description', $request->get('reports_description'));
$reportModel->set('members', $request->get('members'));
$reportModel->setPrimaryModule($request->get('primary_module'));
$secondaryModules = $request->get('secondary_modules');
$secondaryModules = implode(':', $secondaryModules);
$reportModel->setSecondaryModule($secondaryModules);
$reportModel->set('advancedFilter', $request->get('advanced_filter'));
$reportModel->set('reporttype', 'chart');
$dataFields = $request->get('datafields', 'count(*)');
if(is_string($dataFields)) $dataFields = array($dataFields);
$reportModel->set('reporttypedata', Zend_Json::encode(array(
'type'=>$request->get('charttype', 'pieChart'),
'groupbyfield'=>$request->get('groupbyfield'),
'datafields'=>$dataFields)
));
$reportModel->save();
$scheduleReportModel = new Reports_ScheduleReports_Model();
$scheduleReportModel->set('scheduleid', $request->get('schtypeid'));
$scheduleReportModel->set('schtime', date('H:i', strtotime($request->get('schtime'))));
$scheduleReportModel->set('schdate', $request->get('schdate'));
$scheduleReportModel->set('schdayoftheweek', $request->get('schdayoftheweek'));
$scheduleReportModel->set('schdayofthemonth', $request->get('schdayofthemonth'));
$scheduleReportModel->set('schannualdates', $request->get('schannualdates'));
$scheduleReportModel->set('reportid', $reportModel->getId());
$scheduleReportModel->set('recipients', $request->get('recipients'));
$scheduleReportModel->set('isReportScheduled', $request->get('enable_schedule'));
$scheduleReportModel->set('specificemails', $request->get('specificemails'));
$scheduleReportModel->saveScheduleReport();
$loadUrl = $reportModel->getDetailViewUrl();
header("Location: $loadUrl");
}
}

View File

@@ -0,0 +1,41 @@
<?php
/*+***********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*************************************************************************************/
class Reports_CheckDuplicate_Action extends Vtiger_Action_Controller {
function checkPermission(Vtiger_Request $request) {
return;
}
public function process(Vtiger_Request $request) {
$moduleName = $request->getModule();
$reportName = $request->get('reportname');
$record = $request->get('record');
if ($record) {
$recordModel = Vtiger_Record_Model::getInstanceById($record, $moduleName);
} else {
$recordModel = Vtiger_Record_Model::getCleanInstance($moduleName);
}
$recordModel->set('reportname', $reportName);
$recordModel->set('reportid', $record);
$recordModel->set('isDuplicate', $request->get('isDuplicate'));
if (!$recordModel->checkDuplicate()) {
$result = array('success'=>false);
} else {
$result = array('success'=>true, 'message'=>vtranslate('LBL_DUPLICATES_EXIST', $moduleName));
}
$response = new Vtiger_Response();
$response->setResult($result);
$response->emit();
}
}

View File

@@ -0,0 +1,38 @@
<?php
/*+***********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*************************************************************************************/
class Reports_DeleteAjax_Action extends Vtiger_DeleteAjax_Action {
public function checkPermission(Vtiger_Request $request) {
$moduleName = $request->getModule();
$record = $request->get('record');
$currentUserPrivilegesModel = Users_Privileges_Model::getCurrentUserPrivilegesModel();
if(!$currentUserPrivilegesModel->isPermitted($moduleName, 'Delete', $record)) {
throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
}
}
public function process(Vtiger_Request $request) {
$moduleName = $request->getModule();
$recordId = $request->get('record');
$response = new Vtiger_Response();
$recordModel = Reports_Record_Model::getInstanceById($recordId, $moduleName);
if (!$recordModel->isDefault() && $recordModel->isEditable() && $recordModel->isEditableBySharing()) {
$recordModel->delete();
$response->setResult(array(vtranslate('LBL_REPORTS_DELETED_SUCCESSFULLY', $parentModule)));
} else {
$response->setError(vtranslate('LBL_REPORT_DELETE_DENIED', $moduleName));
}
$response->emit();
}
}

View File

@@ -0,0 +1,47 @@
<?php
/*+***********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*************************************************************************************/
class Reports_DetailAjax_Action extends Vtiger_BasicAjax_Action{
public function __construct() {
parent::__construct();
$this->exposeMethod('getRecordsCount');
}
public function process(Vtiger_Request $request) {
$mode = $request->get('mode');
if(!empty($mode)) {
$this->invokeExposedMethod($mode, $request);
return;
}
}
/**
* Function to get related Records count from this relation
* @param <Vtiger_Request> $request
* @return <Number> Number of record from this relation
*/
public function getRecordsCount(Vtiger_Request $request) {
$record = $request->get('record');
$reportModel = Reports_Record_Model::getInstanceById($record);
$reportModel->setModule('Reports');
$reportModel->set('advancedFilter', $request->get('advanced_filter'));
$advFilterSql = $reportModel->getAdvancedFilterSQL();
$query = $reportModel->getReportSQL($advFilterSql, 'PDF');
$countQuery = $reportModel->generateCountQuery($query);
$count = $reportModel->getReportsCount($countQuery);
$response = new Vtiger_Response();
$response->setResult($count);
$response->emit();
}
}

View File

@@ -0,0 +1,98 @@
<?php
/*+***********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*************************************************************************************/
class Reports_Folder_Action extends Vtiger_Action_Controller {
function __construct() {
parent::__construct();
$this->exposeMethod('save');
$this->exposeMethod('delete');
}
public function checkPermission(Vtiger_Request $request) {
$moduleName = $request->getModule();
$moduleModel = Reports_Module_Model::getInstance($moduleName);
$currentUserPriviligesModel = Users_Privileges_Model::getCurrentUserPrivilegesModel();
if(!$currentUserPriviligesModel->hasModulePermission($moduleModel->getId())) {
throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
}
}
public function process(Vtiger_Request $request) {
$mode = $request->get('mode');
if(!empty($mode)) {
$this->invokeExposedMethod($mode, $request);
return;
}
}
/**
* Function that saves/updates the Folder
* @param Vtiger_Request $request
*/
function save(Vtiger_Request $request) {
$moduleName = $request->getModule();
$folderModel = Reports_Folder_Model::getInstance();
$folderId = $request->get('folderid');
if(!empty($folderId)) {
$folderModel->set('folderid', $folderId);
}
// we need to decode if encoded values are given(for XSS vulnerability)
$folderModel->set('foldername', decode_html($request->get('foldername')));
$folderModel->set('description', decode_html($request->get('description')));
if ($folderModel->checkDuplicate()) {
throw new AppException(vtranslate('LBL_FOLDER_EXISTS', $moduleName));
}
$folderModel->save();
$result = array('success' => true, 'message' => vtranslate('LBL_FOLDER_SAVED', $moduleName), 'info' => $folderModel->getInfoArray());
$response = new Vtiger_Response();
$response->setResult($result);
$response->emit();
}
/**
* Function that deletes the Folder
* @param Vtiger_Request $request
*/
function delete(Vtiger_Request $request) {
$folderId = $request->get('folderid');
$moduleName = $request->getModule();
if ($folderId) {
$folderModel = Reports_Folder_Model::getInstanceById($folderId);
$success = false;
if ($folderModel->isDefault()) {
$message = vtranslate('LBL_FOLDER_CAN_NOT_BE_DELETED', $moduleName);
} else {
if ($folderModel->hasReports()) {
$message = vtranslate('LBL_FOLDER_NOT_EMPTY', $moduleName);
} else {
$folderModel->delete();
$message = vtranslate('LBL_FOLDER_DELETED', $moduleName);
$success = true;
}
}
$result = array('success' => $success, 'message' => $message);
$response = new Vtiger_Response();
$response->setResult($result);
$response->emit();
}
}
public function validateRequest(Vtiger_Request $request) {
return true;
}
}

View File

@@ -0,0 +1,57 @@
<?php
/*+***********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*************************************************************************************/
class Reports_MassDelete_Action extends Vtiger_Mass_Action {
public function checkPermission(Vtiger_Request $request) {
$moduleName = $request->getModule();
$moduleModel = Reports_Module_Model::getInstance($moduleName);
$currentUserPriviligesModel = Users_Privileges_Model::getCurrentUserPrivilegesModel();
if(!$currentUserPriviligesModel->hasModulePermission($moduleModel->getId())) {
throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
}
}
function preProcess(Vtiger_Request $request) {
return true;
}
function postProcess(Vtiger_Request $request) {
return true;
}
public function process(Vtiger_Request $request) {
$parentModule = 'Reports';
$recordIds = Reports_Record_Model::getRecordsListFromRequest($request);
$reportsDeleteDenied = array();
foreach($recordIds as $recordId) {
$recordModel = Reports_Record_Model::getInstanceById($recordId);
if (!$recordModel->isDefault() && $recordModel->isEditable() && $recordModel->isEditableBySharing()) {
$success = $recordModel->delete();
if(!$success) {
$reportsDeleteDenied[] = vtranslate($recordModel->getName(), $parentModule);
}
} else {
$reportsDeleteDenied[] = vtranslate($recordModel->getName(), $parentModule);
}
}
$response = new Vtiger_Response();
if (empty ($reportsDeleteDenied)) {
$response->setResult(array(vtranslate('LBL_REPORTS_DELETED_SUCCESSFULLY', $parentModule)));
} else {
$response->setError($reportsDeleteDenied, vtranslate('LBL_DENIED_REPORTS', $parentModule));
}
$response->emit();
}
}

View File

@@ -0,0 +1,53 @@
<?php
/*+***********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*************************************************************************************/
class Reports_MoveReports_Action extends Vtiger_Mass_Action {
public function checkPermission(Vtiger_Request $request) {
$moduleName = $request->getModule();
$moduleModel = Reports_Module_Model::getInstance($moduleName);
$currentUserPriviligesModel = Users_Privileges_Model::getCurrentUserPrivilegesModel();
if(!$currentUserPriviligesModel->hasModulePermission($moduleModel->getId())) {
throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
}
}
public function process(Vtiger_Request $request) {
$parentModule = 'Reports';
$reportIdsList = Reports_Record_Model::getRecordsListFromRequest($request);
$folderId = $request->get('folderid');
$viewname=$request->get('viewname');
if($folderId==$viewname){
$sameTargetFolder=1;
}
if (!empty ($reportIdsList)) {
foreach ($reportIdsList as $reportId) {
$reportModel = Reports_Record_Model::getInstanceById($reportId);
if (!$reportModel->isDefault() && $reportModel->isEditable() && $reportModel->isEditableBySharing()) {
$reportModel->move($folderId);
} else {
$reportsMoveDenied[] = vtranslate($reportModel->getName(), $parentModule);
}
}
}
$response = new Vtiger_Response();
if($sameTargetFolder){
$result=array('success'=>false, 'message'=>vtranslate('LBL_SAME_SOURCE_AND_TARGET_FOLDER', $parentModule));
}
else if(empty ($reportsMoveDenied)) {
$result=array('success'=>true, 'message'=>vtranslate('LBL_REPORTS_MOVED_SUCCESSFULLY', $parentModule));
}else {
$result = array('success'=>false, 'message'=>vtranslate('LBL_DENIED_REPORTS', $parentModule),'denied'=>$reportsMoveDenied);
}
$response->setResult($result);
$response->emit();
}
}

View File

@@ -0,0 +1,84 @@
<?php
/*+***********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*************************************************************************************/
class Reports_Save_Action extends Vtiger_Save_Action {
public function checkPermission(Vtiger_Request $request) {
$moduleName = $request->getModule();
$moduleModel = Reports_Module_Model::getInstance($moduleName);
$currentUserPriviligesModel = Users_Privileges_Model::getCurrentUserPrivilegesModel();
if (!$currentUserPriviligesModel->hasModulePermission($moduleModel->getId())) {
throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
}
$record = $request->get('record');
if ($record) {
$reportModel = Reports_Record_Model::getCleanInstance($record);
if (!$reportModel->isEditable()) {
throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
}
}
}
public function process(Vtiger_Request $request) {
$moduleName = $request->getModule();
$record = $request->get('record');
$reportModel = new Reports_Record_Model();
$reportModel->setModule('Reports');
if(!empty($record) && !$request->get('isDuplicate')) {
$reportModel->setId($record);
}
$reporttype = $request->get('reporttype');
if(empty($reporttype)) $reporttype='tabular';
$reportModel->set('reportname', $request->get('reportname'));
$reportModel->set('folderid', $request->get('folderid'));
$reportModel->set('description', $request->get('reports_description'));
$reportModel->set('reporttype', $reporttype);
$reportModel->setPrimaryModule($request->get('primary_module'));
$secondaryModules = $request->get('secondary_modules');
$secondaryModules = implode(':', $secondaryModules);
$reportModel->setSecondaryModule($secondaryModules);
$reportModel->set('selectedFields', $request->get('selected_fields'));
$reportModel->set('sortFields', $request->get('selected_sort_fields'));
$reportModel->set('calculationFields', $request->get('selected_calculation_fields'));
$reportModel->set('standardFilter', $request->get('standard_fiter'));
$reportModel->set('advancedFilter', $request->get('advanced_filter'));
$reportModel->set('advancedGroupFilterConditions', $request->get('advanced_group_condition'));
$reportModel->set('members', $request->get('members'));
$reportModel->save();
//Scheduled Reports
$scheduleReportModel = new Reports_ScheduleReports_Model();
$scheduleReportModel->set('scheduleid', $request->get('schtypeid'));
$scheduleReportModel->set('schtime', date('H:i', strtotime($request->get('schtime'))));
$scheduleReportModel->set('schdate', $request->get('schdate'));
$scheduleReportModel->set('schdayoftheweek', $request->get('schdayoftheweek'));
$scheduleReportModel->set('schdayofthemonth', $request->get('schdayofthemonth'));
$scheduleReportModel->set('schannualdates', $request->get('schannualdates'));
$scheduleReportModel->set('reportid', $reportModel->getId());
$scheduleReportModel->set('recipients', $request->get('recipients'));
$scheduleReportModel->set('isReportScheduled', $request->get('enable_schedule'));
$scheduleReportModel->set('specificemails', $request->get('specificemails'));
$scheduleReportModel->set('fileformat', $request->get('fileformat'));
$scheduleReportModel->saveScheduleReport();
//END
$loadUrl = $reportModel->getDetailViewUrl();
header("Location: $loadUrl");
}
}