晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/akaindir/public_html/crm/modules/Mobile/api/ws/ |
Upload File : |
<?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.
************************************************************************************/
include_once dirname(__FILE__) . '/models/Alert.php';
include_once dirname(__FILE__) . '/models/SearchFilter.php';
include_once dirname(__FILE__) . '/models/Paging.php';
class Mobile_WS_ListModuleRecords extends Mobile_WS_Controller {
function isCalendarModule($module) {
return ($module == 'Events' || $module == 'Calendar');
}
function getSearchFilterModel($module, $search) {
return Mobile_WS_SearchFilterModel::modelWithCriterias($module, Zend_JSON::decode($search));
}
function getPagingModel(Mobile_API_Request $request) {
$page = $request->get('page', 0);
return Mobile_WS_PagingModel::modelWithPageStart($page);
}
function process(Mobile_API_Request $request) {
$current_user = $this->getActiveUser();
$module = $request->get('module');
$filterId = $request->get('filterid');
$page = $request->get('page','1');
$orderBy = $request->getForSql('orderBy');
$sortOrder = $request->getForSql('sortOrder');
$moduleModel = Vtiger_Module_Model::getInstance($module);
$headerFieldModels = $moduleModel->getHeaderViewFieldsList();
$headerFields = array();
$fields = array();
$headerFieldColsMap = array();
$nameFields = $moduleModel->getNameFields();
if(is_string($nameFields)) {
$nameFieldModel = $moduleModel->getField($nameFields);
$headerFields[] = $nameFields;
$fields = array('name'=>$nameFieldModel->get('name'), 'label'=>$nameFieldModel->get('label'), 'fieldType'=>$nameFieldModel->getFieldDataType());
} else if(is_array($nameFields)) {
foreach($nameFields as $nameField) {
$nameFieldModel = $moduleModel->getField($nameField);
$headerFields[] = $nameField;
$fields[] = array('name'=>$nameFieldModel->get('name'), 'label'=>$nameFieldModel->get('label'), 'fieldType'=>$nameFieldModel->getFieldDataType());
}
}
foreach($headerFieldModels as $fieldName => $fieldModel) {
$headerFields[] = $fieldName;
$fields[] = array('name'=>$fieldName, 'label'=>$fieldModel->get('label'), 'fieldType'=>$fieldModel->getFieldDataType());
$headerFieldColsMap[$fieldModel->get('column')] = $fieldName;
}
if ($module == 'HelpDesk') $headerFieldColsMap['title'] = 'ticket_title';
if ($module == 'Documents') $headerFieldColsMap['title'] = 'notes_title';
$listViewModel = Vtiger_ListView_Model::getInstance($module, $filterId, $headerFields);
if(!empty($sortOrder)) {
$listViewModel->set('orderby', $orderBy);
$listViewModel->set('sortorder',$sortOrder);
}
$pagingModel = new Vtiger_Paging_Model();
$pageLimit = $pagingModel->getPageLimit();
$pagingModel->set('page', $page);
$pagingModel->set('limit', $pageLimit+1);
$listViewEntries = $listViewModel->getListViewEntries($pagingModel);
if(empty($filterId)) {
$customView = new CustomView($module);
$filterId = $customView->getViewId($module);
}
if($listViewEntries) {
foreach($listViewEntries as $index => $listViewEntryModel) {
$data = $listViewEntryModel->getRawData();
$record = array('id'=>$listViewEntryModel->getId());
foreach($data as $i => $value) {
if(is_string($i)) {
// Transform header-field (column to fieldname) in response.
if (isset($headerFieldColsMap[$i])) {
$i = $headerFieldColsMap[$i];
}
$record[$i]= decode_html($value);
}
}
$records[] = $record;
}
}
$moreRecords = false;
if(count($listViewEntries) > $pageLimit) {
$moreRecords = true;
array_pop($records);
}
$response = new Mobile_API_Response();
$response->setResult(array( 'records'=>$records,
'headers'=>$fields,
'selectedFilter'=>$filterId,
'nameFields'=>$nameFields,
'moreRecords'=>$moreRecords,
'orderBy'=>$orderBy,
'sortOrder'=>$sortOrder,
'page'=>$page));
return $response;
}
function processSearchRecordLabelForCalendar(Mobile_API_Request $request, $pagingModel = false) {
$current_user = $this->getActiveUser();
// Fetch both Calendar (Todo) and Event information
$moreMetaFields = array('date_start', 'time_start', 'activitytype', 'location');
$eventsRecords = $this->fetchRecordLabelsForModule('Events', $current_user, $moreMetaFields, false, $pagingModel);
$calendarRecords=$this->fetchRecordLabelsForModule('Calendar', $current_user, $moreMetaFields, false, $pagingModel);
// Merge the Calendar & Events information
$records = array_merge($eventsRecords, $calendarRecords);
$modifiedRecords = array();
foreach($records as $record) {
$modifiedRecord = array();
$modifiedRecord['id'] = $record['id']; unset($record['id']);
$modifiedRecord['eventstartdate'] = $record['date_start']; unset($record['date_start']);
$modifiedRecord['eventstarttime'] = $record['time_start']; unset($record['time_start']);
$modifiedRecord['eventtype'] = $record['activitytype']; unset($record['activitytype']);
$modifiedRecord['eventlocation'] = $record['location']; unset($record['location']);
$modifiedRecord['label'] = implode(' ',array_values($record));
$modifiedRecords[] = $modifiedRecord;
}
$response = new Mobile_API_Response();
$response->setResult(array('records' =>$modifiedRecords, 'module'=>'Calendar'));
return $response;
}
function fetchRecordLabelsForModule($module, $user, $morefields=array(), $filterOrAlertInstance=false, $pagingModel = false) {
if($this->isCalendarModule($module)) {
$fieldnames = Mobile_WS_Utils::getEntityFieldnames('Calendar');
} else {
$fieldnames = Mobile_WS_Utils::getEntityFieldnames($module);
}
if(!empty($morefields)) {
foreach($morefields as $fieldname) $fieldnames[] = $fieldname;
}
if($filterOrAlertInstance === false) {
$filterOrAlertInstance = Mobile_WS_SearchFilterModel::modelWithCriterias($module);
$filterOrAlertInstance->setUser($user);
}
return $this->queryToSelectFilteredRecords($module, $fieldnames, $filterOrAlertInstance, $pagingModel);
}
function queryToSelectFilteredRecords($module, $fieldnames, $filterOrAlertInstance, $pagingModel) {
if ($filterOrAlertInstance instanceof Mobile_WS_SearchFilterModel) {
return $filterOrAlertInstance->execute($fieldnames, $pagingModel);
}
global $adb;
$moduleWSId = Mobile_WS_Utils::getEntityModuleWSId($module);
$columnByFieldNames = Mobile_WS_Utils::getModuleColumnTableByFieldNames($module, $fieldnames);
// Build select clause similar to Webservice query
$selectColumnClause = "CONCAT('{$moduleWSId}','x',vtiger_crmentity.crmid) as id,";
foreach($columnByFieldNames as $fieldname=>$fieldinfo) {
$selectColumnClause .= sprintf("%s.%s as %s,", $fieldinfo['table'],$fieldinfo['column'],$fieldname);
}
$selectColumnClause = rtrim($selectColumnClause, ',');
$query = $filterOrAlertInstance->query();
$query = preg_replace("/SELECT.*FROM(.*)/i", "SELECT $selectColumnClause FROM $1", $query);
if ($pagingModel !== false) {
$query .= sprintf(" LIMIT %s, %s", $pagingModel->currentCount(), $pagingModel->limit());
}
$prequeryResult = $adb->pquery($query, $filterOrAlertInstance->queryParameters());
return new SqlResultIterator($adb, $prequeryResult);
}
}