Permalink
Browse files

ETrashBinBehavior v.0.2

  • Loading branch information...
1 parent f11aa67 commit f590e8dfd51f0152ed2f3784ed13290a05eac96b @slavcodev slavcodev committed Sep 3, 2010
Showing with 163 additions and 130 deletions.
  1. +124 −96 ETrashBinBehavior.php
  2. +5 −2 changelog.txt
  3. +34 −32 readme_ru.txt
View
@@ -2,107 +2,135 @@
/**
* ETrashBinBehavior class file.
*
- * Trash bin behavior for models.
- *
* @author Veaceslav Medvedev <slavcopost@gmail.com>
- * @link http://code.google.com/p/yiiext/source/browse/#svn/trunk/app/extensions/ETrashBinBehavior
- *
- * @version 0.1
+ * @link http://code.google.com/p/yiiext/
+ * @license http://www.opensource.org/licenses/mit-license.php
*/
-class ETrashBinBehavior extends CActiveRecordBehavior {
- /**
- * @var string The name of the table where data stored.
- * Required to set on init behavior. No defaults.
- */
- public $trashFlagField = NULL;
- /**
- * @var mixed The value to set for removed model.
- * Default is 1.
- */
- public $removedFlag = 1;
- /**
- * @var mixed The value to set for restored model.
- * Default is 0.
- */
- public $restoredFlag = 0;
- /**
- * @var bool If except removed model in find results.
- * Default is FALSE
- */
- public $findRemoved = FALSE;
-
- protected $withRemoved = FALSE;
-
- public function attach($owner) {
- // Check required var trashFlagField
- if (!is_string($this->trashFlagField) || empty($this->trashFlagField)) {
- throw new CException(Yii::t('yiiext', 'Required var "{class}.{property}" not set.',
- array('{class}' => get_class($this), '{property}' => 'trashFlagField')));
- }
- parent::attach($owner);
- }
-
- /**
- * Remove model in trash bin.
- *
- * @return CActiveRecord
- */
- public function remove() {
- $this->getOwner()->{$this->trashFlagField} = $this->removedFlag;
- return $this->getOwner();
- }
- /**
- * Restore removed model from trash bin.
- *
- * @return CActiveRecord
- */
- public function restore() {
- $this->getOwner()->{$this->trashFlagField} = $this->restoredFlag;
- return $this->getOwner();
- }
+/**
+ * ETrashBinBehavior allows you to remove the model in the trash bin and restore them when need.
+ *
+ * @author Veaceslav Medvedev <slavcopost@gmail.com>
+ * @version 0.2
+ * @package yiiext.behaviors.model.trashBin
+ * @since 1.1.4
+ */
+class ETrashBinBehavior extends CActiveRecordBehavior
+{
+ /**
+ * @var string The name of the table where data stored.
+ * Required to set on init behavior.
+ * No defaults. Example: "isRemoved".
+ */
+ public $trashFlagField;
+ /**
+ * @var mixed The value to set for removed model.
+ * Default is 1.
+ */
+ public $removedFlag=1;
+ /**
+ * @var mixed The value to set for restored model.
+ * Default is 0.
+ */
+ public $restoredFlag=0;
+ /**
+ * @var bool If except removed model in find results.
+ * Default is false.
+ */
+ public $findRemoved=false;
+ /**
+ * @param bool The flag to disable filter removed models in the next query.
+ */
+ protected $_withRemoved=false;
- /**
- * Check if model is removed in trash bin.
- *
- * @return bool
- */
- public function isRemoved() {
- return $this->getOwner()->{$this->trashFlagField} == $this->removedFlag;
- }
+ public function attach($owner)
+ {
+ // Check required var trashFlagField
+ if(!is_string($this->trashFlagField) || empty($this->trashFlagField))
+ {
+ throw new CException(Yii::t('yiiext','Required var "{class}.{property}" not set.',
+ array('{class}'=>get_class($this),'{property}'=>'trashFlagField')));
+ }
- /**
- * Disable excepting removed models for next search.
- *
- * @return CActiveRecord
- */
- public function withRemoved() {
- $this->withRemoved = TRUE;
- return $this->getOwner();
- }
+ parent::attach($owner);
+ }
+ /**
+ * Set value for trash field.
+ *
+ * @param mixed Value for trash field.
+ * @return CActiveRecord
+ */
+ public function setTrashFlag($value)
+ {
+ $owner=$this->getOwner();
+ $owner->{$this->trashFlagField}=$value;
+
+ return $owner;
+ }
+ /**
+ * Remove model in trash bin.
+ *
+ * @return CActiveRecord
+ */
+ public function remove()
+ {
+ return $this->setTrashFlag($this->removedFlag);
+ }
+ /**
+ * Restore removed model from trash bin.
+ *
+ * @return CActiveRecord
+ */
+ public function restore()
+ {
+ return $this->setTrashFlag($this->restoredFlag);
+ }
+ /**
+ * Check if model is removed in trash bin.
+ *
+ * @return bool
+ */
+ public function getIsRemoved()
+ {
+ return $this->getOwner()->{$this->trashFlagField}==$this->removedFlag;
+ }
+ /**
+ * Disable excepting removed models for next search.
+ *
+ * @return CActiveRecord
+ */
+ public function withRemoved()
+ {
+ $this->_withRemoved=true;
+ return $this->getOwner();
+ }
+ /**
+ * Add condition to query for filter removed models.
+ *
+ * @return CActiveRecord
+ * @since 1.1.4
+ */
+ public function filterRemoved()
+ {
+ $owner=$this->getOwner();
+ $criteria=$owner->getDbCriteria();
+
+ $criteria->addCondition($this->trashFlagField.'!='.CDbCriteria::PARAM_PREFIX.CDbCriteria::$paramCount);
+ $criteria->params[CDbCriteria::PARAM_PREFIX.CDbCriteria::$paramCount++]=$this->removedFlag;
- /**
- * Add condition to query for filter removed models.
- *
- * @return CActiveRecord
- */
- public function filterRemoved() {
- $this->getOwner()
- ->getDbCriteria()
- ->addCondition($this->trashFlagField . ' != "' . $this->removedFlag . '"');
- return $this->getOwner();
- }
+ return $owner;
+ }
+ /**
+ * Add condition before find, for except removed models.
+ *
+ * @param CEvent
+ */
+ public function beforeFind(CEvent $event)
+ {
+ if($this->getEnabled() && !$this->findRemoved && !$this->_withRemoved)
+ $this->filterRemoved();
- /**
- * Add condition before find, for except removed models.
- *
- * @param CEvent
- */
- public function beforeFind(CEvent $event) {
- if ($this->getEnabled() && !$this->findRemoved && !$this->withRemoved) {
- $this->filterRemoved();
- }
- $this->withRemoved = FALSE;
- parent::beforeFind($event);
- }
+ $this->_withRemoved=false;
+ parent::beforeFind($event);
+ }
}
View
@@ -1,4 +1,7 @@
-NEXT
+Require framework version 1.1.4
+
+0.2
+[*] Change method isRemoved() to getIsRemoved()
[+] Add method filterRemoved() for except finding removed models.
[+] Add property $findRemoved to enable or disable find removed models.
[+] Unit tests.
@@ -7,4 +10,4 @@ NEXT
[*] New naming conventions.
0.1
-[+] Initial public release.
+[+] Initial public release.
View
@@ -8,30 +8,32 @@ CTrashBinBehavior
### Подготовка модели
В модели должен быть выделен атрибут для статуса удаления.
+Например: "isRemoved"
### Подключить поведение к модели
~~~
[php]
-function behaviors() {
- return array(
- 'trash' => array(
- 'class' => 'ext.yiiext.behaviors.model.trashBin.ETrashBinBehavior',
- // Имя столбца где хранится статус удаления (обязательное свойство)
- 'trashFlagField' => 'trash',
- // Значение которое устанавливается при удалении в поле $trashFlagField
- // По умолчанию 1
- 'removedFlag' => '1',
- // Значение которое устанавливается при восстановлении в поле $trashFlagField
- // По умолчанию 0
- 'restoredFlag' => '0',
- )
- );
+function behaviors()
+{
+ return array(
+ 'trash'=>array(
+ 'class'=>'ext.yiiext.behaviors.model.trashBin.ETrashBinBehavior',
+ // Имя столбца где хранится статус удаления (обязательное свойство)
+ 'trashFlagField'=>'isRemoved',
+ // Значение которое устанавливается при удалении в поле $trashFlagField
+ // По умолчанию 1
+ 'removedFlag'=>1,
+ // Значение которое устанавливается при восстановлении в поле $trashFlagField
+ // По умолчанию 0
+ 'restoredFlag'=>0,
+ ),
+ );
}
~~~
### Минимальные требования
-[Yii Framework 1.0.12](http://www.yiiframework.com/)
+[Yii Framework 1.1.4](http://www.yiiframework.com/)
Методы
------
@@ -41,7 +43,7 @@ function behaviors() {
~~~
[php]
-$user = User::model()->findByPk(1);
+$user=User::model()->findByPk(1);
$user->remove();
~~~
@@ -50,41 +52,41 @@ $user->remove();
~~~
[php]
-// Так как при поиске удаленные модели игнорируются,
-// нужно на время поиска выключить поведение
+// Так как при включенном поведении удаленные модели игнорируются,
+// нужно включить поиск удаленных моделей
+User::model()->withRemoved();
+// или на время поиска выключить поведение
User::model()->disableBehavior('trash');
-$user = User::model()->findByPk(1);
+$user=User::model()->findByPk(1);
$user->restore();
-
-// Включаем снова поведение.
+// Включаем снова поведение если выключали.
User::model()->enableBehavior('trash');
~~~
-### isRemoved()
-Проверяем удалена ли модель.
+### getIsRemoved()
+Проверяем удалена ли модель в корзину.
~~~
[php]
-User::model()->disableBehavior('trash');
-$users = User::model()->findAll();
-foreach ($users as $user) {
- echo $user->isRemoved() ? 'status=removed' : 'status=normal';
+$user1=User::model()->withRemoved()->findByPk(1);
+echo $user1->getIsRemoved() ? 'status=removed' : 'status=normal';
+$user2=User::model()->withRemoved()->findByPk(2);
+echo $user2->isRemoved ? 'status=removed' : 'status=normal';
}
-User::model()->enableBehavior('trash');
~~~
### withRemoved()
-Отключаем исключения удаленных записей из поиска.
+Включаем поиск удаленных записей только при следующем запросе.
~~~
[php]
-$users = User::model()->withRemoved()->findAll();
+$users=User::model()->withRemoved()->findAll();
~~~
Подсказка
---------
При включенном поведении при поиске игнорируются модели со статусом удаления,
-поэтому если нужно найти модели включая модели из корзины, нужно выключить
-на время поиска поведение.
+поэтому если нужно найти модели включая модели из корзины, нужно включить поиск удаленных моделей
+или выключить на время поиска поведение.

0 comments on commit f590e8d

Please sign in to comment.