/** * @return string (XML format) */ public function getXmlString() { $dump = '<?xml version="1.0" encoding="UTF-8" ?>' . "\n"; $dump .= '<backup version="1" title="Plancake backup" link="http://www.plancake.com">' . "\n"; $dump .= "\t<plancake_tasks>\n"; // This Ids are to make the dump more portable: // tasks will be related to tags and lists via these "virtual" ids $tagLocalIds = array(); $listLocalIds = array(); $c = new Criteria(); $c->add(PcUsersContextsPeer::USER_ID, $this->user->getId(), Criteria::EQUAL); $c->addDescendingOrderByColumn(PcUsersContextsPeer::SORT_ORDER); $c->addDescendingOrderByColumn(PcUsersContextsPeer::ID); $tags = PcUsersContextsPeer::doSelect($c); $dump .= "\t\t<tags>\n"; $localId = 1; foreach ($tags as $tag) { $dump .= "\t\t\t<tag>\n"; $dump .= "\t\t\t\t<localId>{$localId}</localId>\n"; $dump .= "\t\t\t\t<id>{$tag->getId()}</id>\n"; $dump .= "\t\t\t\t<name><![CDATA[{$tag->getContext()}]]></name>\n"; $dump .= "\t\t\t\t<sortOrder>{$tag->getSortOrder()}</sortOrder>\n"; $dump .= "\t\t\t\t<updatedAt>{$tag->getUpdatedAt()}</updatedAt>\n"; $dump .= "\t\t\t\t<createdAt>{$tag->getCreatedAt()}</createdAt>\n"; $dump .= "\t\t\t</tag>\n"; $tagLocalIds[$tag->getId()] = $localId; $localId++; } $dump .= "\t\t</tags>\n\n"; $c = new Criteria(); $c->add(PcListPeer::CREATOR_ID, $this->user->getId(), Criteria::EQUAL); $c->addDescendingOrderByColumn(PcListPeer::SORT_ORDER); $c->addDescendingOrderByColumn(PcListPeer::ID); $lists = PcListPeer::doSelect($c); $dump .= "\t\t<lists>\n"; $localId = 1; foreach ($lists as $list) { $listIsInbox = $list->getIsInbox() ? 1 : 0; $listIsTodo = $list->getIsTodo() ? 1 : 0; $listIsHeader = $list->getIsHeader() ? 1 : 0; $dump .= "\t\t\t<list>\n"; $dump .= "\t\t\t\t<localId>{$localId}</localId>\n"; $dump .= "\t\t\t\t<id>{$list->getId()}</id>\n"; $dump .= "\t\t\t\t<name><![CDATA[{$list->getTitle()}]]></name>\n"; $dump .= "\t\t\t\t<sortOrder>{$list->getSortOrder()}</sortOrder>\n"; $dump .= "\t\t\t\t<isInbox>{$listIsInbox}</isInbox>\n"; $dump .= "\t\t\t\t<isTodo>{$listIsTodo}</isTodo>\n"; $dump .= "\t\t\t\t<isHeader>{$listIsHeader}</isHeader>\n"; $dump .= "\t\t\t\t<updatedAt>{$list->getUpdatedAt()}</updatedAt>\n"; $dump .= "\t\t\t\t<createdAt>{$list->getCreatedAt()}</createdAt>\n"; $dump .= "\t\t\t</list>\n"; $listLocalIds[$list->getId()] = $localId; $localId++; } $dump .= "\t\t</lists>\n"; $tasks = $this->user->getTasksByMultipleCriteria(); $c = new Criteria(); $c->addJoin(PcTaskPeer::LIST_ID, PcListPeer::ID, Criteria::INNER_JOIN); $c->add(PcListPeer::CREATOR_ID, $this->user->getId()); $c->addDescendingOrderByColumn(PcTaskPeer::LIST_ID); $c->addAscendingOrderByColumn(PcTaskPeer::SORT_ORDER); $c->addAscendingOrderByColumn(PcTaskPeer::ID); $tasks = PcTaskPeer::doSelect($c); $dump .= "\t\t<tasks>\n"; $localId = 1; foreach ($tasks as $task) { $taskIsStarred = $task->getIsStarred() ? 1 : 0; $taskIsCompleted = $task->getIsCompleted() ? 1 : 0; $taskIsHeader = $task->getIsHeader() ? 1 : 0; $taskIsFromSystem = $task->getIsFromSystem() ? 1 : 0; $taskListId = $task->getListId(); $taskListLocalId = $listLocalIds[$task->getListId()]; $taskTagIds = $task->getContexts(); // comma separated list of tagIds $taskTagIdsArray = PcUtils::explodeWithEmptyInputDetection(',', $taskTagIds); $taskTagLocalIdsArray = array(); foreach ($taskTagIdsArray as $id) { $taskTagLocalIdsArray[] = $tagLocalIds[$id]; } $taskTagLocalIds = implode(',', $taskTagLocalIdsArray); $dump .= "\t\t\t<task>\n"; $dump .= "\t\t\t\t<id>{$task->getId()}</id>\n"; $dump .= "\t\t\t\t<localId>{$localId}</localId>\n"; $dump .= "\t\t\t\t<listName><![CDATA[{$task->getList()->getTitle()}]]></listName>\n"; $dump .= "\t\t\t\t<listLocalId>{$taskListLocalId}</listLocalId>\n"; $dump .= "\t\t\t\t<description><![CDATA[{$task->getDescription()}]]></description>\n"; $dump .= "\t\t\t\t<sortOrder>{$list->getSortOrder()}</sortOrder>\n"; $dump .= "\t\t\t\t<dueDate>{$task->getDueDate()}</dueDate>\n"; $dump .= "\t\t\t\t<dueTime>{$task->getDueTime()}</dueTime>\n"; $dump .= "\t\t\t\t<repetitionId>{$task->getRepetitionId()}</repetitionId>\n"; $dump .= "\t\t\t\t<repetitionParam>{$task->getRepetitionParam()}</repetitionParam>\n"; $dump .= "\t\t\t\t<isStarred>{$taskIsStarred}</isStarred>\n"; $dump .= "\t\t\t\t<isCompleted>{$taskIsCompleted}</isCompleted>\n"; $dump .= "\t\t\t\t<isHeader>{$taskIsHeader}</isHeader>\n"; $dump .= "\t\t\t\t<isFromSystem>{$taskIsFromSystem}</isFromSystem>\n"; $dump .= "\t\t\t\t<tagLocalIds>{$taskTagLocalIds}</tagLocalIds>\n"; $dump .= "\t\t\t\t<note><![CDATA[{$task->getNote()}]]></note>\n"; $dump .= "\t\t\t\t<completedAt>{$task->getCompletedAt()}</completedAt>\n"; $dump .= "\t\t\t\t<updatedAt>{$task->getUpdatedAt()}</updatedAt>\n"; $dump .= "\t\t\t\t<createdAt>{$task->getCreatedAt()}</createdAt>\n"; $dump .= "\t\t\t</task>\n"; $localId++; } $dump .= "\t\t</tasks>\n"; $dump .= "\t</plancake_tasks>\n"; $dump .= "\t<plancake_notes>\n"; $c = new Criteria(); $c->add(PcNotePeer::CREATOR_ID, $this->user->getId(), Criteria::EQUAL); $c->addDescendingOrderByColumn(PcNotePeer::ID); $notes = PcNotePeer::doSelect($c); $dump .= "\t\t<notes>\n"; $localId = 1; foreach ($notes as $note) { $dump .= "\t\t\t<note>\n"; $dump .= "\t\t\t\t<localId>{$localId}</localId>\n"; $dump .= "\t\t\t\t<id>{$note->getId()}</id>\n"; $dump .= "\t\t\t\t<title><![CDATA[{$note->getTitle()}]]></title>\n"; $dump .= "\t\t\t\t<content><![CDATA[{$note->getContent()}]]></content>\n"; $dump .= "\t\t\t\t<updatedAt>{$note->getUpdatedAt()}</updatedAt>\n"; $dump .= "\t\t\t\t<createdAt>{$note->getCreatedAt()}</createdAt>\n"; $dump .= "\t\t\t</note>\n"; $localId++; } $dump .= "\t\t</notes>\n"; $dump .= "\t</plancake_notes>"; $dump .= "\n" . '</backup>'; return $dump; }
/** * * @return int */ public function getNotesCount() { $c = new Criteria(); $c->add(PcNotePeer::CREATOR_ID, $this->getId()); return PcNotePeer::doCount($c); }
/** * Retrieve multiple objects by pkey. * * @param array $pks List of primary keys * @param PropelPDO $con the connection to use * @throws PropelException Any exceptions caught during processing will be * rethrown wrapped into a PropelException. */ public static function retrieveByPKs($pks, PropelPDO $con = null) { if ($con === null) { $con = Propel::getConnection(PcNotePeer::DATABASE_NAME, Propel::CONNECTION_READ); } $objs = null; if (empty($pks)) { $objs = array(); } else { $criteria = new Criteria(PcNotePeer::DATABASE_NAME); $criteria->add(PcNotePeer::ID, $pks, Criteria::IN); $objs = PcNotePeer::doSelect($criteria, $con); } return $objs; }
public function executeDelete(sfWebRequest $request) { $noteLabel = $request->getParameter('noteLabel'); $noteLabelInfo = explode('_', $noteLabel); $note = PcNotePeer::retrieveByPk($noteLabelInfo[1]); PcUtils::checkLoggedInUserPermission($note->getCreator()); $note->delete(); if ($request->isXmlHttpRequest()) { return sfView::NONE; } }
/** * Returns the number of related PcNote objects. * * @param Criteria $criteria * @param boolean $distinct * @param PropelPDO $con * @return int Count of related PcNote objects. * @throws PropelException */ public function countPcNotes(Criteria $criteria = null, $distinct = false, PropelPDO $con = null) { if ($criteria === null) { $criteria = new Criteria(PcUserPeer::DATABASE_NAME); } else { $criteria = clone $criteria; } if ($distinct) { $criteria->setDistinct(); } $count = null; if ($this->collPcNotes === null) { if ($this->isNew()) { $count = 0; } else { $criteria->add(PcNotePeer::CREATOR_ID, $this->id); $count = PcNotePeer::doCount($criteria, false, $con); } } else { // criteria has no effect for a new object if (!$this->isNew()) { // the following code is to determine if a new query is // called for. If the criteria is the same as the last // one, just return count of the collection. $criteria->add(PcNotePeer::CREATOR_ID, $this->id); if (!isset($this->lastPcNoteCriteria) || !$this->lastPcNoteCriteria->equals($criteria)) { $count = PcNotePeer::doCount($criteria, false, $con); } else { $count = count($this->collPcNotes); } } else { $count = count($this->collPcNotes); } } return $count; }
/** * Populates the object using an array. * * This is particularly useful when populating an object from one of the * request arrays (e.g. $_POST). This method goes through the column * names, checking to see whether a matching key exists in populated * array. If so the setByName() method is called for that column. * * You can specify the key type of the array by additionally passing one * of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME, * BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM. * The default key type is the column's phpname (e.g. 'AuthorId') * * @param array $arr An array to populate the object from. * @param string $keyType The type of keys the array uses. * @return void */ public function fromArray($arr, $keyType = BasePeer::TYPE_PHPNAME) { $keys = PcNotePeer::getFieldNames($keyType); if (array_key_exists($keys[0], $arr)) { $this->setId($arr[$keys[0]]); } if (array_key_exists($keys[1], $arr)) { $this->setCreatorId($arr[$keys[1]]); } if (array_key_exists($keys[2], $arr)) { $this->setTitle($arr[$keys[2]]); } if (array_key_exists($keys[3], $arr)) { $this->setContent($arr[$keys[3]]); } if (array_key_exists($keys[4], $arr)) { $this->setUpdatedAt($arr[$keys[4]]); } if (array_key_exists($keys[5], $arr)) { $this->setCreatedAt($arr[$keys[5]]); } }
public function import($xml) { $originalMaxExecutionTime = ini_get('max_execution_time'); ini_set('max_execution_time', 120); proc_nice(1); $tagLocalIds = array(); $listLocalIds = array(); $newTagIds = array(); $newListIds = array(); $newTaskIds = array(); $newNoteIds = array(); $tags = $xml->plancake_tasks->tags->tag; foreach ($tags as $tag) { $isNewTag = false; $tagId = (int) $tag->id > 0 ? $tag->id : null; $tagLocalId = (int) $tag->localId; $tagName = (string) $tag->name; $tagSortOrder = (int) $tag->sortOrder; $tagObj = null; if ($tagId && !in_array($tagId, $newTagIds)) { $tagObj = PcUsersContextsPeer::retrieveByPK($tagId); } if ($tagObj) { if ($tagObj->getUserId() != $this->user->getId()) { die("Hacking attempt."); } } else { // tags are unique by name, thus // we check whether the tag is already in the instance // we are importing the dump to. $c = new Criteria(); $c->add(PcUsersContextsPeer::CONTEXT, $tagName); $tagObj = PcUsersContextsPeer::doSelectOne($c); if (!is_object($tagObj)) { $tagObj = new PcUsersContexts(); $isNewTag = true; } } $tagObj->setUserId($this->user->getId())->setContext($tagName)->setSortOrder($tagSortOrder)->save(); $tagLocalIds[$tagLocalId] = $tagObj->getId(); if ($isNewTag) { $newTagIds[] = $tagObj->getId(); } } $lists = $xml->plancake_tasks->lists->list; foreach ($lists as $list) { $isNewList = false; $listId = (int) $list->id > 0 ? $list->id : null; $listLocalId = (int) $list->localId; $listName = (string) $list->name; $listSortOrder = (int) $list->sortOrder; $listIsInbox = (int) $list->isInbox == 1 ? true : false; $listIsTodo = (int) $list->isTodo == 1 ? true : false; $listIsHeader = (int) $list->isHeader == 1 ? true : false; $listObj = null; if ($listId && !in_array($listId, $newListIds)) { $listObj = PcListPeer::retrieveByPK($listId); } if ($listObj) { if ($listObj->getCreatorId() != $this->user->getId()) { die("Hacking attempt."); } } else { if ($listIsInbox) { $listObj = $this->user->getInbox(); } else { if ($listIsTodo) { $listObj = $this->user->getTodo(); } else { $listObj = new PcList(); $isNewList = true; } } } $listObj->setCreatorId($this->user->getId())->setTitle($listName)->setSortOrder($listSortOrder)->setIsInbox($listIsInbox)->setIsTodo($listIsTodo)->setIsHeader($listIsHeader)->save(); $listLocalIds[$listLocalId] = $listObj->getId(); if ($isNewList) { $newListIds[] = $listObj->getId(); } } $tasks = $xml->plancake_tasks->tasks->task; foreach ($tasks as $task) { $isNewTask = false; $taskId = (int) $task->id > 0 ? $task->id : 0; $taskListLocalId = (int) $task->listLocalId; $taskDescription = (string) $task->description; $taskSortOrder = (int) $task->sortOrder; $taskDueDate = (string) $task->dueDate; $taskDueTime = strlen($task->dueTime) > 0 ? (int) $task->dueTime : ''; $taskRepetitionId = (int) $task->repetitionId; $taskRepetitionParam = (int) $task->repetitionParam; $taskIsStarred = (int) $task->isStarred == 1 ? true : false; $taskIsCompleted = (int) $task->isCompleted == 1 ? true : false; $taskIsHeader = (int) $task->isHeader == 1 ? true : false; $taskIsFromSystem = (int) $task->isFromSystem == 1 ? true : false; $taskTagLocalIds = (string) $task->tagLocalIds; $taskNote = (string) $task->note; $taskListId = $listLocalIds[$taskListLocalId]; $taskTagIdsArray = array(); $taskTagLocalIdsArray = PcUtils::explodeWithEmptyInputDetection(',', $taskTagLocalIds); foreach ($taskTagLocalIdsArray as $id) { $taskTagIdsArray[] = $tagLocalIds[$id]; } $taskTagIds = ''; if (count($taskTagIdsArray)) { $taskTagIds = implode(',', $taskTagIdsArray); } $taskFromDb = null; if ($taskId && !in_array($taskId, $newTaskIds)) { $taskFromDb = PcTaskPeer::retrieveByPK($taskId); } if (!is_object($taskFromDb)) { // if the task doesn't exist (even if the dump contains a taskId) // we want to add it. $taskId = 0; $isNewTask = true; } $newTask = PcTaskPeer::createOrEdit($taskDescription, $taskListId, $taskId, $taskTagIds, $taskIsHeader, $taskNote, $taskDueDate, $taskDueTime, $taskIsStarred, $taskRepetitionId, $taskRepetitionParam, 0, '', 'd-m-Y', false); if ($taskIsCompleted) { $newTask->setIsCompleted(1); $newTask->setCompletedAt($task->completedAt); $newTask->save(); } if ($isNewTask) { $newTaskIds[] = $newTask->getId(); } if (!$taskId) { $newTask->deleteDirtyEntry(); } } $notes = $xml->plancake_notes->notes->note; foreach ($notes as $note) { $isNewNote = false; $noteId = (int) $note->id > 0 ? $note->id : null; $noteTitle = (string) $note->title; $noteContent = (string) $note->content; $noteObj = null; if ($noteId && !in_array($noteId, $newNoteIds)) { $noteObj = PcNotePeer::retrieveByPK($noteId); } if ($noteObj) { if ($noteObj->getCreatorId() != $this->user->getId()) { die("Hacking attempt."); } } else { $noteObj = new PcNote(); $isNewNote = true; } $noteObj->setCreatorId($this->user->getId())->setTitle($noteTitle)->setContent($noteContent)->save(); if ($isNewNote) { $newNoteIds[] = $noteObj->getId(); } } ini_set('max_execution_time', $originalMaxExecutionTime); }