Beispiel #1
0
 /**
  * Save new article into draft table, 
  * and the status of article will be draft.
  * 
  * @param array  $data  Posted article details
  * @return boolean 
  */
 protected function saveDraft($data)
 {
     $rowDraft = $id = $fakeId = null;
     $module = $this->getModule();
     $modelDraft = $this->getModel('draft');
     if (isset($data['id'])) {
         $id = $data['id'];
         unset($data['id']);
     }
     $fakeId = $this->params('fake_id', 0);
     unset($data['article']);
     unset($data['image']);
     if ($this->config('enable_summary') && !$data['summary']) {
         $data['summary'] = Draft::generateArticleSummary($data['content'], $this->config('max_summary_length'));
     }
     $pages = Draft::breakPage($data['content']);
     $data['pages'] = count($pages);
     $data['time_publish'] = $data['time_publish'] ? strtotime($data['time_publish']) : 0;
     $data['time_update'] = $data['time_update'] ? strtotime($data['time_update']) : 0;
     $data['time_submit'] = $data['time_submit'] ? $data['time_submit'] : 0;
     $data['time_save'] = time();
     $data['author'] = (int) $data['author'];
     if (isset($data['related'])) {
         $data['related'] = array_filter(explode(self::TAG_DELIMITER, $data['related']));
     }
     // Added current logged user as submitter if there is no submitter
     $data['uid'] = $data['uid'] ?: Pi::user()->getId();
     if (empty($id)) {
         $data['uid'] = Pi::user()->getId();
         $data['status'] = DraftModel::FIELD_STATUS_DRAFT;
         $rowDraft = $modelDraft->saveRow($data);
         if (empty($rowDraft->id)) {
             return false;
         }
     } else {
         if (isset($data['status'])) {
             unset($data['status']);
         }
         $rowDraft = $modelDraft->find($id);
         if (empty($rowDraft->id)) {
             return false;
         }
         $modelDraft->updateRow($data, array('id' => $rowDraft->id));
     }
     // Save image
     $session = Media::getUploadSession($module, 'feature');
     if (isset($session->{$id}) || $fakeId && isset($session->{$fakeId})) {
         $uploadInfo = isset($session->{$id}) ? $session->{$id} : $session->{$fakeId};
         if ($uploadInfo) {
             $data['image'] = $uploadInfo['tmp_name'];
             $this->getModel('draft')->updateRow($data, array('id' => $rowDraft->id));
         }
         unset($session->{$id});
         unset($session->{$fakeId});
     }
     // Update assets linked to fake id
     if ($fakeId) {
         $this->getModel('asset_draft')->update(array('draft' => $rowDraft->id), array('draft' => $fakeId));
     }
     return $rowDraft->id;
 }
Beispiel #2
0
 /**
  * Get published article details
  * 
  * @param int  $id  Article ID
  * @return array 
  */
 public static function getEntity($id)
 {
     $module = Pi::service('module')->current();
     $config = Pi::config('', $module);
     $row = Pi::model('article', $module)->find($id);
     if (empty($row->id)) {
         return array();
     }
     if ($row->markup) {
         $subject = Pi::service('markup')->render($row->subject, 'html', $row->markup);
         $subtitle = Pi::service('markup')->render($row->subtitle, 'html', $row->markup);
     } else {
         $subject = Pi::service('markup')->render($row->subject, 'html');
         $subtitle = Pi::service('markup')->render($row->subtitle, 'html');
     }
     $content = Compiled::getContent($row->id, 'html');
     $result = array('title' => $subject, 'content' => Draft::breakPage($content), 'subtitle' => $subtitle, 'source' => $row->source, 'pages' => $row->pages, 'time_publish' => $row->time_publish, 'active' => $row->active, 'visits' => '', 'slug' => '', 'seo' => array(), 'author' => array(), 'attachment' => array(), 'tag' => '', 'related' => array());
     // Get author
     if ($row->author) {
         $author = Pi::api('api', $module)->getAuthorList((array) $row->author);
         if ($author) {
             $result['author'] = array_shift($author);
             if (empty($result['author']['photo'])) {
                 $result['author']['photo'] = Pi::service('asset')->getModuleAsset($config['default_author_photo'], $module);
             }
         }
     }
     // Get attachments
     $resultsetAsset = Pi::model('asset', $module)->select(array('article' => $id, 'type' => 'attachment'));
     $mediaIds = array();
     foreach ($resultsetAsset as $asset) {
         $mediaIds[$asset->media] = $asset->media;
     }
     if ($mediaIds) {
         $resultsetMedia = Pi::model('media', $module)->select(array('id' => $mediaIds));
         foreach ($resultsetMedia as $media) {
             $result['attachment'][] = array('original_name' => $media->title, 'extension' => $media->type, 'size' => $media->size, 'url' => Pi::service('url')->assemble('default', array('module' => $module, 'controller' => 'media', 'action' => 'download', 'id' => $media->id)));
         }
     }
     // Get tag
     /*
     if ($config['enable_tag']) {
         $result['tag'] = Pi::service('tag')->get($module, $id);
     }
     */
     // Get related articles
     $relatedIds = Pi::model('related', $module)->getRelated($id);
     if ($relatedIds) {
         $related = array_flip($relatedIds);
         $where = array('id' => $relatedIds);
         $columns = array('id', 'subject', 'time_publish');
         $resultsetRelated = self::getArticlePage($where, 1, null, $columns, null, $module);
         foreach ($resultsetRelated as $key => $val) {
             if (array_key_exists($key, $related)) {
                 $related[$key] = $val;
             }
         }
         $result['related'] = array_filter($related, function ($var) {
             return is_array($var);
         });
     }
     // Getting seo
     $modelExtended = Pi::model('extended', $module);
     $rowExtended = $modelExtended->find($row->id, $module);
     if ($rowExtended) {
         $result['slug'] = $rowExtended->slug;
         $result['seo'] = array('title' => $rowExtended->seo_title, 'keywords' => $rowExtended->seo_keywords, 'description' => $rowExtended->seo_description);
     }
     // Getting stats data
     $modelStatis = Pi::model('stats', $module);
     $rowStatis = $modelStatis->find($row->id, $module);
     if ($rowStatis) {
         $result['visits'] = $rowStatis->visits;
     }
     return $result;
 }