/** * Return EditStory component based on GET or POST request. * * PARAMS * framenum Valid kanji id (frame number) * kanjiData Kanji data for kanji id * reviewMode True if called from the Review page * * POST requests to update the story for current user. * * character Current kanji (utf8) * chkPublic Public story * txtStory Story * * * @return * @param object $request */ public function execute($request) { if ($request->getMethod() !== coreRequest::POST) { // get user's story $story = StoriesPeer::getStory($this->getUser()->getUserId(), $this->framenum); if ($story) { $request->getParameterHolder()->add(array('txtStory' => $story->text, 'chkPublic' => $story->public)); } } else { $validator = new coreValidator($this->getActionName()); if ($validator->validate($request->getParameterHolder()->getAll())) { if ($request->hasParameter('doUpdate')) { $txtStory = trim($request->getParameter('txtStory', '')); $txtStory = strip_tags($txtStory); // delete empty story if (empty($txtStory)) { StoriesPeer::deleteStory($this->getUser()->getUserId(), $this->framenum); } else { StoriesPeer::updateStory($this->getUser()->getUserId(), $this->framenum, array('text' => $txtStory, 'public' => $request->hasParameter('chkPublic') ? 1 : 0)); } $request->setParameter('txtStory', $txtStory); } } } // set state $request->setParameter('framenum', $this->framenum); if (!$request->hasParameter('reviewMode')) { $this->isRestudyKanji = ReviewsPeer::isRestudyKanji($this->getUser()->getUserId(), $this->framenum); $this->isRelearnedKanji = LearnedKanjiPeer::hasKanji($this->getUser()->getUserId(), $this->framenum); } $this->formatted_story = StoriesPeer::getFormattedStory($request->getParameter('txtStory', ''), $this->kanjiData->keyword, true); return coreView::SUCCESS; }
public function execute($request) { $queryParams = $this->getUser()->getLocalPrefs()->syncRequestParams('mystorieslist', array(uiSelectPager::QUERY_ROWSPERPAGE => 10)); // pager $this->pager = new uiSelectPager(array('select' => StoriesPeer::getMyStoriesSelect($this->getUser()->getUserId()), 'internal_uri' => 'study/mystories', 'query_params' => array(uiSelectTable::QUERY_SORTCOLUMN => $request->getParameter(uiSelectTable::QUERY_SORTCOLUMN, 'framenum'), uiSelectTable::QUERY_SORTORDER => $request->getParameter(uiSelectTable::QUERY_SORTORDER, 1), uiSelectPager::QUERY_ROWSPERPAGE => $queryParams[uiSelectPager::QUERY_ROWSPERPAGE]), 'max_per_page' => $queryParams[uiSelectPager::QUERY_ROWSPERPAGE], 'page' => $request->getParameter(uiSelectPager::QUERY_PAGENUM, 1))); $this->pager->init(); // order by $order_by = array('framenum' => 'framenum ASC', 'keyword' => 'keyword ASC', 'lastedit' => 'updated_on DESC', 'votes' => 'stars DESC'); $sortkey = $request->getParameter('sort', 'lastedit'); $this->getController()->getActionInstance()->forward404Unless(!$sortkey || preg_match('/^[a-z]+$/', $sortkey)); $orderClause = isset($order_by[$sortkey]) ? $order_by[$sortkey] : $order_by['framenum']; // get row data $get_select = clone $this->pager->getSelect(); $get_select->order($orderClause); $rows = coreContext::getInstance()->getDatabase()->fetchAll($get_select); foreach ($rows as &$R) { $R['stars'] = $R['stars'] ? '<span class="star">' . $R['stars'] . '</span>' : '<span> </span>'; $R['kicks'] = $R['kicks'] ? '<span class="report">' . $R['kicks'] . '</span>' : '<span> </span>'; $R['story'] = StoriesPeer::getFormattedStory($R['story'], $R['keyword'], false); } $this->rows = $rows; return coreView::SUCCESS; }
/** * Return array of public stories for SharedStories component. * * Third parameter indicates which part of the shared stories selection to return: * - newest * - old (sorted by stars) * * @see study/SharedStoriesComponent * * @return array<array> */ public static function getPublicStories($framenum, $keyword, $bNewest) { coreToolkit::loadHelpers(array('Tag', 'Url', 'Links')); $select = self::getInstance()->select(array('stories.userid', 'username', 'stories.framenum', 'lastmodified' => 'DATE_FORMAT(updated_on,\'%e-%c-%Y\')', 'stories.text', 'stars', 'kicks'))->joinLeft('storiesscores', 'stories.framenum=storiesscores.framenum AND stories.userid=storiesscores.authorid')->join('users', 'users.userid=stories.userid')->where('stories.framenum=? AND public!=0', $framenum); if ($bNewest) { $select->where('updated_on >= DATE_ADD(CURDATE(),INTERVAL -1 MONTH)'); $select->order('updated_on DESC'); } else { $select->where('updated_on < DATE_ADD(CURDATE(),INTERVAL -1 MONTH)'); $select->order(array('stars DESC', 'updated_on DESC')); } //if (!$bNewest) { // echo $select;exit; //} $rows = self::$db->fetchAll($select); foreach ($rows as &$R) { // do not show 0's if (!$R['stars']) { $R['stars'] = ''; } if (!$R['kicks']) { $R['kicks'] = ''; } $R['text'] = StoriesPeer::getFormattedStory($R['text'], $keyword); $R['author'] = link_to_member($R['username']); } return $rows; }
/** * Ajax handler for Shared Stories component. * * uid & sid identify the story to vote/report/copy. * * Post: * * request "star": star story * "report": report story * "copy": copy story * uid User id of the Story's author * sid Story id (framenum) * * @return */ public function executeAjax($request) { if ($request->getMethod() === coreRequest::GET) { // reload component $framenum = $request->getParameter('framenum', false); if (!BaseValidators::validateInteger($framenum)) { throw new rtkAjaxException('Bad request.'); } $kanjiData = (object) KanjisPeer::getKanjiById($framenum); return $this->renderComponent('study', 'SharedStories', array('framenum' => $framenum, 'kanjiData' => $kanjiData)); } else { $sRequest = $request->getParameter('request', ''); $sUid = $request->getParameter('uid'); $sSid = $request->getParameter('sid'); if (!preg_match('/^(star|report|copy)$/', $sRequest) || !BaseValidators::validateInteger($sUid) || !BaseValidators::validateInteger($sSid)) { throw new rtkAjaxException('Badrequest'); } if ($sRequest === 'copy') { // get unformatted story with original tags for copy story feature $oStory = StoriesPeer::getStory($sUid, $sSid); if ($oStory) { $oJSON = new stdClass(); $oJSON->text = $oStory->text; return $this->renderText(coreJson::encode($oJSON)); } } elseif ($sRequest === 'star') { $oJSON = StoryVotesPeer::starStory($this->getUser()->getUserId(), $sUid, $sSid); return $this->renderText(coreJson::encode($oJSON)); } elseif ($sRequest === 'report') { $oJSON = StoryVotesPeer::reportStory($this->getUser()->getUserId(), $sUid, $sSid); return $this->renderText(coreJson::encode($oJSON)); } } throw new rtkAjaxException('Badrequest'); }
<?php use_helper('Widgets'); use_stylesheet('/css/2.0/widgets.css'); /*export button*/ ?> <?php $num_stories = StoriesPeer::getStoriesCounts($_user->getUserId()); ?> <div class="app-header"> <h2>My Stories</h2> <div class="clear"></div> </div> <div class="section"> <p> This list shows all stories you have edited on the website, both <em>private</em> and <em>public</em> ones. The kanji are hidden until you point the cursor at the story, so that it doesn't interfere with your recall. </p> <?php #The page should be printer friendly, try "Print Preview" in your browser.</p> ?> <div style="width:100%;position:relative;"> Stories : <strong><?php echo $num_stories->private; ?> </strong> private, <strong><?php
/** * Show publicly shared stories * * PARAMS * kanjiData Kanji data for currently viewed kanji * */ public function execute($request) { $this->new_stories = StoriesPeer::getPublicStories($this->kanjiData->framenum, $this->kanjiData->keyword, true); $this->old_stories = StoriesPeer::getPublicStories($this->kanjiData->framenum, $this->kanjiData->keyword, false); return coreView::SUCCESS; }