/**
  * Supplement the items data
  *
  * $extend_options
  *  - link: if it false - not add author posts
  *  - plugin: if false suppress plugin provided data
  *  - datetime:
  *  - test:
  * @param $items
  * @param array @extend_options
  * @param array $extend_data
  * @return mixed
  */
 public function prepareView($items, $extend_options = array(), $extend_data = array())
 {
     $extend_options = array_merge($this->extend_options, (array) $extend_options);
     $extend_data = array_merge($this->extend_data, (array) $extend_data);
     $extend_author_link = (!isset($extend_options['link']) || $extend_options['link']) && (!isset($extend_options['author_link']) || $extend_options['author_link']);
     // get user info & photo by post
     if ($item = current($items)) {
         if (isset($item['contact_id']) && (!isset($extend_options['user']) || $extend_options['user'])) {
             if (!isset($extend_options['user'])) {
                 $extend_options['user'] = array('photo_url_20');
             } elseif (!is_array($extend_options['user'])) {
                 $extend_options['user'] = preg_split('/,[\\s]*/', $extend_options['user']);
             }
             blogHelper::extendUser($items, $extend_options['user'], $extend_author_link);
         }
         if (isset($item['id'])) {
             if (!empty($extend_options['datetime'])) {
                 $comment_model = new blogCommentModel();
                 $comment_datetime = $comment_model->getDatetime(array_keys($items));
                 foreach ($items as $id => &$item) {
                     $item['comment_datetime'] = isset($comment_datetime[$id]) ? $comment_datetime[$id] : 0;
                     unset($item);
                 }
             } elseif (!isset($extend_options['comments'])) {
                 blogHelper::extendPostComments($items);
             } elseif ($extend_options['comments']) {
                 $fields = array();
                 if ($extend_options['comments'] !== true) {
                     foreach ((array) $extend_options['comments'] as $size) {
                         $fields[] = "photo_url_{$size}";
                     }
                 }
                 $activity_datetime = blogActivity::getUserActivity();
                 $comment_model = new blogCommentModel();
                 $comment_options = array('user' => $extend_author_link, 'datetime' => $activity_datetime, 'escape' => !empty($extend_options['escape']));
                 foreach ($items as $id => &$item) {
                     $item['comments'] = $comment_model->get($id, $fields, $comment_options);
                     $item['comment_count'] = 0;
                     $item['comment_new_count'] = 0;
                     foreach ($item['comments'] as &$comment) {
                         if ($comment['status'] == blogCommentModel::STATUS_PUBLISHED) {
                             ++$item['comment_count'];
                             if (!empty($comment['new'])) {
                                 ++$item['comment_new_count'];
                             }
                         }
                         unset($comment);
                     }
                     unset($item);
                 }
             }
             if (!empty($extend_options['status'])) {
                 blogHelper::extendPostState($items, $extend_options['status']);
             }
             if (!empty($extend_options['rights']) && isset($extend_data['blog'])) {
                 blogHelper::extendRights($items, $extend_data['blog'], wa()->getUser()->getId());
             }
             if (!empty($extend_options['params'])) {
                 $params_model = new blogPostParamsModel();
                 $params = $params_model->getByField('post_id', array_keys($items), true);
             }
         }
     }
     if (isset($params)) {
         foreach ($params as $param) {
             if (isset($items[$param['post_id']])) {
                 $items[$param['post_id']] += array($param['name'] => $param['value']);
             }
         }
     }
     foreach ($items as &$item) {
         #data holders for plugin events handlers
         $item['plugins'] = array('before' => array(), 'after' => array(), 'post_title' => array(), 'post_title_right' => array());
         if (isset($item['blog_id'])) {
             $blog_id = $item['blog_id'];
             if (isset($extend_data['blog']) && isset($extend_data['blog'][$blog_id])) {
                 $blog = $extend_data['blog'][$blog_id];
                 if (isset($blog['url'])) {
                     $item['blog_url'] = $blog['url'];
                 }
                 $item['icon'] = isset($blog['icon_html']) ? $blog['icon_html'] : '';
                 $item['color'] = isset($blog['color']) ? $blog['color'] : '';
                 if (isset($blog['status'])) {
                     $item['blog_status'] = $blog['status'];
                 }
                 if (isset($blog['url'])) {
                     $item['blog_url'] = $blog['url'];
                 }
                 if (isset($blog['name'])) {
                     $item['blog_name'] = $blog['name'];
                 }
             } else {
                 $item['color'] = '';
                 $item['icon'] = '';
             }
         }
         if (isset($item['comment_count'])) {
             /**
              * Backward compatibility with older themes
              * @deprecated
              */
             $item['comment_str_translate'] = _w('comment', 'comments', $item['comment_count']);
         }
         if (!isset($extend_options['link']) || $extend_options['link']) {
             if (isset($item['blog_status']) && $item['blog_status'] != blogBlogModel::STATUS_PUBLIC) {
                 $item['link'] = false;
             } else {
                 $item['link'] = blogPost::getUrl($item);
             }
         }
         if (empty($item['title'])) {
             $item['title'] = _w("(empty title)");
         }
         if (!empty($extend_options['escape'])) {
             $item['title'] = htmlspecialchars($item['title'], ENT_QUOTES, 'utf-8');
             $item['user']['name'] = htmlspecialchars($item['user']['name'], ENT_QUOTES, 'utf-8');
         }
         unset($item);
     }
     if (!isset($extend_options['plugin']) || $extend_options['plugin']) {
         /**
          * Prepare post data
          * Extend each post item via plugins data
          * @event prepare_posts_frontend
          * @event prepare_posts_backend
          * @example public function preparePost(&$items)
          * {
          *     foreach ($items as &$item) {
          *         $item['post_title'][$this->id] = 'Extra post title html code here';
          *     }
          * }
          * @param array [int][string]mixed $items Post items
          * @param array [int][string]mixed $items[id] Post item
          * @param array [int][string]int $items[id]['id'] Post item ID
          * @param array [int][string][string]string $items[id]['before'][%plugin_id%] Placeholder for plugin %plugin_id% output
          * @param array [int][string][string]string $items[id]['after'][%plugin_id%] Placeholder for plugin %plugin_id% output
          * @param array [int][string][string]string $items[id]['post_title'][%plugin_id%] Placeholder for plugin %plugin_id% output
          * @param array [int][string][string]string $items[id]['post_title_right'][%plugin_id%] Placeholder for plugin %plugin_id% output
          * @return void
          */
         wa()->event('prepare_posts_' . wa()->getEnv(), $items);
     }
     return $items;
 }