Esempio n. 1
0
 /**
  * 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>&nbsp;</span>';
         $R['kicks'] = $R['kicks'] ? '<span class="report">' . $R['kicks'] . '</span>' : '<span>&nbsp;</span>';
         $R['story'] = StoriesPeer::getFormattedStory($R['story'], $R['keyword'], false);
     }
     $this->rows = $rows;
     return coreView::SUCCESS;
 }
Esempio n. 3
0
 /**
  * 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;
 }
Esempio n. 4
0
 /**
  * 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');
 }
Esempio n. 5
0
<?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 
Esempio n. 6
0
 /**
  * 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;
 }