本文整理汇总了PHP中Engine::GetInstance方法的典型用法代码示例。如果您正苦于以下问题:PHP Engine::GetInstance方法的具体用法?PHP Engine::GetInstance怎么用?PHP Engine::GetInstance使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Engine
的用法示例。
在下文中一共展示了Engine::GetInstance方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: __construct
public function __construct()
{
$this->aUserIds = array();
$this->oEngine = Engine::GetInstance();
$sId = strtolower(get_class($this));
$this->aConfig = Config::Get('plugin.botchecker.rules.' . $sId);
$this->iHumanScore = 0;
$this->iBotScore = 0;
}
示例2: deleteUser
public static function deleteUser($iUserId)
{
$aFilter = array('user_id' => $iUserId);
$iTopicCount = Engine::GetInstance()->Topic_GetCountTopicsByFilter($aFilter);
$iCommentCount = Engine::GetInstance()->Comment_GetCountCommentsByUserId($iUserId, 'topic');
if ($iTopicCount == 0 && $iCommentCount == 0) {
Engine::GetInstance()->PluginBotchecker_Botchecker_deleteUser($iUserId);
return '[delete] Simple delete user with id=' . $iUserId;
} else {
return '[skip] User with id=' . $iUserId . ' has ' . $iTopicCount . ' topics and ' . $iCommentCount . ' commants';
}
}
示例3: _deleteManyToManyRelation
/**
* Выполняет удаление всех связей many_to_many сущности
*
* @param $oEntity
* @param $sRelationKey
*/
protected function _deleteManyToManyRelation($oEntity, $sRelationKey)
{
$aRelations = $oEntity->_getRelations();
if (!isset($aRelations[$sRelationKey]['type']) or $aRelations[$sRelationKey]['type'] != EntityORM::RELATION_TYPE_MANY_TO_MANY) {
return;
}
$aFilterAdd = $aRelations[$sRelationKey]['filter'];
$oEntityRelation = Engine::GetEntity($aRelations[$sRelationKey]['join_entity']);
/**
* По сущности связи формируем запрос за получение списка сохраненых связей в БД
*/
$sCmd = Engine::GetPluginPrefix($aRelations[$sRelationKey]['join_entity']) . 'Module' . Engine::GetModuleName($aRelations[$sRelationKey]['join_entity']) . '_Get' . Engine::GetEntityName($aRelations[$sRelationKey]['join_entity']) . 'ItemsByFilter';
list($aFilter) = $this->oMapperORM->BuildFilter($aFilterAdd, $oEntityRelation);
$aFilter[$aRelations[$sRelationKey]['join_key']] = $oEntity->_getPrimaryKeyValue();
$aRelationItemsSaved = Engine::GetInstance()->_CallModule($sCmd, array($aFilter));
foreach ($aRelationItemsSaved as $oRelation) {
$oRelation->Delete();
}
}
示例4: E
/**
* Возвращает ядро
* @see Engine::GetInstance
*
* @return Engine
*/
public static function E()
{
return Engine::GetInstance();
}
示例5: __call
/**
* Вызов методов сущности
*
* @param unknown_type $sName
* @param unknown_type $aArgs
* @return unknown
*/
public function __call($sName, $aArgs)
{
$sType = substr($sName, 0, strpos(func_underscore($sName), '_'));
if (!strpos($sName, '_') and in_array($sType, array('get', 'set', 'reload'))) {
$sKey = func_underscore(preg_replace('/' . $sType . '/', '', $sName, 1));
if ($sType == 'get') {
if (isset($this->_aData[$sKey])) {
return $this->_aData[$sKey];
} else {
$sField = $this->_getField($sKey);
if ($sField != $sKey && isset($this->_aData[$sField])) {
return $this->_aData[$sField];
}
}
/**
* Проверяем на связи
*/
if (array_key_exists($sKey, $this->aRelations)) {
$sEntityRel = $this->aRelations[$sKey][1];
$sRelationType = $this->aRelations[$sKey][0];
$sRelationKey = $this->aRelations[$sKey][2];
$sRelationJoinTable = null;
$sRelationJoinTableKey = 0;
// foreign key в join-таблице для текущей сущности
if ($sRelationType == self::RELATION_TYPE_MANY_TO_MANY && array_key_exists(3, $this->aRelations[$sKey])) {
$sRelationJoinTable = $this->aRelations[$sKey][3];
$sRelationJoinTableKey = isset($this->aRelations[$sKey][4]) ? $this->aRelations[$sKey][4] : $this->_getPrimaryKey();
}
/**
* Если связь уже загруженна, то возвращаем сразу результат
*/
if (array_key_exists($sKey, $this->aRelationsData)) {
return $this->aRelationsData[$sKey];
}
$sRelModuleName = Engine::GetModuleName($sEntityRel);
$sRelEntityName = Engine::GetEntityName($sEntityRel);
$sRelPluginPrefix = Engine::GetPluginPrefix($sEntityRel);
$sRelPrimaryKey = 'id';
if ($oRelEntity = Engine::GetEntity($sEntityRel)) {
$sRelPrimaryKey = $oRelEntity->_getPrimaryKey();
}
$iPrimaryKeyValue = $this->_getDataOne($this->_getPrimaryKey());
$sCmd = '';
$mCmdArgs = array();
switch ($sRelationType) {
case self::RELATION_TYPE_BELONGS_TO:
$sCmd = "{$sRelPluginPrefix}{$sRelModuleName}_get{$sRelEntityName}By" . func_camelize($sRelPrimaryKey);
$mCmdArgs = $this->_getDataOne($sRelationKey);
break;
case self::RELATION_TYPE_HAS_ONE:
$sCmd = "{$sRelPluginPrefix}{$sRelModuleName}_get{$sRelEntityName}By" . func_camelize($sRelationKey);
$mCmdArgs = $iPrimaryKeyValue;
break;
case self::RELATION_TYPE_HAS_MANY:
$sCmd = "{$sRelPluginPrefix}{$sRelModuleName}_get{$sRelEntityName}ItemsByFilter";
$mCmdArgs = array($sRelationKey => $iPrimaryKeyValue);
break;
case self::RELATION_TYPE_MANY_TO_MANY:
$sCmd = "{$sRelPluginPrefix}Module{$sRelModuleName}_get{$sRelEntityName}ItemsByJoinTable";
$mCmdArgs = array('#join_table' => Config::Get($sRelationJoinTable), '#relation_key' => $sRelationKey, '#by_key' => $sRelationJoinTableKey, '#by_value' => $iPrimaryKeyValue, '#index-from-primary' => true);
break;
default:
break;
}
// Нужно ли учитывать дополнительный фильтр
$bUseFilter = is_array($mCmdArgs) && array_key_exists(0, $aArgs) && is_array($aArgs[0]);
if ($bUseFilter) {
$mCmdArgs = array_merge($mCmdArgs, $aArgs[0]);
}
$res = Engine::GetInstance()->_CallModule($sCmd, array($mCmdArgs));
// Сохраняем данные только в случае "чистой" выборки
if (!$bUseFilter) {
$this->aRelationsData[$sKey] = $res;
}
// Создаём объекты-обёртки для связей MANY_TO_MANY
if ($sRelationType == self::RELATION_TYPE_MANY_TO_MANY) {
$this->_aManyToManyRelations[$sKey] = new LS_ManyToManyRelation($res);
}
return $res;
}
return null;
} elseif ($sType == 'set' and array_key_exists(0, $aArgs)) {
if (array_key_exists($sKey, $this->aRelations)) {
$this->aRelationsData[$sKey] = $aArgs[0];
} else {
$this->_aData[$this->_getField($sKey)] = $aArgs[0];
}
} elseif ($sType == 'reload') {
if (array_key_exists($sKey, $this->aRelationsData)) {
unset($this->aRelationsData[$sKey]);
return $this->__call('get' . func_camelize($sKey), $aArgs);
}
}
//.........这里部分代码省略.........
示例6: GetItemsByFilter
/**
* Получить список сущностей по фильтру
*
* @param unknown_type $aFilter
* @param unknown_type $sEntityFull
* @return unknown
*/
public function GetItemsByFilter($aFilter = array(), $sEntityFull = null)
{
if (is_null($aFilter)) {
$aFilter = array();
}
if (is_null($sEntityFull)) {
$sEntityFull = Engine::GetPluginPrefix($this) . 'Module' . Engine::GetModuleName($this) . '_Entity' . Engine::GetModuleName(get_class($this));
} elseif (!substr_count($sEntityFull, '_')) {
$sEntityFull = Engine::GetPluginPrefix($this) . 'Module' . Engine::GetModuleName($this) . '_Entity' . $sEntityFull;
}
// Если параметр #cache указан и пуст, значит игнорируем кэширование для запроса
if (array_key_exists('#cache', $aFilter) && !$aFilter['#cache']) {
$aEntities = $this->oMapperORM->GetItemsByFilter($aFilter, $sEntityFull);
} else {
$sEntityFullRoot = $this->Plugin_GetRootDelegater('entity', $sEntityFull);
$sCacheKey = $sEntityFullRoot . '_items_by_filter_' . serialize($aFilter);
$aCacheTags = array($sEntityFullRoot . '_save', $sEntityFullRoot . '_delete');
$iCacheTime = 60 * 60 * 24;
// скорее лучше хранить в свойстве сущности, для возможности выборочного переопределения
// переопределяем из параметров
if (isset($aFilter['#cache'][0])) {
$sCacheKey = $aFilter['#cache'][0];
}
if (isset($aFilter['#cache'][1])) {
$aCacheTags = $aFilter['#cache'][1];
}
if (isset($aFilter['#cache'][2])) {
$iCacheTime = $aFilter['#cache'][2];
}
if (false === ($aEntities = $this->Cache_Get($sCacheKey))) {
$aEntities = $this->oMapperORM->GetItemsByFilter($aFilter, $sEntityFull);
$this->Cache_Set($aEntities, $sCacheKey, $aCacheTags, $iCacheTime);
}
}
/**
* Если необходимо подцепить связанные данные
*/
if (count($aEntities) and isset($aFilter['#with'])) {
if (!is_array($aFilter['#with'])) {
$aFilter['#with'] = array($aFilter['#with']);
}
$oEntityEmpty = Engine::GetEntity($sEntityFull);
$aRelations = $oEntityEmpty->_getRelations();
$aEntityKeys = array();
foreach ($aFilter['#with'] as $sRelationName) {
$sRelType = $aRelations[$sRelationName][0];
$sRelEntity = $this->Plugin_GetRootDelegater('entity', $aRelations[$sRelationName][1]);
// получаем корневую сущность, без учета наследников
$sRelKey = $aRelations[$sRelationName][2];
if (!array_key_exists($sRelationName, $aRelations) or !in_array($sRelType, array(EntityORM::RELATION_TYPE_BELONGS_TO, EntityORM::RELATION_TYPE_HAS_ONE))) {
throw new Exception("The entity <{$sEntityFull}> not have relation <{$sRelationName}>");
}
/**
* Формируем список ключей
*/
foreach ($aEntities as $oEntity) {
$aEntityKeys[$sRelKey][] = $oEntity->_getDataOne($sRelKey);
}
$aEntityKeys[$sRelKey] = array_unique($aEntityKeys[$sRelKey]);
/**
* Делаем общий запрос по всем ключам
*/
$oRelEntityEmpty = Engine::GetEntity($sRelEntity);
$sRelModuleName = Engine::GetModuleName($sRelEntity);
$sRelEntityName = Engine::GetEntityName($sRelEntity);
$sRelPluginPrefix = Engine::GetPluginPrefix($sRelEntity);
$sRelPrimaryKey = method_exists($oRelEntityEmpty, '_getPrimaryKey') ? func_camelize($oRelEntityEmpty->_getPrimaryKey()) : 'Id';
$aRelData = Engine::GetInstance()->_CallModule("{$sRelPluginPrefix}{$sRelModuleName}_get{$sRelEntityName}ItemsByArray{$sRelPrimaryKey}", array($aEntityKeys[$sRelKey]));
/**
* Собираем набор
*/
foreach ($aEntities as $oEntity) {
if (isset($aRelData[$oEntity->_getDataOne($sRelKey)])) {
$oEntity->_setData(array($sRelationName => $aRelData[$oEntity->_getDataOne($sRelKey)]));
}
}
}
}
/**
* Returns assotiative array, indexed by PRIMARY KEY or another field.
*/
if (in_array('#index-from-primary', $aFilter) || !empty($aFilter['#index-from'])) {
$aEntities = $this->_setIndexesFromField($aEntities, $aFilter);
}
/**
* Если запрашиваем постраничный список, то возвращаем сам список и общее количество записей
*/
if (isset($aFilter['#page'])) {
return array('collection' => $aEntities, 'count' => $this->GetCountItemsByFilter($aFilter, $sEntityFull));
}
return $aEntities;
}
示例7: __call
/**
* Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля
* Также производит обработку методов set* и get*
* Учитывает связи и может возвращать связанные данные
* @see Engine::_CallModule
*
* @param string $sName Имя метода
* @param array $aArgs Аргументы
* @return mixed
*/
public function __call($sName, $aArgs)
{
$sType = substr($sName, 0, strpos(func_underscore($sName), '_'));
if (!strpos($sName, '_') and in_array($sType, array('get', 'set', 'reload'))) {
$sKey = func_underscore(preg_replace('/' . $sType . '/', '', $sName, 1));
if ($sType == 'get') {
if (isset($this->_aData[$sKey])) {
return $this->_aData[$sKey];
} else {
$sField = $this->_getField($sKey);
if ($sField != $sKey && isset($this->_aData[$sField])) {
return $this->_aData[$sField];
}
}
/**
* Проверяем на связи
*/
$aRelations = $this->_getRelations();
if (array_key_exists($sKey, $aRelations)) {
$sEntityRel = $aRelations[$sKey]['rel_entity'];
$sRelationType = $aRelations[$sKey]['type'];
$sRelationKey = $aRelations[$sKey]['rel_key'];
$sRelModuleName = Engine::GetModuleName($sEntityRel);
$sRelEntityName = Engine::GetEntityName($sEntityRel);
$sRelPluginPrefix = Engine::GetPluginPrefix($sEntityRel);
$sRelPrimaryKey = 'id';
if ($oRelEntity = Engine::GetEntity($sEntityRel)) {
$sRelPrimaryKey = $oRelEntity->_getPrimaryKey();
}
$iPrimaryKeyValue = $this->_getDataOne($this->_getPrimaryKey());
$bUseFilter = array_key_exists(0, $aArgs) && is_array($aArgs[0]);
$sCmd = '';
$mCmdArgs = array();
switch ($sRelationType) {
case self::RELATION_TYPE_BELONGS_TO:
$sKeyTo = $aRelations[$sKey]['rel_key_to'] ?: $sRelPrimaryKey;
$sCmd = "{$sRelPluginPrefix}{$sRelModuleName}_get{$sRelEntityName}By" . func_camelize($sKeyTo);
$mCmdArgs = array($this->_getDataOne($sRelationKey));
break;
case self::RELATION_TYPE_HAS_ONE:
$aFilterAdd = $aRelations[$sKey]['filter'];
$sCmd = "{$sRelPluginPrefix}{$sRelModuleName}_get{$sRelEntityName}ByFilter";
$aFilterAdd = array_merge(array($sRelationKey => $iPrimaryKeyValue), $aFilterAdd);
$mCmdArgs = array($aFilterAdd);
break;
case self::RELATION_TYPE_HAS_MANY:
if ($aRelations[$sKey]['key_from']) {
$sRelationKeyValue = $this->_getDataOne($aRelations[$sKey]['key_from']);
} else {
$sRelationKeyValue = $iPrimaryKeyValue;
}
$aFilterAdd = $aRelations[$sKey]['filter'];
$sCmd = "{$sRelPluginPrefix}{$sRelModuleName}_get{$sRelEntityName}ItemsByFilter";
$aFilterAdd = array_merge(array($sRelationKey => $sRelationKeyValue), $aFilterAdd);
if ($bUseFilter) {
$aFilterAdd = array_merge($aFilterAdd, $aArgs[0]);
}
$mCmdArgs = array($aFilterAdd);
break;
case self::RELATION_TYPE_MANY_TO_MANY:
$sEntityJoin = $aRelations[$sKey]['join_entity'];
$sKeyJoin = $aRelations[$sKey]['join_key'];
$aFilterAdd = $aRelations[$sKey]['filter'];
$sCmd = "{$sRelPluginPrefix}Module{$sRelModuleName}_get{$sRelEntityName}ItemsByJoinEntity";
if ($bUseFilter) {
$aFilterAdd = array_merge($aFilterAdd, $aArgs[0]);
}
$mCmdArgs = array($sEntityJoin, $sKeyJoin, $sRelationKey, $iPrimaryKeyValue, $aFilterAdd);
break;
default:
break;
}
/**
* Если связь уже загруженна, то возвращаем результат
*/
if (!$bUseFilter and array_key_exists($sKey, $this->aRelationsData)) {
return $this->aRelationsData[$sKey];
}
// Нужно ли учитывать дополнительный фильтр
$res = Engine::GetInstance()->_CallModule($sCmd, $mCmdArgs);
// Сохраняем данные только в случае "чистой" выборки
if (!$bUseFilter) {
$this->aRelationsData[$sKey] = $res;
}
// Создаём объекты-обёртки для связей MANY_TO_MANY
if ($sRelationType == self::RELATION_TYPE_MANY_TO_MANY) {
$this->_aManyToManyRelations[$sKey] = new ORMRelationManyToMany($res);
}
return $res;
}
//.........这里部分代码省略.........