/** * Get newsfeed item as HTML * * @param Model_NewsfeedItem $item * @return string */ public static function get(Model_NewsfeedItem $item) { $text = ''; switch ($item->type) { case self::TYPE_COMMENT: $gallery = Model_Gallery::factory($item->data['gallery_id']); $image = Model_Image::factory($item->data['image_id']); if ($gallery->loaded() && $image->loaded()) { $text = __('commented to an image<br />:gallery', array(':gallery' => HTML::anchor(Route::url('gallery_image', array('gallery_id' => Route::model_id($gallery), 'id' => $image->id, 'action' => '')), '<i class="icon-camera icon-white"></i> ' . HTML::chars($gallery->name), array('class' => 'hoverable')))); } break; case self::TYPE_COMMENT_FLYER: $flyer = Model_Flyer::factory($item->data['flyer_id']); if ($flyer->loaded()) { $text = __('commented to a flyer<br />:flyer', array(':flyer' => HTML::anchor(Route::url('flyer', array('id' => $flyer->id)), '<i class="icon-picture icon-white"></i> ' . ($flyer->name ? HTML::chars($flyer->name) : __('flyer')), array('class' => 'hoverable')))); } break; case self::TYPE_FLYER_EDIT: $flyer = Model_Flyer::factory($item->data['flyer_id']); if ($flyer->loaded()) { $text = __('updated flyer<br />:flyer', array(':flyer' => HTML::anchor(Route::url('flyer', array('id' => $flyer->id)), '<i class="icon-picture icon-white"></i> ' . ($flyer->name ? HTML::chars($flyer->name) : __('flyer')), array('class' => 'hoverable')))); } break; case self::TYPE_NOTE: $gallery = Model_Gallery::factory($item->data['gallery_id']); $image = Model_Image::factory($item->data['image_id']); $user = Model_User::find_user($item->data['user_id']); if ($gallery->loaded() && $image->loaded() && $user->loaded()) { $text = __('tagged :user to an image<br />:gallery', array(':user' => HTML::user($user), ':gallery' => HTML::anchor(Route::url('gallery_image', array('gallery_id' => Route::model_id($gallery), 'id' => $image->id, 'action' => '')), '<i class="icon-tag icon-white"></i> ' . HTML::chars($gallery->name), array('class' => 'hoverable')))); } break; } return $text; }
/** * Get event flyers. * * @return Model_Flyer[] */ public function flyers() { return Model_Flyer::factory()->find_by_event($this->id); }
/** * Get side image. * * @param Model_Event $event * @return View_Generic_SideImage */ protected function section_event_image(Model_Event $event) { // Display front flyer by default if ($image = $event->flyer_front()) { $flyer = Model_Flyer::factory()->find_by_image($image->id); $link = Route::model($flyer); } else { if ($image = $event->flyer_back()) { $flyer = Model_Flyer::factory()->find_by_image($image->id); $link = Route::model($flyer); } else { if (count($flyers = $event->flyers())) { $flyer = $flyers[0]; $image = $flyer->image(); $link = Route::model($flyer); } else { $image = null; $link = null; } } } return new View_Generic_SideImage($image, $link); }
/** * Controller default action */ public function action_index() { // Build page $this->view = View_Page::factory(__('Galleries')); $this->view->tab = 'latest'; $this->_set_page_actions(Permission::has(new Model_Gallery(), Model_Gallery::PERMISSION_CREATE)); $this->_set_flyer_actions(); // Galleries with latest images $galleries = Model_Gallery::factory()->find_latest(12); if (count($galleries)) { $this->view->add(View_Page::COLUMN_TOP, $this->section_galleries_thumbs($galleries)); } // Latest flyers $flyers = Model_Flyer::factory()->find_latest(12); if (count($flyers)) { $section = $this->section_flyers_thumbs($flyers); $section->title = __('Latest flyers'); $this->view->add(View_Page::COLUMN_TOP, $section); } }
/** * Get side image. * * @param Model_Event $event * @return View_Generic_SideImage */ protected function section_event_image(Model_Event $event) { // Display front flyer by default if ($image = $event->flyer_front()) { $flyer = Model_Flyer::factory()->find_by_image($image->id); $link = Route::model($flyer); } else { if ($image = $event->flyer_back()) { $flyer = Model_Flyer::factory()->find_by_image($image->id); $link = Route::model($flyer); } else { if (count($flyers = $event->flyers())) { $flyer = $flyers[0]; $image = $flyer->image(); $link = Route::model($flyer); } else { $image = null; $link = null; } } } if (Permission::has($event, Model_User::PERMISSION_UPDATE, self::$user)) { $uri = Route::model($event, 'image'); $actions = array(); $actions[] = HTML::anchor($uri, '<i class="icon-plus-sign icon-white"></i> ' . __('Add flyer'), array('class' => 'btn btn-small btn-primary image-add ajaxify')); if ($image) { $actions[] = HTML::anchor($uri . '?token=' . Security::csrf() . '&front=' . $image->id, __('As front'), array('class' => 'btn btn-small btn-inverse image-change' . ($event->flyer_front_image_id == $image->id ? ' disabled' : ''), 'data-change' => 'front')); $actions[] = HTML::anchor($uri . '?token=' . Security::csrf() . '&back=' . $image->id, __('As back'), array('class' => 'btn btn-small btn-inverse image-change' . ($event->flyer_back_image_id == $image->id ? ' disabled' : ''), 'data-change' => 'back')); $actions[] = HTML::anchor($uri . '?token=' . Security::csrf() . '&delete=' . $image->id, '<i class="icon-trash"></i> ' . __('Delete'), array('class' => 'btn btn-small btn-inverse image-delete')); } } else { $actions = null; } $section = new View_Generic_SideImage($image, $link); $section->actions = $actions; return $section; }
/** * Get anchor to newsfeed item target. * * @static * @param Model_NewsfeedItem $item * @return string */ public static function get_link(Model_NewsfeedItem $item) { $text = ''; switch ($item->type) { // Image case self::TYPE_COMMENT: case self::TYPE_NOTE: $gallery = Model_Gallery::factory($item->data['gallery_id']); $image = Model_Image::factory($item->data['image_id']); if ($gallery->loaded() && $image->loaded()) { $text = HTML::anchor(Route::url('gallery_image', array('gallery_id' => Route::model_id($gallery), 'id' => $image->id, 'action' => '')), '<i class="fa fa-camera-retro"></i> ' . HTML::chars($gallery->name), array('class' => 'hoverable')); } break; // Flyer // Flyer case self::TYPE_COMMENT_FLYER: case self::TYPE_FLYER_EDIT: $flyer = Model_Flyer::factory($item->data['flyer_id']); if ($flyer->loaded()) { $text = HTML::anchor(Route::url('flyer', array('id' => $flyer->id)), '<i class="fa fa-picture"></i> ' . ($flyer->name ? HTML::chars($flyer->name) : __('flyer')), array('class' => 'hoverable')); } break; // Gallery // Gallery case self::TYPE_UPLOAD: $gallery = Model_Gallery::factory($item->data['gallery_id']); if ($gallery->loaded()) { $text = HTML::anchor(Route::model($gallery), '<i class="fa fa-camera-retro"></i> ' . HTML::chars($gallery->name), array('class' => 'hoverable')); } break; } return $text; }
/** * Action: flyer */ public function action_flyer() { $this->history = false; // Load event /** @var Model_Event $event */ $event_id = (int) $this->request->param('id'); $event = Model_Event::factory($event_id); if (!$event->loaded()) { throw new Model_Exception($event, $event_id); } Permission::required($event, Model_Event::PERMISSION_UPDATE); if ($this->_request_type !== Controller::REQUEST_AJAX) { $this->page_title = HTML::chars($event->name); } if (isset($_REQUEST['default'])) { // Change front flyer /** @var Model_Flyer $flyer */ $flyer = new Model_Flyer((int) $_REQUEST['default']); if (Security::csrf_valid() && $flyer->loaded() && $flyer->event_id == $event->id) { if ($event->set_flyer($flyer)) { $event->save(); } } $cancel = true; } else { if (isset($_REQUEST['delete'])) { // Delete existing /** @var Model_Flyer $flyer */ $flyer_id = (int) $_REQUEST['delete']; $flyer = new Model_Flyer($flyer_id); if (Security::csrf_valid() && $flyer->loaded() && $flyer->event_id == $event->id) { $flyer->delete(); // Set new default? if ($flyer_id == $event->flyer_id) { $event->flyer_id = null; if ($event->set_flyer()) { $event->save(); } } } $cancel = true; } } // Cancel change if (isset($cancel) || isset($_REQUEST['cancel'])) { if ($this->_request_type === Controller::REQUEST_AJAX) { $this->response->body($this->section_carousel($event)); return; } $this->request->redirect(Route::model($event)); } // Handle post $errors = array(); if ($_POST && $_FILES) { $image = Model_Image::factory(); $image->author_id = Visitor::$user->id; $image->created = time(); $image->file = Arr::get($_FILES, 'file'); $image->description = $event->get_forum_topic(); try { $image->save(); // Add flyer try { $flyer = Model_Flyer::factory(); $flyer->set_fields(array('image_id' => $image->id, 'event_id' => $event->id, 'name' => $event->name, 'stamp_begin' => $event->stamp_begin)); $flyer->save(); // Set as default? if (!$event->flyer_id && $event->set_flyer($flyer)) { $event->save(); } } catch (Kohana_Exception $e) { } if ($this->_request_type === Controller::REQUEST_AJAX) { $this->response->body($this->section_carousel($event)); return; } $this->request->redirect(Route::model($event)); } catch (Validation_Exception $e) { $errors = $e->array->errors('validation'); } catch (Kohana_Exception $e) { $errors = array('file' => __('Failed with image')); } } $view = $this->section_flyer_upload(Route::model($event, 'flyer'), $this->_request_type === Controller::REQUEST_AJAX ? Route::model($event, 'flyer') . '?cancel' : Route::model($event), $errors); if ($this->_request_type === Controller::REQUEST_AJAX) { $this->response->body($view); return; } // Build page $this->view = View_Page::factory($event->name); $this->view->add(View_Page::COLUMN_CENTER, $view); }
/** * Get user's new comment counts. * * @param Model_User $user * @return array */ public static function notifications(Model_User $user) { $new = array(); // Profile comments if ($user->new_comment_count) { $new['new-comments'] = HTML::anchor(URL::user($user), '<i class="icon-comment icon-white"></i> ' . $user->new_comment_count, array('class' => 'badge badge-info', 'title' => __('New comments'))); } // Forum private messages $private_messages = Forum::find_new_private_messages($user); if (count($private_messages)) { $new_messages = 0; foreach ($private_messages as $private_message) { $new_messages += $private_message->unread; } $new['new-private-messages'] = HTML::anchor(Route::model($private_message->topic()) . '?page=last#last', '<i class="icon-comment icon-white"></i> ' . $new_messages, array('class' => 'badge badge-info', 'title' => __('New private messages'))); } unset($private_messages); // Blog comments $blog_comments = Model_Blog_Entry::factory()->find_new_comments($user); if (count($blog_comments)) { $new_comments = 0; foreach ($blog_comments as $blog_entry) { $new_comments += $blog_entry->new_comment_count; } $new['new-blog-comments'] = HTML::anchor(Route::model($blog_entry), '<i class="icon-comment icon-white"></i> ' . $new_comments, array('class' => 'badge badge-info', 'title' => __('New blog comments'))); } unset($blog_comments); // Forum quotes $forum_quotes = Model_Forum_Quote::factory()->find_by_user($user); if (count($forum_quotes)) { $new_quotes = count($forum_quotes); $quote = $forum_quotes->current(); $new['new-forum-quotes'] = HTML::anchor(Route::get('forum_post')->uri(array('topic_id' => $quote->forum_topic_id, 'id' => $quote->forum_post_id)) . '#post-' . $quote->forum_post_id, '<i class="icon-comment icon-white"></i> ' . $new_quotes, array('class' => 'badge badge-info', 'title' => __('Forum quotes'))); } // Images waiting for approval if (Permission::has(new Model_Gallery(), Model_Gallery::PERMISSION_APPROVE_WAITING, $user)) { $gallery_approvals = Model_Gallery::factory()->find_pending(Permission::has(new Model_Gallery(), Model_Gallery::PERMISSION_APPROVE, $user) ? null : $user); if (count($gallery_approvals)) { $new_approvals = count($gallery_approvals); $new['new-gallery-approvals'] = HTML::anchor(Route::get('galleries')->uri(array('action' => 'approval')), '<i class="icon-exclamation-sign icon-white"></i> ' . $new_approvals, array('class' => 'badge badge-warning', 'title' => __('Galleries waiting for approval'))); } } // Flyer comments $flyer_comments = Model_Flyer::factory()->find_new_comments($user); $flyers = array(); if (count($flyer_comments)) { $new_comments = 0; foreach ($flyer_comments as $flyer) { $flyers[$flyer->image_id] = true; $new_comments += $flyer->image()->new_comment_count; } $new['new-flyer-comments'] = HTML::anchor(Route::get('flyer')->uri(array('id' => $flyer->id, 'action' => '')), '<i class="icon-picture icon-white"></i> ' . $new_comments, array('class' => 'badge badge-info', 'title' => __('New flyer comments'))); } unset($flyer_comments); // Image comments $image_comments = Model_Image::factory()->find_new_comments($user); $note_comments = Model_Image_Note::factory()->find_new_comments($user); if (count($image_comments) || count($note_comments)) { $new_comments = 0; $new_image = null; foreach ($image_comments as $image) { // @TODO: Until flyer comments are fixed.. if (!isset($flyers[$image->id])) { $new_comments += $image->new_comment_count; $new_image_id = $image->id; } } foreach ($note_comments as $note) { $new_comments += $note->new_comment_count; $new_image_id = $note->image_id; } if ($new_comments) { $new['new-image-comments'] = HTML::anchor(Route::get('gallery_image')->uri(array('gallery_id' => Route::model_id(Model_Gallery::find_by_image($new_image_id)), 'id' => $new_image_id, 'action' => '')), '<i class="icon-camera icon-white"></i> ' . $new_comments, array('class' => 'badge badge-info', 'title' => __('New image comments'))); } } unset($image_comments, $note_comments, $new_image); // Image tags $notes = Model_Image_Note::factory()->find_new_notes($user); if (count($notes)) { $new_notes = 0; $new_note_image_id = null; /** @var Model_Image_Note $note */ foreach ($notes as $note) { $new_notes++; $new_note_image_id = $note->image_id; } if ($new_notes) { $new['new-image-notes'] = HTML::anchor(Route::get('gallery_image')->uri(array('gallery_id' => Route::model_id(Model_Gallery::find_by_image($new_note_image_id)), 'id' => $new_note_image_id, 'action' => '')), '<i class="icon-tag icon-white"></i> ' . $new_notes, array('class' => 'badge badge-info', 'title' => __('New image tags'))); } } unset($note_comments, $new_note_image_id); return $new; }