/** * @see sfTask */ protected function executeTask($env, $arguments = array(), $options = array()) { $tasks = PcTaskPeer::doSelect(new Criteria()); foreach ($tasks as $task) { $contextsBlob = $task->getContexts(); if (strlen($contextsBlob) > 0) { $contextIds = explode(',', $contextsBlob); foreach ($contextIds as $contextId) { // checking the context exists $context = PcUsersContextsPeer::retrieveByPK($contextId); if (is_object($context)) { $tasksContextsEntry = new PcTasksContexts(); $tasksContextsEntry->setTaskId($task->getId())->setUsersContextsId($contextId)->save(); } } } } echo "\nDone migration to 1.6.7 \n\n"; }
/** * Returns an asspciative array with these keys: * overdue - boolean - indicating whether the user has got some overdue task * today - boolean - indicating whether the user has got some task for today * tomorrow - boolean - indicating whether the user has got some task for tomorrow * * @return array of booleans */ public function getStatsForTasksWithDueDate() { $ret = array('overdue' => false, 'today' => false, 'tomorrow' => false); $c = new Criteria(); $c->addJoin(PcTaskPeer::LIST_ID, PcListPeer::ID, Criteria::INNER_JOIN); $c->add(PcTaskPeer::IS_COMPLETED, 0, Criteria::EQUAL); $c->add(PcTaskPeer::DUE_DATE, NULL, Criteria::ISNOTNULL); $c->add(PcListPeer::CREATOR_ID, $this->getId(), Criteria::EQUAL); $c->addAscendingOrderByColumn(PcTaskPeer::DUE_DATE); $tasks = PcTaskPeer::doSelect($c); foreach ($tasks as $task) { if ($ret['overdue'] == false && $task->isOverdue()) { $ret['overdue'] = true; } else { if ($ret['today'] == false && $task->isToday()) { $ret['today'] = true; } else { if ($task->isTomorrow()) { $ret['tomorrow'] = true; break; } } } if (!$ret['overdue'] && !$ret['today'] && !$ret['tomorrow']) { // this means there are not tasks overdue/for today/for tomorrow, that is // all of them have got a due date further than tomorrow. break; } } return $ret; }
/** * @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; }
/** * Gets an array of PcTask objects which contain a foreign key that references this object. * * If this collection has already been initialized with an identical Criteria, it returns the collection. * Otherwise if this PcRepetition has previously been saved, it will retrieve * related PcTasks from storage. If this PcRepetition is new, it will return * an empty collection or the current collection, the criteria is ignored on a new object. * * @param PropelPDO $con * @param Criteria $criteria * @return array PcTask[] * @throws PropelException */ public function getPcTasks($criteria = null, PropelPDO $con = null) { if ($criteria === null) { $criteria = new Criteria(PcRepetitionPeer::DATABASE_NAME); } elseif ($criteria instanceof Criteria) { $criteria = clone $criteria; } if ($this->collPcTasks === null) { if ($this->isNew()) { $this->collPcTasks = array(); } else { $criteria->add(PcTaskPeer::REPETITION_ID, $this->id); PcTaskPeer::addSelectColumns($criteria); $this->collPcTasks = PcTaskPeer::doSelect($criteria, $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 the collection. $criteria->add(PcTaskPeer::REPETITION_ID, $this->id); PcTaskPeer::addSelectColumns($criteria); if (!isset($this->lastPcTaskCriteria) || !$this->lastPcTaskCriteria->equals($criteria)) { $this->collPcTasks = PcTaskPeer::doSelect($criteria, $con); } } } $this->lastPcTaskCriteria = $criteria; return $this->collPcTasks; }
/** * 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(PcTaskPeer::DATABASE_NAME, Propel::CONNECTION_READ); } $objs = null; if (empty($pks)) { $objs = array(); } else { $criteria = new Criteria(PcTaskPeer::DATABASE_NAME); $criteria->add(PcTaskPeer::ID, $pks, Criteria::IN); $objs = PcTaskPeer::doSelect($criteria, $con); } return $objs; }
/** * Overrides the delete method to delete the associated tasks and the sharings * * @see parent::delete() * @param PropelPDO Optional Connection object. * @return PcList */ public function delete(PropelPDO $con = null) { // deleting all the tasks related to the list $tasksCriteria = new Criteria(); $tasksCriteria->add(PcTaskPeer::LIST_ID, $this->getId(), Criteria::EQUAL); $tasks = PcTaskPeer::doSelect($tasksCriteria); foreach ($tasks as $task) { $task->delete(); } // deleting all the sharing related to the list $sharingsCriteria = new Criteria(); $sharingsCriteria->add(PcTaskPeer::LIST_ID, $this->getId(), Criteria::EQUAL); $sharings = PcTaskPeer::doSelect($sharingsCriteria); foreach ($sharings as $sharing) { $sharing->delete(); } $this->clearRelevantCache(); $con = Propel::getConnection(); $ret = null; try { $con->beginTransaction(); $this->copyObjectToTrashBin(); $ret = parent::delete($con); $con->commit(); } catch (Exception $e) { $con->rollback(); throw $e; } return $ret; }
/** * Returns tasks scheduled for that day and the next 6 (including multiple occurrences of recurrent tasks) * * @param string $date - in the format yyyy-mm-dd (e.g.: 2011-12-25) * @return array|null - array of PcTask */ public static function getTasksByDate($date) { if ($date == null || strlen($date) <= 0) { return null; } $date = trim($date); $tasksToReturn = array(); $c = new Criteria(); $c->add(PcTaskPeer::DUE_DATE, null, Criteria::ISNOTNULL); // N.B.: the following criteria would be a mistake because it would take out recurrent tasks // $c->addAnd(PcTaskPeer::DUE_DATE, date('Y-m-d', strtotime($date)), Criteria::GREATER_EQUAL); $c->add(PcTaskPeer::IS_COMPLETED, 0); $c->addJoin(PcTaskPeer::LIST_ID, PcListPeer::ID); $c->add(PcListPeer::CREATOR_ID, PcUserPeer::getLoggedInUser()->getId()); $c->addAscendingOrderByColumn(PcTaskPeer::DUE_TIME); $tasksWithDueDate = PcTaskPeer::doSelect($c); $tmpDate = $date; for ($i = 0; $i < 7; $i++) { foreach ($tasksWithDueDate as $taskWithDueDate) { if ($taskWithDueDate->isOnThisDay($tmpDate)) { $taskWithDueDate->extra = date('D', strtotime($tmpDate)); $tasksToReturn[] = clone $taskWithDueDate; } } $tmpDate = date('Y-m-d', strtotime("+1 day", strtotime($tmpDate))); } return $tasksToReturn; }