本文整理汇总了PHP中MetaModel类的典型用法代码示例。如果您正苦于以下问题:PHP MetaModel类的具体用法?PHP MetaModel怎么用?PHP MetaModel使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了MetaModel类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的PHP代码示例。
示例1: getExportDatasetName
public static function getExportDatasetName ( $datasetName, MetaModel $metamodel ) {
$logicalDatasetName = StarSchemaNamingConvention::findFactsOwner($datasetName);
if (isset($logicalDatasetName)) {
$dataset = $metamodel->getDataset($logicalDatasetName);
return isset($dataset->uuid) ? StarSchemaNamingConvention::getFactsRelatedName($dataset->uuid) : null;
} else {
$dataset = $metamodel->getDataset($datasetName);
return isset($dataset->uuid) ? $dataset->uuid : null;
}
}
开发者ID:reisystems-india,项目名称:GovDashboard-Community,代码行数:11,代码来源:DatasetExportHelper.php
示例2: prepareDimension
public function prepareDimension(MetaModel $metamodel, DatasetMetaData $dataset, $columnName, CubeMetaData $cube)
{
$column = $dataset->getColumn($columnName);
$sourceDatasetColumn = $cube->sourceDataset->getColumn($columnName);
$dimension = $cube->getDimension($columnName);
$this->prepareYearLevel($dimension, $column);
// cube source dataset column contains a reference to year identifier
$sourceDatasetColumn->initializeTypeFrom(Sequence::getSequenceColumnType());
// adding a reference to date dataset
$referenceName = DateDimensionDatasetNames::LEVEL_YEARS;
$metamodel->registerSimpleReferencePoint($referenceName, DateDimensionDatasetNames::LEVEL_YEARS, 'year_id');
$metamodel->registerSimpleReferencePoint($referenceName, $cube->sourceDatasetName, $columnName);
}
开发者ID:ecs-hk,项目名称:Checkbook,代码行数:13,代码来源:DateDimensionYearLookupHandler.php
示例3: Init
public static function Init()
{
$aParams = array("category" => "application", "key_type" => "autoincrement", "name_attcode" => "name", "state_attcode" => "", "reconc_keys" => array(), "db_table" => "priv_iotask", "db_key_field" => "id", "db_finalclass_field" => "", "display_template" => "");
MetaModel::Init_Params($aParams);
MetaModel::Init_AddAttribute(new AttributeString("name", array("allowed_values" => null, "sql" => "name", "default_value" => "", "is_null_allowed" => false, "depends_on" => array())));
MetaModel::Init_AddAttribute(new AttributeString("description", array("allowed_values" => null, "sql" => "description", "default_value" => "", "is_null_allowed" => true, "depends_on" => array())));
MetaModel::Init_AddAttribute(new AttributeEnum("category", array("allowed_values" => new ValueSetEnum('Input, Ouput'), "sql" => "category", "default_value" => "Input", "is_null_allowed" => false, "depends_on" => array())));
MetaModel::Init_AddAttribute(new AttributeEnum("source_type", array("allowed_values" => new ValueSetEnum('File, Database, Web Service'), "sql" => "source_type", "default_value" => "File", "is_null_allowed" => false, "depends_on" => array())));
MetaModel::Init_AddAttribute(new AttributeEnum("source_subtype", array("allowed_values" => new ValueSetEnum('Oracle, MySQL, Postgress, MSSQL, SOAP, HTTP-Get, HTTP-Post, XML/RPC, CSV, XML, Excel'), "sql" => "source_subtype", "default_value" => "CSV", "is_null_allowed" => false, "depends_on" => array())));
MetaModel::Init_AddAttribute(new AttributeString("source_path", array("allowed_values" => null, "sql" => "source_path", "default_value" => "", "is_null_allowed" => false, "depends_on" => array())));
MetaModel::Init_AddAttribute(new AttributeClass("objects_class", array("class_category" => "", "more_values" => "", "sql" => "objects_class", "default_value" => null, "is_null_allowed" => true, "depends_on" => array())));
MetaModel::Init_AddAttribute(new AttributeEnum("test_mode", array("allowed_values" => new ValueSetEnum('Yes,No'), "sql" => "test_mode", "default_value" => 'No', "is_null_allowed" => false, "depends_on" => array())));
MetaModel::Init_AddAttribute(new AttributeEnum("verbose_mode", array("allowed_values" => new ValueSetEnum('Yes,No'), "sql" => "verbose_mode", "default_value" => 'No', "is_null_allowed" => false, "depends_on" => array())));
MetaModel::Init_AddAttribute(new AttributeEnum("options", array("allowed_values" => new ValueSetEnum('Full, Update Only, Creation Only'), "sql" => "options", "default_value" => 'Full', "is_null_allowed" => true, "depends_on" => array())));
// Display lists
MetaModel::Init_SetZListItems('details', array('name', 'description', 'category', 'objects_class', 'source_type', 'source_subtype', 'source_path', 'options', 'test_mode', 'verbose_mode'));
// Attributes to be displayed for the complete details
MetaModel::Init_SetZListItems('list', array('description', 'category', 'objects_class', 'source_type', 'source_subtype', 'options'));
// Attributes to be displayed for a list
// Search criteria
MetaModel::Init_SetZListItems('standard_search', array('name', 'category', 'objects_class', 'source_type', 'source_subtype'));
// Criteria of the std search form
MetaModel::Init_SetZListItems('advanced_search', array('name', 'description', 'category', 'objects_class', 'source_type', 'source_subtype'));
// Criteria of the advanced search form
}
开发者ID:kira8565,项目名称:ITOP203-ZHCN,代码行数:25,代码来源:iotask.class.inc.php
示例4: ComputeSelectedClasses
/**
* Find the lowest common ancestor for each of the selected class
*/
protected function ComputeSelectedClasses()
{
// 1 - Collect all the column/classes
$aColumnToClasses = array();
foreach ($this->aSearches as $iPos => $oSearch) {
$aSelected = array_values($oSearch->GetSelectedClasses());
if ($iPos != 0) {
if (count($aSelected) < count($aColumnToClasses)) {
throw new Exception('Too few selected classes in the subquery #' . ($iPos + 1));
}
if (count($aSelected) > count($aColumnToClasses)) {
throw new Exception('Too many selected classes in the subquery #' . ($iPos + 1));
}
}
foreach ($aSelected as $iColumn => $sClass) {
$aColumnToClasses[$iColumn][] = $sClass;
}
}
// 2 - Build the index column => alias
$oFirstSearch = $this->aSearches[0];
$aColumnToAlias = array_keys($oFirstSearch->GetSelectedClasses());
// 3 - Compute alias => lowest common ancestor
$this->aSelectedClasses = array();
foreach ($aColumnToClasses as $iColumn => $aClasses) {
$sAlias = $aColumnToAlias[$iColumn];
$sAncestor = MetaModel::GetLowestCommonAncestor($aClasses);
if (is_null($sAncestor)) {
throw new Exception('Could not find a common ancestor for the column ' . ($iColumn + 1) . ' (Classes: ' . implode(', ', $aClasses) . ')');
}
$this->aSelectedClasses[$sAlias] = $sAncestor;
}
}
开发者ID:besmirzanaj,项目名称:itop-code,代码行数:35,代码来源:dbunionsearch.class.php
示例5: GetRuleResultFilter
function GetRuleResultFilter($iRuleId, $oDefinitionFilter, $oAppContext)
{
$oRule = MetaModel::GetObject('AuditRule', $iRuleId);
$sOql = $oRule->Get('query');
$oRuleFilter = DBObjectSearch::FromOQL($sOql);
FilterByContext($oRuleFilter, $oAppContext);
// Not needed since this filter is a subset of the definition filter, but may speedup things
if ($oRule->Get('valid_flag') == 'false') {
// The query returns directly the invalid elements
$oFilter = $oRuleFilter->Intersect($oDefinitionFilter);
} else {
// The query returns only the valid elements, all the others are invalid
$aValidRows = $oRuleFilter->ToDataArray(array('id'));
$aValidIds = array();
foreach ($aValidRows as $aRow) {
$aValidIds[] = $aRow['id'];
}
$oFilter = $oDefinitionFilter->DeepClone();
if (count($aValidIds) > 0) {
$aInDefSet = array();
foreach ($oDefinitionFilter->ToDataArray(array('id')) as $aRow) {
$aInDefSet[] = $aRow['id'];
}
$aInvalids = array_diff($aInDefSet, $aValidIds);
if (count($aInvalids) > 0) {
$oFilter->AddCondition('id', $aInvalids, 'IN');
} else {
$oFilter->AddCondition('id', 0, '=');
}
}
}
return $oFilter;
}
开发者ID:henryavila,项目名称:itop,代码行数:33,代码来源:audit.php
示例6: Analyze
/**
* Split the string into placholders
* @param Hash $aParamTypes Class of the expected parameters: hash array of '<param_id>' => '<class_name>'
* @return void
*/
protected function Analyze($aParamTypes = array())
{
if (!is_null($this->m_aPlaceholders)) {
return;
}
$this->m_aPlaceholders = array();
if (preg_match_all('/\\$([a-z0-9_]+(->[a-z0-9_]+)*)\\$/', $this->m_sRaw, $aMatches)) {
foreach ($aMatches[1] as $sPlaceholder) {
$oPlaceholder = new TemplateStringPlaceholder($sPlaceholder);
$oPlaceholder->bIsValid = false;
foreach ($aParamTypes as $sParamName => $sClass) {
$sParamPrefix = $sParamName . '->';
if (substr($sPlaceholder, 0, strlen($sParamPrefix)) == $sParamPrefix) {
// Todo - detect functions (label...)
$oPlaceholder->sFunction = '';
$oPlaceholder->sParamName = $sParamName;
$sAttcode = substr($sPlaceholder, strlen($sParamPrefix));
$oPlaceholder->sAttcode = $sAttcode;
$oPlaceholder->bIsValid = MetaModel::IsValidAttCode($sClass, $sAttcode, true);
}
}
$this->m_aPlaceholders[] = $oPlaceholder;
}
}
}
开发者ID:leandroborgeseng,项目名称:bhtm,代码行数:30,代码来源:templatestring.class.inc.php
示例7: Init
public static function Init()
{
$aParams = array("category" => "gui", "key_type" => "autoincrement", "name_attcode" => "user_id", "state_attcode" => "", "reconc_keys" => array(), "db_table" => "priv_app_dashboards", "db_key_field" => "id", "db_finalclass_field" => "");
MetaModel::Init_Params($aParams);
MetaModel::Init_AddAttribute(new AttributeExternalKey("user_id", array("targetclass" => "User", "allowed_values" => null, "sql" => "user_id", "is_null_allowed" => false, "on_target_delete" => DEL_AUTO, "depends_on" => array())));
MetaModel::Init_AddAttribute(new AttributeString("menu_code", array("allowed_values" => null, "sql" => "menu_code", "default_value" => null, "is_null_allowed" => false, "depends_on" => array())));
MetaModel::Init_AddAttribute(new AttributeText("contents", array("allowed_values" => null, "sql" => "contents", "default_value" => null, "is_null_allowed" => false, "depends_on" => array())));
}
开发者ID:leandroborgeseng,项目名称:bhtm,代码行数:8,代码来源:user.dashboard.class.inc.php
示例8: findCube
public function findCube($cubeName, $localOnly = FALSE) {
$cube = parent::findCube($cubeName);
if (!isset($cube) && !$localOnly) {
$cube = $this->parentMetaModel->findCube($cubeName);
}
return $cube;
}
开发者ID:reisystems-india,项目名称:GovDashboard-Community,代码行数:8,代码来源:ModifiedDatasetMetaModel.php
示例9: GetProfileActionGrant
public static function GetProfileActionGrant($iProfileId, $sClass, $sAction)
{
$bLegacyBehavior = MetaModel::GetConfig()->Get('user_rights_legacy');
// Search for a grant, stoping if any deny is encountered (allowance implies the verification of all paths)
$bAllow = null;
// 1 - The class itself
//
$sGrantKey = $iProfileId . '_' . $sClass . '_' . $sAction;
if (isset(self::$aGRANTS[$sGrantKey])) {
$bAllow = self::$aGRANTS[$sGrantKey];
if ($bLegacyBehavior) {
return $bAllow;
}
if (!$bAllow) {
return false;
}
}
// 2 - The parent classes, up to the root class
//
foreach (MetaModel::EnumParentClasses($sClass, ENUM_PARENT_CLASSES_EXCLUDELEAF, false) as $sParent) {
$sGrantKey = $iProfileId . '_' . $sParent . '+_' . $sAction;
if (isset(self::$aGRANTS[$sGrantKey])) {
$bAllow = self::$aGRANTS[$sGrantKey];
if ($bLegacyBehavior) {
return $bAllow;
}
if (!$bAllow) {
return false;
}
}
}
// 3 - The related classes (if the current is an N-N link with DEL_AUTO/DEL_SILENT)
//
$bGrant = self::GetLinkActionGrant($iProfileId, $sClass, $sAction);
if (!is_null($bGrant)) {
$bAllow = $bGrant;
if ($bLegacyBehavior) {
return $bAllow;
}
if (!$bAllow) {
return false;
}
}
// 4 - All
//
$sGrantKey = $iProfileId . '_*_' . $sAction;
if (isset(self::$aGRANTS[$sGrantKey])) {
$bAllow = self::$aGRANTS[$sGrantKey];
if ($bLegacyBehavior) {
return $bAllow;
}
if (!$bAllow) {
return false;
}
}
// null or true
return $bAllow;
}
开发者ID:leandroborgeseng,项目名称:bhtm,代码行数:58,代码来源:model.itop-profiles-itil.php
示例10: output
public function output()
{
if (class_exists('MetaModel')) {
MetaModel::RecordQueryTrace();
}
if (class_exists('ExecutionKPI')) {
ExecutionKPI::ReportStats();
}
}
开发者ID:kira8565,项目名称:ITOP203-ZHCN,代码行数:9,代码来源:clipage.class.inc.php
示例11: GetProfileActionGrant
public static function GetProfileActionGrant($iProfileId, $sClass, $sAction)
{
// Search for a grant, starting from the most explicit declaration,
// then searching for less and less explicit declaration
// 1 - The class itself
//
$sGrantKey = $iProfileId . '_' . $sClass . '_' . $sAction;
if (isset(self::$aGRANTS[$sGrantKey])) {
return self::$aGRANTS[$sGrantKey];
}
// 2 - The parent classes, up to the root class
//
foreach (MetaModel::EnumParentClasses($sClass, ENUM_PARENT_CLASSES_EXCLUDELEAF, false) as $sParent) {
$sGrantKey = $iProfileId . '_' . $sParent . '+_' . $sAction;
if (isset(self::$aGRANTS[$sGrantKey])) {
return self::$aGRANTS[$sGrantKey];
}
}
// 3 - The related classes (if the current is an N-N link with AUTO_DEL)
//
if (array_key_exists($sClass, self::$aLINKTOCLASSES)) {
// Get the grant for the remote classes. The resulting grant is:
// - One YES => YES
// - 100% undefined => undefined
// - otherwise => NO
//
// Having write allowed on the remote class implies write + delete on the N-N link class
if ($sAction == 'd') {
$sRemoteAction = 'w';
} elseif ($sAction == 'bd') {
$sRemoteAction = 'bw';
} else {
$sRemoteAction = $sAction;
}
foreach (self::$aLINKTOCLASSES[$sClass] as $sRemoteClass) {
$bUndefined = true;
$bGrant = self::GetProfileActionGrant($iProfileId, $sRemoteClass, $sAction);
if ($bGrant === true) {
return true;
}
if ($bGrant === false) {
$bUndefined = false;
}
}
if (!$bUndefined) {
return false;
}
}
// 4 - All
//
$sGrantKey = $iProfileId . '_*_' . $sAction;
if (isset(self::$aGRANTS[$sGrantKey])) {
return self::$aGRANTS[$sGrantKey];
}
// Still undefined for this class
return null;
}
开发者ID:kira8565,项目名称:ITOP203-ZHCN,代码行数:57,代码来源:model.itop-profiles-itil.php
示例12: Init
public static function Init()
{
$aParams = array("category" => "core/cmdb", "key_type" => "autoincrement", "name_attcode" => "date", "state_attcode" => "", "reconc_keys" => array(), "db_table" => "priv_change", "db_key_field" => "id", "db_finalclass_field" => "", 'indexes' => array(array('origin')));
MetaModel::Init_Params($aParams);
//MetaModel::Init_InheritAttributes();
MetaModel::Init_AddAttribute(new AttributeDateTime("date", array("allowed_values" => null, "sql" => "date", "default_value" => "", "is_null_allowed" => false, "depends_on" => array())));
MetaModel::Init_AddAttribute(new AttributeString("userinfo", array("allowed_values" => null, "sql" => "userinfo", "default_value" => null, "is_null_allowed" => true, "depends_on" => array())));
MetaModel::Init_AddAttribute(new AttributeEnum("origin", array("allowed_values" => new ValueSetEnum('interactive,csv-interactive,csv-import.php,webservice-soap,webservice-rest,synchro-data-source,email-processing,custom-extension'), "sql" => "origin", "default_value" => "interactive", "is_null_allowed" => true, "depends_on" => array())));
}
开发者ID:kira8565,项目名称:ITOP203-ZHCN,代码行数:9,代码来源:cmdbchange.class.inc.php
示例13: IsInstalled
/**
* Helper to check wether the table has been created into the DB
* (this table did not exist in 1.0.1 and older versions)
*/
public static function IsInstalled()
{
$sTable = MetaModel::DBGetTable(__CLASS__);
if (CMDBSource::IsTable($sTable)) {
return true;
} else {
return false;
}
return false;
}
开发者ID:kira8565,项目名称:ITOP203-ZHCN,代码行数:14,代码来源:dbproperty.class.inc.php
示例14: decorationFactory
/**
* @param MetaModel $meta
*
* @return Ajde_Crud_Options_Fields_Field
*/
protected function decorationFactory(MetaModel $meta)
{
$field = new Ajde_Crud_Options_Fields_Field();
$field->setName('meta_' . $meta->getPK());
$field->setType('text');
$field->setLabel($meta->get('name'));
if ($meta->getOption('help')) {
$field->setHelp($meta->getOption('help'));
}
if ($meta->getOption('default')) {
$field->setDefault($meta->getOption('default'));
}
if ($meta->getOption('readonly')) {
$field->setIsReadonly(true);
}
$field->setLength($meta->getIntOption('length'));
$field->setIsRequired($meta->getBooleanOption('required'));
return $field;
}
开发者ID:nabble,项目名称:ajde,代码行数:24,代码来源:Type.php
示例15: GetURL
public function GetURL()
{
$aOverloads = MetaModel::GetConfig()->Get('portal_dispatch_urls');
if (array_key_exists($this->sPortalid, $aOverloads)) {
$sRet = $aOverloads[$this->sPortalid];
} else {
$sRet = utils::GetAbsoluteUrlAppRoot() . $this->aData['url'];
}
return $sRet;
}
开发者ID:besmirzanaj,项目名称:itop-code,代码行数:10,代码来源:portaldispatcher.class.inc.php
示例16: MakeObjectURL
public static function MakeObjectURL($sClass, $iId)
{
if (strpos(MetaModel::GetConfig()->Get('portal_tickets'), $sClass) !== false) {
$sAbsoluteUrl = utils::GetAbsoluteUrlAppRoot();
$sUrl = "{$sAbsoluteUrl}portal/index.php?operation=details&class={$sClass}&id={$iId}";
} else {
$sUrl = '';
}
return $sUrl;
}
开发者ID:kira8565,项目名称:ITOP203-ZHCN,代码行数:10,代码来源:main.itop-welcome-itil.php
示例17: encodeLangArray
public function encodeLangArray($varValue, MetaModel $objMetaModel)
{
// not translated, make it a plain string.
if (!$objMetaModel->isTranslated()) {
return $varValue;
}
$arrLangValues = deserialize($varValue);
$arrOutput = array();
foreach ($arrLangValues as $varSubValue) {
$strLangCode = $varSubValue['langcode'];
unset($varSubValue['langcode']);
if (count($varSubValue) > 1) {
$arrOutput[$strLangCode] = $varSubValue;
} else {
$arrKeys = array_keys($varSubValue);
$arrOutput[$strLangCode] = $varSubValue[$arrKeys[0]];
}
}
return serialize($arrOutput);
}
开发者ID:amenk,项目名称:MetaModels-core,代码行数:20,代码来源:TableMetaModelHelper.php
示例18: beforeSave
public function beforeSave(MetaModel $meta, $value, Ajde_Model $model)
{
if ($value == 1) {
// we need to publish this thing
$stream = $meta->getOption('stream');
$publisherClass = 'Ajde_Publisher_' . ucfirst($stream);
/* @var $publisher Ajde_Publisher */
$publisher = new $publisherClass();
if (strtolower($stream) == 'twitter') {
$publisher->setOptions(['consumerKey' => $meta->getOption('twitter_consumerkey'), 'consumerSecret' => $meta->getOption('twitter_consumersecret'), 'token' => $meta->getOption('twitter_token'), 'tokenSecret' => $meta->getOption('twitter_tokensecret')]);
}
if (strtolower($stream) == 'mail') {
$addresses = $model->getPublishRecipients();
$publisher->setRecipients($addresses);
}
// fill with content
$publishData = $model->getPublishData();
$publisher->setTitle($publishData['title']);
$publisher->setMessage($publishData['message']);
$publisher->setImage($publishData['image']);
$publisher->setUrl($publishData['url']);
$value = $publisher->publish();
}
return $value;
}
开发者ID:nabble,项目名称:ajde,代码行数:25,代码来源:Publish.php
示例19: Init
public static function Init()
{
$aParams = array('category' => 'bizmodel,configmgmt', 'key_type' => 'autoincrement', 'is_link' => true, 'name_attcode' => 'volume_id', 'state_attcode' => '', 'reconc_keys' => array(''), 'db_table' => 'lnkvirtualdevicetovolume', 'db_key_field' => 'id', 'db_finalclass_field' => '');
MetaModel::Init_Params($aParams);
MetaModel::Init_InheritAttributes();
MetaModel::Init_AddAttribute(new AttributeExternalKey("volume_id", array("targetclass" => 'LogicalVolume', "allowed_values" => null, "sql" => 'volume_id', "is_null_allowed" => false, "on_target_delete" => DEL_AUTO, "depends_on" => array(), "display_style" => 'select', "always_load_in_tables" => false)));
MetaModel::Init_AddAttribute(new AttributeExternalField("volume_name", array("allowed_values" => null, "extkey_attcode" => 'volume_id', "target_attcode" => 'name', "always_load_in_tables" => false)));
MetaModel::Init_AddAttribute(new AttributeExternalKey("virtualdevice_id", array("targetclass" => 'VirtualDevice', "allowed_values" => null, "sql" => 'virtualdevice_id', "is_null_allowed" => false, "on_target_delete" => DEL_AUTO, "depends_on" => array(), "display_style" => 'select', "always_load_in_tables" => false)));
MetaModel::Init_AddAttribute(new AttributeExternalField("virtualdevice_name", array("allowed_values" => null, "extkey_attcode" => 'virtualdevice_id', "target_attcode" => 'name', "always_load_in_tables" => false)));
MetaModel::Init_AddAttribute(new AttributeString("size_used", array("allowed_values" => null, "sql" => 'size_used', "default_value" => '', "is_null_allowed" => true, "depends_on" => array(), "always_load_in_tables" => false)));
MetaModel::Init_SetZListItems('details', array(0 => 'volume_id', 1 => 'virtualdevice_id', 2 => 'size_used'));
MetaModel::Init_SetZListItems('standard_search', array(0 => 'volume_id', 1 => 'virtualdevice_id'));
MetaModel::Init_SetZListItems('list', array(0 => 'volume_id', 1 => 'virtualdevice_id', 2 => 'size_used'));
}
开发者ID:leandroborgeseng,项目名称:bhtm,代码行数:14,代码来源:model.itop-bridge-virtualization-storage.php
示例20: output
public function output()
{
if (!$this->m_bPassThrough) {
$this->s_content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?" . ">\n" . trim($this->s_content);
$this->add_header("Content-Length: " . strlen($this->s_content));
foreach ($this->a_headers as $s_header) {
header($s_header);
}
echo $this->s_content;
}
if (class_exists('MetaModel')) {
MetaModel::RecordQueryTrace();
}
}
开发者ID:kira8565,项目名称:ITOP203-ZHCN,代码行数:14,代码来源:xmlpage.class.inc.php
注:本文中的MetaModel类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论