本文整理汇总了PHP中AuditEvent类的典型用法代码示例。如果您正苦于以下问题:PHP AuditEvent类的具体用法?PHP AuditEvent怎么用?PHP AuditEvent使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了AuditEvent类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的PHP代码示例。
示例1: addEvent
public function addEvent(AuditEvent $event)
{
$event->setComponent($this->_component);
$cn = get_class($event);
$sev = serialize($event);
// Shove into DB -- echo $sev;
echo $cn . "\n\n" . $sev . "\n";
$db = new DatabaseConnection();
$db->insertRow("INSERT INTO auditlog " . "eventclass,component,severity,eventdate,data) " . "VALUES (%s,%s,%d,%d,NOW(),%s)", $cn, $event->getComponent(), $event->getSeverity(), $event->getAssociatedUserId(), $sev);
}
开发者ID:noccy80,项目名称:lepton-ng,代码行数:10,代码来源:audit.php
示例2: actionDetails
public function actionDetails($id)
{
$contact = static::getModelAndCatchNotFoundAndDisplayError('Contact', intval($id));
ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($contact);
if (!LeadsUtil::isStateALead($contact->state)) {
$urlParams = array('/contacts/' . $this->getId() . '/details', 'id' => $contact->id);
$this->redirect($urlParams);
} else {
AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_VIEWED, array(strval($contact), 'LeadsModule'), $contact);
$getData = GetUtil::getData();
$isKanbanBoardInRequest = ArrayUtil::getArrayValue($getData, 'kanbanBoard');
if ($isKanbanBoardInRequest == 0 || $isKanbanBoardInRequest == null || Yii::app()->userInterface->isMobile() === true) {
$breadCrumbView = StickySearchUtil::resolveBreadCrumbViewForDetailsControllerAction($this, 'LeadsSearchView', $contact);
$detailsAndRelationsView = $this->makeDetailsAndRelationsView($contact, 'LeadsModule', 'LeadDetailsAndRelationsView', Yii::app()->request->getRequestUri(), $breadCrumbView);
$view = new LeadsPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $detailsAndRelationsView));
} else {
$kanbanItem = new KanbanItem();
$kanbanBoard = new TaskKanbanBoard($kanbanItem, 'type', $contact, get_class($contact));
$kanbanBoard->setIsActive();
$params['relationModel'] = $contact;
$params['relationModuleId'] = $this->getModule()->getId();
$params['redirectUrl'] = null;
$listView = new TasksForLeadKanbanView($this->getId(), 'tasks', 'Task', null, $params, null, array(), $kanbanBoard);
$view = new LeadsPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $listView));
}
echo $view->render();
}
}
开发者ID:RamaKavanan,项目名称:InitialVersion,代码行数:28,代码来源:DefaultController.php
示例3: actionDetails
public function actionDetails($id)
{
$product = static::getModelAndCatchNotFoundAndDisplayError('Product', intval($id));
ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($product);
$breadCrumbLinks = array(StringUtil::getChoppedStringContent(strval($product), 25));
AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_VIEWED, array(strval($product), 'ProductsModule'), $product);
$detailsView = new ProductEditAndDetailsView('Details', $this->getId(), $this->getModule()->getId(), $product);
$view = new ProductsPageView(ProductDefaultViewUtil::makeViewWithBreadcrumbsForCurrentUser($this, $detailsView, $breadCrumbLinks, 'ProductBreadCrumbView'));
echo $view->render();
}
开发者ID:maruthisivaprasad,项目名称:zurmo,代码行数:10,代码来源:DefaultController.php
示例4: actionDetails
public function actionDetails($id)
{
$animal = static::getModelAndCatchNotFoundAndDisplayError('Animal', intval($id));
$breadCrumbView = StickySearchUtil::resolveBreadCrumbViewForDetailsControllerAction($this, 'AnimalsSearchView', $animal);
ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($animal);
AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_VIEWED, array(strval($animal), 'AnimalsModule'), $animal);
$titleBarAndEditView = $this->makeEditAndDetailsView($animal, 'Details');
$view = new AnimalsPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $titleBarAndEditView));
echo $view->render();
}
开发者ID:sandeep1027,项目名称:zurmo_,代码行数:10,代码来源:DefaultController.php
示例5: actionDetails
public function actionDetails($id)
{
$account = static::getModelAndCatchNotFoundAndDisplayError('Account', intval($id));
ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($account);
AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_VIEWED, array(strval($account), 'AccountsModule'), $account);
$breadCrumbView = StickySearchUtil::resolveBreadCrumbViewForDetailsControllerAction($this, 'AccountsSearchView', $account);
$detailsAndRelationsView = $this->makeDetailsAndRelationsView($account, 'AccountsModule', 'AccountDetailsAndRelationsView', Yii::app()->request->getRequestUri(), $breadCrumbView);
$view = new AccountsPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $detailsAndRelationsView));
echo $view->render();
}
开发者ID:youprofit,项目名称:Zurmo,代码行数:10,代码来源:DefaultController.php
示例6: actionDetails
/**
* @param $id
* @param null $redirectUrl
*/
public function actionDetails($id, $redirectUrl = null)
{
$modelClassName = $this->getModule()->getPrimaryModelName();
$activity = static::getModelAndCatchNotFoundAndDisplayError($modelClassName, intval($id));
ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($activity);
AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_VIEWED, array(strval($activity), get_class($this->getModule())), $activity);
$pageViewClassName = $this->getPageViewClassName();
$view = new $pageViewClassName(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $this->makeEditAndDetailsView($activity, 'Details')));
echo $view->render();
}
开发者ID:youprofit,项目名称:Zurmo,代码行数:14,代码来源:ActivityModelsDefaultController.php
示例7: actionDetails
public function actionDetails($id)
{
$savedReport = static::getModelAndCatchNotFoundAndDisplayError('SavedReport', intval($id));
ControllerSecurityUtil::resolveCanCurrentUserAccessModule($savedReport->moduleClassName);
ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($savedReport);
AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_VIEWED, array(strval($savedReport), 'ReportsModule'), $savedReport);
$breadCrumbLinks = array(strval($savedReport));
$breadCrumbView = new ReportBreadCrumbView($this->getId(), $this->getModule()->getId(), $breadCrumbLinks);
$detailsAndRelationsView = $this->makeReportDetailsAndRelationsView($savedReport, Yii::app()->request->getRequestUri(), $breadCrumbView);
$view = new ReportsPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $detailsAndRelationsView));
echo $view->render();
}
开发者ID:RamaKavanan,项目名称:InitialVersion,代码行数:12,代码来源:DefaultController.php
示例8: actionDetails
public function actionDetails($id)
{
$conversation = static::getModelAndCatchNotFoundAndDisplayError('Conversation', intval($id));
ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($conversation);
AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_VIEWED, array(strval($conversation), 'ConversationsModule'), $conversation);
ConversationsUtil::markUserHasReadLatest($conversation, Yii::app()->user->userModel);
$detailsView = new ConversationDetailsView($this->getId(), $this->getModule()->getId(), $conversation);
$conversationsMashableInboxUrl = Yii::app()->createUrl('mashableInbox/default/list', array('modelClassName' => 'Conversation'));
$breadcrumbLinks = array(Zurmo::t('ConversationsModule', 'Conversations') => $conversationsMashableInboxUrl, StringUtil::getChoppedStringContent(strval($conversation), 25));
$view = new ConversationsPageView(ZurmoDefaultViewUtil::makeViewWithBreadcrumbsForCurrentUser($this, $detailsView, $breadcrumbLinks, 'ConversationBreadCrumbView'));
echo $view->render();
}
开发者ID:sandeep1027,项目名称:zurmo_,代码行数:12,代码来源:DefaultController.php
示例9: actionDetails
public function actionDetails($id)
{
$savedWorkflow = static::getModelAndCatchNotFoundAndDisplayError('SavedWorkflow', intval($id));
ControllerSecurityUtil::resolveCanCurrentUserAccessModule($savedWorkflow->moduleClassName);
ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($savedWorkflow);
AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_VIEWED, array(strval($savedWorkflow), 'WorkflowsModule'), $savedWorkflow);
$breadCrumbLinks = array(strval($savedWorkflow));
$workflow = SavedWorkflowToWorkflowAdapter::makeWorkflowBySavedWorkflow($savedWorkflow);
$workflowToWizardFormAdapter = new WorkflowToWizardFormAdapter($workflow);
$form = $workflowToWizardFormAdapter->makeFormByType();
$detailsView = new WorkflowDetailsView($this->getId(), $this->getModule()->getId(), $form);
$view = new WorkflowsPageView(ZurmoDefaultAdminViewUtil::makeViewWithBreadcrumbsForCurrentUser($this, $detailsView, $breadCrumbLinks, 'WorkflowBreadCrumbView'));
echo $view->render();
}
开发者ID:RamaKavanan,项目名称:InitialVersion,代码行数:14,代码来源:DefaultController.php
示例10: actionDetails
public function actionDetails($id)
{
$contact = static::getModelAndCatchNotFoundAndDisplayError('Contact', intval($id));
ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($contact);
AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_VIEWED, array(strval($contact), 'ContactsModule'), $contact);
if (KanbanUtil::isKanbanRequest() === false) {
$breadCrumbView = StickySearchUtil::resolveBreadCrumbViewForDetailsControllerAction($this, 'ContactsSearchView', $contact);
$detailsAndRelationsView = $this->makeDetailsAndRelationsView($contact, 'ContactsModule', 'ContactDetailsAndRelationsView', Yii::app()->request->getRequestUri(), $breadCrumbView);
$view = new ContactsPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $detailsAndRelationsView));
} else {
$view = TasksUtil::resolveTaskKanbanViewForRelation($contact, $this->getModule()->getId(), $this, 'TasksForContactKanbanView', 'ContactsPageView');
}
echo $view->render();
}
开发者ID:maruthisivaprasad,项目名称:zurmo,代码行数:14,代码来源:DefaultController.php
示例11: actionDetails
public function actionDetails($id)
{
$contact = static::getModelAndCatchNotFoundAndDisplayError('Contact', intval($id));
ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($contact);
if (!LeadsUtil::isStateALead($contact->state)) {
$urlParams = array('/contacts/' . $this->getId() . '/details', 'id' => $contact->id);
$this->redirect($urlParams);
} else {
AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_VIEWED, array(strval($contact), 'LeadsModule'), $contact);
$breadCrumbView = StickySearchUtil::resolveBreadCrumbViewForDetailsControllerAction($this, 'LeadsSearchView', $contact);
$detailsAndRelationsView = $this->makeDetailsAndRelationsView($contact, 'LeadsModule', 'LeadDetailsAndRelationsView', Yii::app()->request->getRequestUri(), $breadCrumbView);
$view = new LeadsPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $detailsAndRelationsView));
echo $view->render();
}
}
开发者ID:sandeep1027,项目名称:zurmo_,代码行数:15,代码来源:DefaultController.php
示例12: logAuditEvent
public static function logAuditEvent($moduleName, $eventName, $data = null, RedBeanModel $model = null, User $user = null)
{
assert('is_string($moduleName) && $moduleName != ""');
assert('is_string($eventName) && $eventName != ""');
if ($user === null) {
$user = Yii::app()->user->userModel;
if (!$user instanceof User) {
throw new NoCurrentUserSecurityException();
}
}
if ($eventName == ZurmoModule::AUDIT_EVENT_ITEM_VIEWED) {
AuditEventsRecentlyViewedUtil::resolveNewRecentlyViewedModel($data[1], $model, AuditEventsRecentlyViewedUtil::RECENTLY_VIEWED_COUNT + 1);
}
if ($eventName == ZurmoModule::AUDIT_EVENT_ITEM_DELETED) {
$modelClassName = get_class($model);
AuditEventsRecentlyViewedUtil::deleteModelFromRecentlyViewed($modelClassName::getModuleClassName(), $model);
}
if ($eventName != ZurmoModule::AUDIT_EVENT_ITEM_VIEWED) {
if (!AuditEvent::$isTableOptimized && !AUDITING_OPTIMIZED) {
$auditEvent = new AuditEvent();
$auditEvent->dateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
$auditEvent->moduleName = $moduleName;
$auditEvent->eventName = $eventName;
$auditEvent->user = $user;
$auditEvent->modelClassName = $model !== null ? get_class($model) : null;
$auditEvent->modelId = $model !== null ? $model->id : null;
$auditEvent->serializedData = serialize($data);
$saved = $auditEvent->save();
AuditEvent::$isTableOptimized = true;
} else {
$sql = "insert into auditevent (datetime,\n modulename,\n eventname,\n _user_id,\n modelclassname,\n modelid,\n serializeddata)\n values ('" . DateTimeUtil::convertTimestampToDbFormatDateTime(time()) . "',\n '{$moduleName}',\n '{$eventName}',\n {$user->id}, " . ($model !== null ? "'" . get_class($model) . "', " : 'null, ') . ($model !== null ? "{$model->id}, " : 'null, ') . ":data)";
ZurmoRedBean::exec($sql, array('data' => serialize($data))) !== null;
$saved = true;
}
return $saved;
}
}
开发者ID:RamaKavanan,项目名称:InitialVersion,代码行数:37,代码来源:AuditEvent.php
示例13: actionDetails
/**
* Details view for project
* @param int $id
*/
public function actionDetails($id)
{
$project = static::getModelAndCatchNotFoundAndDisplayError('Project', intval($id));
ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($project);
AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_VIEWED, array(strval($project), 'ProjectsModule'), $project);
$view = TasksUtil::resolveTaskKanbanViewForRelation($project, $this->getModule()->getId(), $this, 'TasksForProjectKanbanView', 'ProjectsPageView');
echo $view->render();
}
开发者ID:maruthisivaprasad,项目名称:zurmo,代码行数:12,代码来源:DefaultController.php
示例14: testLogAuditEventsForIsActive
public function testLogAuditEventsForIsActive()
{
$user = new User();
$user->username = 'testlogauditforisactive';
$user->title->value = 'Mr.';
$user->firstName = 'My';
$user->lastName = 'testlogauditforisactive';
$user->setPassword('testlogauditforisactive');
$this->assertTrue($user->save());
unset($user);
$user = User::getByUsername('testlogauditforisactive');
$this->assertEquals(1, $user->isActive);
unset($user);
AuditEvent::deleteAll();
//Change the user's status to inactive and confirm new audit event is created
$user = User::getByUsername('testlogauditforisactive');
$user->setRight('UsersModule', UsersModule::RIGHT_LOGIN_VIA_WEB, RIGHT::DENY);
$this->assertTrue($user->save());
$this->assertEquals(0, $user->isActive);
$auditEvents = AuditEvent::getAll();
$this->assertCount(1, $auditEvents);
$this->assertContains('Item Modified', strval($auditEvents[0]));
unset($user);
//Now change the user's status back to active and confirm new audit event is created
$user = User::getByUsername('testlogauditforisactive');
$user->setRight('UsersModule', UsersModule::RIGHT_LOGIN_VIA_WEB, RIGHT::ALLOW);
$this->assertTrue($user->save());
$this->assertEquals(1, $user->isActive);
$auditEvents = AuditEvent::getAll();
$this->assertCount(2, $auditEvents);
$this->assertContains('Item Modified', strval($auditEvents[1]));
unset($user);
}
开发者ID:maruthisivaprasad,项目名称:zurmo,代码行数:33,代码来源:UserTest.php
示例15: testDeleteModelFromRecentlyViewed
public function testDeleteModelFromRecentlyViewed()
{
Yii::app()->user->userModel = User::getByUsername('super');
ZurmoConfigurationUtil::setForCurrentUserByModuleName('ZurmoModule', 'recentlyViewed', null);
$account1 = new Account();
$account1->name = 'Dooble1';
$this->assertTrue($account1->save());
$account2 = new Account();
$account2->name = 'Dooble2';
$this->assertTrue($account2->save());
$account3 = new Account();
$account3->name = 'Dooble3';
$account3->owner = User::getByUsername('jimmy');
$this->assertTrue($account3->save());
//Now create some audit entries for the Item Viewed event.
AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_VIEWED, array(strval($account1), 'AccountsModule'), $account1);
AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_VIEWED, array(strval($account2), 'AccountsModule'), $account2);
AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_VIEWED, array(strval($account1), 'AccountsModule'), $account3);
$content = AuditEventsRecentlyViewedUtil::getRecentlyViewedAjaxContentByUser(Yii::app()->user->userModel, 5);
$this->assertContains('Dooble1', $content);
$this->assertContains('Dooble2', $content);
$this->assertContains('Dooble3', $content);
AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_DELETED, strval($account1), $account1);
$content = AuditEventsRecentlyViewedUtil::getRecentlyViewedAjaxContentByUser(Yii::app()->user->userModel, 5);
$this->assertNotContains('Dooble1', $content);
$this->assertContains('Dooble2', $content);
$this->assertContains('Dooble3', $content);
}
开发者ID:youprofit,项目名称:Zurmo,代码行数:28,代码来源:AuditEventsRecentlyViewedUtilTest.php
示例16: testChangingContactWithoutChangingRelatedAccountShouldNotAuditAccountChangeWhenDoneViaPost
public function testChangingContactWithoutChangingRelatedAccountShouldNotAuditAccountChangeWhenDoneViaPost()
{
Yii::app()->user->userModel = User::getByUsername('super');
$contactStates = ContactState::getByName('Qualified');
$contact = new Contact();
$contact->owner = Yii::app()->user->userModel;
$contact->title->value = 'Mr.';
$contact->firstName = 'Supero';
$contact->lastName = 'Mano';
$contact->state = $contactStates[0];
$this->assertTrue($contact->save());
$beforeCount = AuditEvent::getCount();
//Test that saving an existing contact without a related contact will not produce an audit event showing the
//related account has changed. This is a test to show when the account is not populated but has a negative
//id.
$contactId = $contact->id;
$contact->forget();
unset($contact);
$contact = Contact::getById($contactId);
$fakePostData = array('account' => array('id' => ''));
$contact->setAttributes($fakePostData);
$this->assertTrue($contact->save());
$this->assertEquals($beforeCount, AuditEvent::getCount());
}
开发者ID:youprofit,项目名称:Zurmo,代码行数:24,代码来源:ContactTest.php
示例17: logAuditEventsListForCreatedAndModifed
protected function logAuditEventsListForCreatedAndModifed($newModel)
{
if ($newModel) {
AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_CREATED, strval($this), $this);
} else {
AuditUtil::logAuditEventsListForChangedAttributeValues($this);
}
}
开发者ID:youprofit,项目名称:Zurmo,代码行数:8,代码来源:Item.php
示例18: actionDetails
public function actionDetails($id)
{
$emailTemplate = static::getModelAndCatchNotFoundAndDisplayError('EmailTemplate', intval($id));
ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($emailTemplate);
AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_VIEWED, array(strval($emailTemplate), 'EmailTemplatesModule'), $emailTemplate);
$detailsView = new EmailTemplateDetailsView($this->getId(), $this->getModule()->getId(), $emailTemplate, strval($emailTemplate));
$viewUtil = static::getViewUtilByType($emailTemplate->type);
$breadCrumbView = static::getBreadCrumbViewByType($emailTemplate->type);
$breadCrumbLinks = static::getBreadCrumbLinksByType($emailTemplate->type);
$breadCrumbLinks[] = StringUtil::getChoppedStringContent(strval($emailTemplate), 25);
$view = new EmailTemplatesPageView($viewUtil::makeViewWithBreadcrumbsForCurrentUser($this, $detailsView, $breadCrumbLinks, $breadCrumbView));
echo $view->render();
}
开发者ID:maruthisivaprasad,项目名称:zurmo,代码行数:13,代码来源:DefaultController.php
示例19: getRecentlyViewedAuditEventsByUser
/**
* Given a user and a count, get a tail of recent audit events for that user limited by the count.
* @param User $user
*/
protected static function getRecentlyViewedAuditEventsByUser(User $user, $count)
{
assert('is_int($count)');
return AuditEvent::getTailDistinctEventsByEventName('Item Viewed', $user, $count);
}
开发者ID:sandeep1027,项目名称:zurmo_,代码行数:9,代码来源:AuditEventsRecentlyViewedUtil.php
示例20: setIsActive
/**
* to change isActive attribute properly during save
*/
protected function setIsActive()
{
if (Right::DENY == $this->getExplicitActualRight('UsersModule', UsersModule::RIGHT_LOGIN_VIA_WEB) || Right::DENY == $this->getExplicitActualRight('UsersModule', UsersModule::RIGHT_LOGIN_VIA_MOBILE) || Right::DENY == $this->getExplicitActualRight('UsersModule', UsersModule::RIGHT_LOGIN_VIA_WEB_API)) {
$isActive = false;
} else {
$isActive = true;
}
if ($this->isActive != $isActive) {
$data = array(strval($this), array('isActive'), BooleanUtil::boolToString((bool) $this->isActive), BooleanUtil::boolToString((bool) $isActive));
AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_MODIFIED, $data, $this);
$this->unrestrictedSet('isActive', $isActive);
$this->save();
}
}
开发者ID:RamaKavanan,项目名称:InitialVersion,代码行数:17,代码来源:User.php
注:本文中的AuditEvent类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论