public function execute()
 {
     ob_start();
     $app = $this->getApp();
     $app_settings_model = new waAppSettingsModel();
     $app_settings_model->set($app, 'cron_schedule', time());
     waFiles::create($this->getConfig()->getPath('log') . '/' . $app . '/');
     $log_file = "{$app}/cron.txt";
     $post_model = new blogPostModel();
     $params = array('datetime' => date("Y-m-d H:i:s"), 'status' => blogPostModel::STATUS_SCHEDULED);
     $posts_schedule = $post_model->select("id,blog_id,contact_id,status,datetime")->where('datetime <= s:datetime AND status=s:status', $params)->fetchAll();
     if ($posts_schedule) {
         foreach ($posts_schedule as $post) {
             try {
                 waLog::log("Attempt publishing post with id [{$post['id']}]", $log_file);
                 $data = array("status" => blogPostModel::STATUS_PUBLISHED);
                 waLog::log($post_model->updateItem($post['id'], $data, $post) ? "success" : "fail", $log_file);
             } catch (Exception $ex) {
                 waLog::log($ex->getMessage(), $log_file);
                 waLog::log($ex->getTraceAsString(), $log_file);
             }
         }
     }
     $action = __FUNCTION__;
     /**
      * @event cron_action
      * @param string $action
      * @return void
      */
     wa()->event('cron_action', $action);
     if ($log = ob_get_clean()) {
         waLog::log($log, $log_file);
     }
 }
 public function execute()
 {
     if ($target_blog = max(0, $this->getRequest()->post('blog', 0, waRequest::TYPE_INT))) {
         $blog_model = new blogBlogModel();
         if ($blog = $blog_model->getById($target_blog)) {
             if ($ids = $this->getRequest()->post('id', null, waRequest::TYPE_ARRAY_INT)) {
                 $post_model = new blogPostModel();
                 $comment_model = new blogCommentModel();
                 $this->response['moved'] = array();
                 foreach ($ids as $id) {
                     try {
                         //rights will checked for each record separately
                         $post_model->updateItem($id, array('blog_id' => $target_blog));
                         $comment_model->updateByField('post_id', $id, array('blog_id' => $target_blog));
                         $this->response['moved'][$id] = $id;
                     } catch (Exception $ex) {
                         if (!isset($this->response['error'])) {
                             $this->response['error'] = array();
                         }
                         $this->response['error'][$id] = $ex->getMessage();
                     }
                 }
                 $this->response['style'] = $blog['color'];
                 $blog_model->recalculate();
             }
         } else {
         }
     }
 }
 public function execute()
 {
     $id = $this->get('id', true);
     $post_model = new blogPostModel();
     $post = $post_model->getById($id);
     if (!$post) {
         throw new waAPIException('invalid_param', 'Post not found', 404);
     }
     //check rights
     if (blogHelper::checkRights($post['blog_id']) < blogRightConfig::RIGHT_FULL && $post['contact_id'] != wa()->getUser()->getId()) {
         throw new waAPIException('access_denied', 403);
     }
     $data = array_merge($post, waRequest::post());
     $blog_model = new blogBlogModel();
     $blogs = $blog_model->getAvailable();
     if (!isset($blogs[$data['blog_id']])) {
         throw new waAPIException('invalid_param', 'Blog not found', 404);
     }
     $blog = $blogs[$data['blog_id']];
     $data['blog_status'] = $blog['status'];
     $data['datetime'] = $this->formateDatetime($data['datetime']);
     $messages = $post_model->validate($data, array('transliterate' => true));
     if ($messages) {
         throw new waAPIException('invalid_param', 'Validate messages: ' . implode("\n", $messages), 404);
     }
     $post_model->updateItem($data['id'], $data);
     $_GET['id'] = $id;
     $method = new blogPostGetInfoMethod();
     $this->response = $method->getResponse(true);
 }
 public function execute()
 {
     $data = waRequest::post();
     // check required params
     $this->post('blog_id', true);
     $this->post('title', true);
     $blog_model = new blogBlogModel();
     $blogs = $blog_model->getAvailable();
     if (!isset($blogs[$data['blog_id']])) {
         throw new waAPIException('invalid_param', 'Blog not found', 404);
     }
     $blog = $blogs[$data['blog_id']];
     if ($blog['rights'] < blogRightConfig::RIGHT_READ_WRITE) {
         throw new waAPIException('access_denied', 403);
     }
     $data = array_merge($data, array('blog_status' => $blog['status'], 'url' => '', 'text' => '', 'status' => blogPostModel::STATUS_PUBLISHED));
     $post_model = new blogPostModel();
     $options = array();
     if (waRequest::post('transliterate', null)) {
         $options['transliterate'] = true;
     }
     $messages = $post_model->validate($data, array('transliterate' => true));
     if ($messages) {
         throw new waAPIException('invalid_param', 'Validate messages: ' . implode("\n", $messages), 404);
     }
     $id = $post_model->updateItem(null, $data);
     $_GET['id'] = $id;
     $method = new blogPostGetInfoMethod();
     $this->response = $method->getResponse(true);
 }
Exemple #5
0
 public function run($params = NULL)
 {
     $app = $this->getApp();
     $app_settings_model = new waAppSettingsModel();
     $app_settings_model->set($app, 'last_schedule_cron_time', time());
     waFiles::create($this->getConfig()->getPath('log') . '/' . $app . '/');
     $log_file = "{$app}/schedule.txt";
     $post_model = new blogPostModel();
     $params = array('datetime' => date("Y-m-d H:i:s"), 'status' => blogPostModel::STATUS_SCHEDULED);
     $posts_schedule = $post_model->select("id, blog_id, contact_id, status, datetime")->where('datetime <= s:datetime AND status=s:status', $params)->fetchAll();
     if ($posts_schedule) {
         foreach ($posts_schedule as $post) {
             try {
                 waLog::log("Attempt publishing post with id [{$post['id']}]", $log_file);
                 $data = array("status" => blogPostModel::STATUS_PUBLISHED, "datetime" => date("Y-m-d H:i:s"));
                 $r = $post_model->updateItem($post['id'], $data, $post);
                 waLog::log($r ? "success" : "fail", $log_file);
             } catch (Exception $ex) {
                 waLog::log($ex->getMessage(), $log_file);
                 waLog::log($ex->getTraceAsString(), $log_file);
             }
         }
     }
 }
 protected function insertPost($post)
 {
     static $post_model;
     if (!$post_model) {
         $post_model = new blogPostModel();
     }
     if (empty($post['contact_id'])) {
         $post['contact_id'] = $this->settings['contact'];
     }
     $method = __METHOD__;
     $this->log(var_export(compact('method', 'post'), true));
     $post['blog_id'] = $this->settings['blog'];
     $post['blog_status'] = $this->settings['blog_status'];
     $post['text'] = $this->userReplace($post['text']);
     $post_model->ping();
     switch ($field = $this->settings['mode']) {
         case 'title':
             if ($p = $post_model->getByField(array($field => $post[$field], 'blog_id' => $post['blog_id']))) {
                 $this->log("Post with timestamp [{$post['timestamp']}] skipped because there was a duplicate (id={$p['id']})", self::LOG_NOTICE);
                 $this->log("Post raw data " . var_export($post, true), self::LOG_DEBUG);
                 return false;
             }
             break;
     }
     if ($post['blog_status'] == blogBlogModel::STATUS_PUBLIC) {
         $post['url'] = $post_model->genUniqueUrl(empty($post['url']) ? $post['title'] : $post['url']);
     } elseif (!empty($post['url'])) {
         $post['url'] = $post_model->genUniqueUrl($post['url']);
     } else {
         $post['url'] = '';
     }
     $post['id'] = $post_model->updateItem(null, $post);
     return $post;
 }
 private function save($post)
 {
     $options = array();
     if (waRequest::post('transliterate', null)) {
         $options['transliterate'] = true;
     }
     $this->validate_messages = $this->post_model->validate($post, $options);
     if ($this->validate_messages) {
         $this->errors = $this->validate_messages;
     } else {
         $post['text_before_cut'] = null;
         $post['cut_link_label'] = null;
         $template = '<!--[\\s]*?more[\\s]*?(text[\\s]*?=[\\s]*?[\'"]([\\s\\S]*?)[\'"])*[\\s]*?-->';
         $descriptor = preg_split("/{$template}/", $post['text'], 2, PREG_SPLIT_DELIM_CAPTURE);
         if ($descriptor) {
             if (count($descriptor) == 2) {
                 $post['text_before_cut'] = blogPost::closeTags($descriptor[0]);
             } elseif (count($descriptor) > 2) {
                 $post['text_before_cut'] = blogPost::closeTags($descriptor[0]);
                 if (isset($descriptor[2])) {
                     $post['cut_link_label'] = $descriptor[2];
                 }
             }
         }
         if ($post['id']) {
             $prev_post = $this->post_model->getFieldsById($post['id'], 'status');
             if ($prev_post['status'] != blogPostModel::STATUS_PUBLISHED && $post['status'] == blogPostModel::STATUS_PUBLISHED) {
                 $this->inline = false;
             }
             $this->post_model->updateItem($post['id'], $post);
             if ($prev_post['status'] != blogPostModel::STATUS_PUBLISHED && $post['status'] == blogPostModel::STATUS_PUBLISHED) {
                 $this->log('post_publish', 1);
             } else {
                 $this->log('post_edit', 1);
             }
         } else {
             $post['id'] = $this->post_model->updateItem(null, $post);
             $this->log('post_publish', 1);
         }
         $this->saveParams($post['id']);
         $this->clearViewCache($post['id'], $post['url']);
         if (!$this->inline) {
             if ($post['status'] != blogPostModel::STATUS_PUBLISHED) {
                 $params = array('module' => 'post', 'action' => 'edit', 'id' => $post['id']);
             } elseif ($post['blog_status'] == blogBlogModel::STATUS_PUBLIC) {
                 $params = array('blog' => $post['blog_id']);
             } else {
                 $params = array('module' => 'post', 'id' => $post['id']);
             }
             $this->response['redirect'] = $this->getRedirectUrl($params);
         } else {
             $this->response['formatted_datetime'] = waDateTime::format('humandatetime', $post['datetime']);
             $this->response['id'] = $post['id'];
             $this->response['url'] = $post['url'];
             if ($post['status'] != blogPostModel::STATUS_PUBLISHED) {
                 $options = array('contact_id' => $post['contact_id'], 'blog_id' => $post['blog_id'], 'post_id' => $post['id'], 'user_id' => wa()->getUser()->getId());
                 $preview_hash = blogPostModel::getPreviewHash($options);
                 $this->response['preview_hash'] = base64_encode($preview_hash . $options['user_id']);
                 $this->response['debug'] = $options;
             }
         }
     }
 }