/** * 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; }
/** * 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; }