예제 #1
0
 public function genUniqueUrl($from)
 {
     static $time = 0;
     static $counter = 0;
     $from = preg_replace('/\\s+/', '-', $from);
     $url = blogHelper::transliterate($from);
     if (strlen($url) == 0) {
         $url = self::shortUuid();
     } else {
         $url = mb_substr($url, 0, $this->url_length);
     }
     $url = mb_strtolower($url);
     $pattern = mb_substr($this->escape($url, 'like'), 0, $this->url_length - 3) . '%';
     $sql = "SELECT url FROM {$this->table} WHERE url LIKE '{$pattern}' ORDER BY LENGTH(url)";
     $alike = $this->query($sql)->fetchAll('url');
     if (is_array($alike) && isset($alike[$url])) {
         $last = array_shift($alike);
         $counter = 1;
         do {
             $modifier = "-{$counter}";
             $length = mb_strlen($modifier);
             $url = mb_substr($last['url'], 0, $this->url_length - $length) . $modifier;
         } while ($counter++ < 99 && isset($alike[$url]));
         if (isset($alike[$url])) {
             $short_uuid = self::shortUuid();
             $length = mb_strlen($short_uuid);
             $url = mb_substr($last['url'], 0, $this->url_length - $length) . $short_uuid;
         }
     }
     return mb_strtolower($url);
 }
 public function execute()
 {
     $post_title = waRequest::post('post_title', '', waRequest::TYPE_STRING_TRIM);
     $blog_id = waRequest::post('blog_id', 0, waRequest::TYPE_INT);
     $slug = waRequest::post('slug', '', waRequest::TYPE_STRING_TRIM);
     $blog_model = new blogBlogModel();
     $blog = $blog_model->getById($blog_id);
     if (!$blog) {
         throw new waException(_w("Can't find corresponding blog"));
     }
     $this->response['is_private_blog'] = $blog['status'] == blogBlogModel::STATUS_PRIVATE;
     $post_id = waRequest::post('post_id', 0, waRequest::TYPE_INT);
     $post_model = new blogPostModel();
     if ($post_id) {
         $post = $post_model->getById($post_id, array('text', 'text_before_cut'));
         if (!$post) {
             throw new waException(_w("Can't find corresponding post"));
         }
         if ($post['status'] != blogPostModel::STATUS_PUBLISHED) {
             $options = array('contact_id' => $post['contact_id'], 'blog_id' => $blog_id, 'post_id' => $post['id'], 'user_id' => wa()->getUser()->getId());
             $this->response['preview_hash'] = blogPostModel::getPreviewHash($options);
             $this->response['preview_hash'] = base64_encode($this->response['preview_hash'] . $options['user_id']);
         }
         $this->response['slug'] = $post['url'];
         $this->response['is_published'] = $post['status'] == blogPostModel::STATUS_PUBLISHED;
         $this->response['is_adding'] = false;
     } else {
         $post = array();
         $this->response['slug'] = $slug ? $slug : blogHelper::transliterate($post_title);
         $this->response['is_published'] = false;
         $this->response['is_adding'] = true;
     }
     $post['blog_id'] = $blog_id;
     $post['album_link_type'] = 'blog';
     $other_links = blogPostModel::getPureUrls($post);
     $this->response['link'] = array_shift($other_links);
     if (!$this->response['link']) {
         $this->response['is_private_blog'] = true;
     }
     $this->response['other_links'] = $other_links;
     foreach ($this->response as $k => &$item) {
         if (!$item || !is_string($item) && !is_array($item)) {
             continue;
         }
         if (is_array($item)) {
             $item = array_map('htmlspecialchars', $item, array_fill(0, count($item), ENT_QUOTES));
             continue;
         }
         $item = htmlspecialchars($item, ENT_QUOTES);
     }
     unset($item);
     $this->getResponse()->addHeader('Content-type', 'application/json');
 }
예제 #3
0
 public function execute()
 {
     if (!wa()->getUser()->getRights('blog', blogRightConfig::RIGHT_ADD_BLOG, true)) {
         throw new waAPIException('access_denied', 403);
     }
     $data = waRequest::post();
     // check required param name
     $this->post('name', true);
     $data = array_merge($data, array('color' => 'b-white', 'icon' => 'blog', 'url' => blogHelper::transliterate($data['name'])));
     $blog_model = new blogBlogModel();
     $data['sort'] = (int) $blog_model->select('MAX(`sort`)')->fetchField() + 1;
     $blog_id = $blog_model->insert($data);
     wa()->getUser()->setRight('blog', "blog.{$blog_id}", blogRightConfig::RIGHT_FULL);
     // return info of the new blog
     $_GET['id'] = $blog_id;
     $method = new blogBlogGetInfoMethod();
     $this->response = $method->getResponse(true);
 }
예제 #4
0
파일: install.php 프로젝트: Lazary/webasyst
<?php

//create first blog at install
try {
    $name = wa()->accountName();
    $blog = array('status' => blogBlogModel::STATUS_PUBLIC, 'name' => $name, 'icon' => 'blog', 'color' => 'b-white', 'url' => blogHelper::transliterate($name));
    $app = wa()->getApp();
    $blog_model = new blogBlogModel();
    if ($blog_model->countAll() == 0) {
        $blog_id = $blog_model->insert($blog);
        $user = wa()->getUser();
        if (!$user->isAdmin($app)) {
            $user->setRight($app, "blog.{$blog_id}", blogRightConfig::RIGHT_FULL);
        }
    }
} catch (Exception $e) {
    waLog::log($e->getMessage());
}
 /**
  * Validate data
  *
  * @param array &$data
  * @param array $options
  *
  * @return array messages or empty array
  */
 public function validate(&$data, $options = array())
 {
     $messages = array();
     if ($data['blog_status'] != blogBlogModel::STATUS_PRIVATE) {
         if (!empty($data['id'])) {
             $url_validator = new blogSlugValidator(array('id' => $data['id']));
         } else {
             if (!empty($options['transliterate']) && !$data['url']) {
                 if ($data['title']) {
                     $data['url'] = blogHelper::transliterate($data['title']);
                 } else {
                     $data['url'] = $this->genUniqueUrl('');
                 }
             }
             $url_validator = new blogSlugValidator();
         }
         $url_validator->setSubject(blogSlugValidator::SUBJECT_POST);
         if (!$url_validator->isValid($data['url'])) {
             $messages['url'] = current($url_validator->getErrors());
             if ($url_validator->isError(blogSlugValidator::ERROR_REQUIRED) && ($data['id'] || !$data['id'] && $data['status'] == blogPostModel::STATUS_DRAFT)) {
                 $url = $this->select('url')->where('id = i:id', array('id' => $data['id']))->fetchField('url');
                 $data['url'] = $url ? $url : $this->genUniqueUrl($data['title']);
                 unset($messages['url']);
                 if (!$url_validator->isValid($data['url'])) {
                     $messages['url'] = current($url_validator->getErrors());
                 }
             } elseif (!empty($options['make'])) {
                 $data['url'] = $this->genUniqueUrl($data['url']);
                 unset($messages['url']);
                 if (!$url_validator->isValid($data['url'])) {
                     $messages['url'] = current($url_validator->getErrors());
                 }
             }
         }
     } else {
         if (empty($data['id'])) {
             $data['url'] = $this->genUniqueUrl(empty($data['url']) ? $data['title'] : $data['url']);
         } else {
             $url = $this->select('url')->where('id = i:id', array('id' => $data['id']))->fetchField('url');
             $data['url'] = $url ? $url : $this->genUniqueUrl($data['title']);
         }
     }
     if (isset($data['datetime']) && !is_null($data['datetime'])) {
         if (!empty($options['datetime'])) {
             $formats = (array) $options['datetime'];
         } elseif (isset($options['datetime'])) {
             $formats = array();
         } elseif (strpos($data['datetime'], ':') !== false) {
             $formats = array('fulldatetime', 'datetime');
         } else {
             $formats = array('date');
         }
         if ($data['datetime'] != '') {
             $datetime = $data['datetime'];
             foreach ($formats as $format) {
                 try {
                     if ($datetime = waDateTime::parse($format, $data['datetime'])) {
                         break;
                     }
                 } catch (Exception $ex) {
                     $messages['datetime'] = _w('Incorrect format');
                     waLog::log($ex->getMessage());
                 }
             }
             if (preg_match('/^([\\d]{4})\\-([\\d]{1,2})\\-([\\d]{1,2})(\\s|$)/', $datetime, $matches)) {
                 if (!checkdate($matches[2], $matches[3], $matches[1])) {
                     $messages['datetime'] = _w('Incorrect format');
                 }
             }
             $data['datetime'] = $datetime;
         } else {
             if ($data['status'] != blogPostModel::STATUS_DRAFT) {
                 $data['datetime'] = false;
             }
         }
         if ($data['datetime'] === false) {
             $messages['datetime'] = _w('Incorrect format');
         }
     }
     /**
      * @event post_validate
      * @param array [string]mixed $data
      * @param array ['plugin']['%plugin_id%']mixed plugin data
      * @return array['%plugin_id%']['field']string error
      */
     $messages['plugin'] = wa()->event('post_validate', $data);
     if (empty($messages['plugin'])) {
         unset($messages['plugin']);
     }
     return $messages;
 }
 public function execute()
 {
     $this->getResponse()->addHeader('Content-type', 'application/json');
     $blog_name = waRequest::post('blog_name', '', waRequest::TYPE_STRING_TRIM);
     $this->response = array('slug' => blogHelper::transliterate($blog_name));
 }