$fields = $object['Field']; ?> <tr> <td><?php echo $object['created_at']; ?> </td> <td><strong><?php echo ModificationTable::getName($object); ?> </strong></td> <td><em><?php echo ModificationTable::getType($object); ?> </em></td> <?php if (!$object['is_delete'] && count($fields) && ($field = array_shift($fields))) { ?> <?php $field['Modification'] = $object; ?> <td> <strong><?php echo ModificationFieldTable::getFieldNameForDisplay($field); ?> </strong> (<?php
public function getName() { return ModificationTable::getName($this); }
static function safeRevertByUserId($userId) { //get all user modifications grouped by object $modifications = ModificationTable::getByUserIdGroupedByObjectQuery($userId)->leftJoin('m.Field f')->execute(); foreach ($modifications as $m) { $q = LsDoctrineQuery::create()->from('Modification m')->where('m.object_model = ? AND m.object_id = ?', array($m->object_model, $m->object_id)); //if nobody else modified this object and it exists, we delete it and continue if ($object = $m->getObject()) { if (!$q->addWhere('m.user_id <> ?', $userId)->count()) { $object->delete(); } } else { //if user deleted this object, we recreate it if ($delete = $q->addWhere('m.user_id = ? AND m.is_delete = ?', array($userId, true))->execute()) { $object = $m->getObject(true); foreach ($delete->Field as $f) { $fieldName = $f->field_name; $object->{$fieldName} = $f->old_value; } } } if ($object) { //get all fields user modified $modifiedFields = array(); foreach ($m->Field as $f) { $modifiedFields[] = $f->field_name; } $modifiedFields = array_unique($modifiedFields); foreach ($modifiedFields as $fieldName) { //if user is last to modify, we revert field to last value entered by another user, or null $q = LsDoctrineQuery::create()->from('Modification m')->leftJoin('m.Field f')->where('m.user_id <> ?', $userId)->addWhere('f.field_name = ?', $fielName)->orderBy('m.created_at DESC'); if ($m = $q->fetchOne()) { $object->{$fieldName} = $m->Field->new_value; } else { $object->{$fieldName} = null; } } } } }