/**
  * [run description]
  * @return [type] [description]
  */
 public function run()
 {
     // init
     $_log = $this->_log;
     // get user input
     $inputException = array();
     $fetchInputResult = $this->fetchInput($inputException);
     $this->_feedback->setCallback($this->input['callback']);
     if (!$fetchInputResult) {
         $feed = "";
         $feed = Feedback::getFeed(false, $inputException, array(), $output_format, $input['callback']);
         BaseView::renderJson($error_message);
         return true;
     }
     // check token
     $AccessibilityCheck = new AccessibilityCheck();
     if ($AccessibilityCheck->isTokenIllegal($UnsubscribeRequest)) {
         $feed = "";
         $feed = Feedback::getBaseFeed(false, FeedbackInfo::ILLEGAL_TOKEN, array(), $this->output_format, $this->input['callback']);
         BaseView::renderJson($feed);
         return true;
     }
     // storage data
     $this->initDatabaseModel();
     if (!$this->AllSubscribeStorage->unsubByUidSubid($UnsubscribeRequest)) {
         $feed = "";
         $feed = Feedback::getBaseFeed(false, FeedbackInfo::UNSUB_FAILED_BY_STORAGE, null, $this->output_format, $this->input['callback']);
         BaseView::renderJson($feed);
         return true;
     }
     // cache data
     if (!$this->UserSubscribeCache->removeUserSub($UnsubscribeRequest)) {
         $feed = "";
         $feed = Feedback::getBaseFeed(false, FeedbackInfo::UNSUB_FAILED_BY_CACHE, null, $this->output_format, $this->input['callback']);
         BaseView::renderJson($feed);
         return true;
     }
     // decrease cache num
     $this->SubscribeNumCache->decreaseSubNum($UnsubscribeRequest);
     // feedback ok
     $feed = "";
     $feed = Feedback::getBaseFeed(true, FeedbackInfo::OK, null, $this->output_format, $this->input['callback']);
     BaseView::renderJson($feed);
     return true;
 }