78 array(
'invalidOids' => array($request->getValue(
'insertOid')))));
82 if (!$referenceOid && !$isOrderBottom) {
84 array(
'invalidOids' => array($request->getValue(
'referenceOid')))));
90 if ($request->getAction() ==
'moveBefore') {
92 if (!$isOrderBottom && $insertOid->getType() != $referenceOid->getType()) {
97 $mapper = $persistenceFacade->getMapper($insertOid->getType());
98 if (!$mapper->isSortable()) {
104 if ($request->getAction() ==
'insertBefore') {
109 array(
'invalidOids' => array($request->getValue(
'containerOid')))));
114 $mapper = $persistenceFacade->getMapper($containerOid->getType());
115 $relationDesc = $mapper->getRelation($request->getValue(
'role'));
116 if (!$relationDesc) {
121 $otherMapper = $relationDesc->getOtherMapper();
122 if (!$otherMapper->isSortable($relationDesc->getThisRole())) {
139 $transaction->begin();
140 if ($request->getAction() ==
'moveBefore') {
143 else if ($request->getAction() ==
'insertBefore') {
146 $transaction->commit();
148 $response->setAction(
'ok');
162 $insertObject = $persistenceFacade->load($insertOid);
163 $referenceObject = $isOrderBottom ?
new NullNode() : $persistenceFacade->load($referenceOid);
166 $objectMap = array(
'insertOid' => $insertObject,
167 'referenceOid' => $referenceObject);
170 $mapper = $insertObject->getMapper();
171 $sortkeyDef = $mapper->getSortkey();
172 $sortkey = $sortkeyDef[
'sortFieldName'];
175 $referenceValue = $isOrderBottom ? self::UNBOUND : $this->
getSortkeyValue($referenceObject, $sortkey);
180 if ($referenceValue == self::UNBOUND || $referenceValue > $insertValue) {
186 $type = $insertObject->getType();
196 $objects[] = $insertObject;
199 $count=
sizeof($objects);
201 for ($i=$count-1; $i>0; $i--) {
202 $objects[$i]->setValue($sortkey, $this->
getSortkeyValue($objects[$i-1], $sortkey));
204 $objects[0]->setValue($sortkey, $lastValue);
207 array_unshift($objects, $referenceObject);
208 array_unshift($objects, $insertObject);
210 $count=
sizeof($objects);
212 for ($i=0; $i<$count-1; $i++) {
213 $objects[$i]->setValue($sortkey, $this->
getSortkeyValue($objects[$i+1], $sortkey));
215 $objects[$count-1]->setValue($sortkey, $firstValue);
232 $insertObject = $persistenceFacade->load($insertOid);
233 $referenceObject = $isOrderBottom ?
new NullNode() : $persistenceFacade->load($referenceOid);
234 $containerObject = $persistenceFacade->load($containerOid, 1);
237 $objectMap = array(
'insertOid' => $insertObject,
238 'referenceOid' => $referenceObject,
239 'containerOid' => $containerObject);
241 $role = $request->getValue(
'role');
243 $nodeExists =
sizeof($containerObject->getChildrenEx($insertOid)) == 1;
245 $containerObject->addNode($insertObject, $role);
248 $children = $containerObject->getChildrenEx(null, $role);
249 $newChildren = array();
250 foreach ($children as $curChild) {
251 $oid = $curChild->getOID();
252 if ($oid == $referenceOid) {
253 $newChildren[] = $insertObject;
255 if ($oid != $insertOid) {
256 $newChildren[] = $curChild;
259 if ($isOrderBottom) {
260 $newChildren[] = $insertObject;
262 $containerObject->setNodeOrder($newChildren);
275 $tpl1 = $query->getObjectTemplate($type);
276 $tpl2 = $query->getObjectTemplate($type);
277 if ($lowerValue != self::UNBOUND) {
280 if ($upperValue != self::UNBOUND) {
296 $invalidOids = array();
297 foreach ($objectMap as $parameterName => $object) {
298 if ($object == null) {
299 $invalidOids[] = $parameterName;
302 if (
sizeof($invalidOids) > 0) {
304 array(
'invalidOids' => $invalidOids)));
316 return ($request->getValue(
'referenceOid') == self::ORDER_BOTTOM);
327 $value = $object->getValue($valueName);
328 if ($value == null) {
329 $value = $object->getOID()->getFirstId();
getRequest()
Get the Request instance.
Controller is the base class of all controllers.
SortController is used to change the order of nodes.
doMoveBefore()
Execute the moveBefore action.
ObjectQuery implements a template based object query.
loadObjectsInSortkeyRange($type, $sortkeyName, $lowerValue, $upperValue)
Load all objects between two sortkey values.
static asValue($operator, $value)
Factory method for constructing a Critera that may be used as value on a PersistentObject's attribute...
NullNode is an implementation of the NullObject pattern, It inherits all functionality from Node (act...
static parse($oid)
Parse a serialized object id string into an ObjectId instance.
doInsertBefore()
Execute the insertBefore action.
checkObjects($objectMap)
Check if all objects in the given array are not null and add an OID_INVALID error to the response...
isOrderBotton($request)
Check if the node should be moved to the bottom of the list.
static get($code, $data=null)
Factory method for retrieving a predefind error instance.
getSortkeyValue($object, $valueName)
Get the sortkey value of an object.
getResponse()
Get the Response instance.
getPersistenceFacade()
Get the PersistenceFacade instance.