/** * Search */ public static function search($what, $options = array('state' => 1, 'created_by' => false)) { $terms = explode(' ', $what); $query = Content::select('content.id', 'content.title', 'content.slug', 'introtext', 'catid', 'created_by', 'created_by_alias', 'content.hits', 'content.created_at', 'categories.path', 'state'); if (isset($options['state']) && $options['state'] == 1) { $query->where('state', 1); } if (isset($options['created_by']) && $options['created_by'] !== false) { $query->where('created_by', $options['created_by']); } $query->whereNested(function ($query) use($terms) { foreach ($terms as $term) { if (mb_strlen($term, 'UTF-8') > 1) { $query->orWhere('content.title', 'LIKE', "%{$term}%"); $query->orWhere('content.introtext', 'LIKE', "%{$term}%"); $query->orWhere('content.fullcontent', 'LIKE', "%{$term}%"); } } }); return $query->join('categories', 'content.catid', '=', 'categories.id')->orderBy('id', 'desc')->paginate(20); }
/** Edit a content article * @access public * @return void * @throws Pas_Exception_Param */ public function editAction() { if ($this->getParam('id', false)) { $form = new ContentForm(); $form->submit->setLabel('Submit changes'); $form->author->setValue($this->getIdentityForForms()); $this->view->form = $form; if ($this->getRequest()->isPost() && $form->isValid($this->_request->getPost())) { if ($form->isValid($form->getValues())) { $updateData = $form->getValues(); $where = array(); $where[] = $this->_content->getAdapter()->quoteInto('id = ?', $this->getParam('id')); $oldData = $this->_content->fetchRow($this->_content->select()->where('id= ?', (int) $this->getParam('id')))->toArray(); $this->_helper->audit($updateData, $oldData, 'ContentAudit', $this->getParam('id'), $this->getParam('id')); $this->_content->update($updateData, $where); $this->_helper->solrUpdater->update('content', $this->getParam('id')); $this->getFlash()->addMessage('You updated successfully. It is now available for use.'); $this->getCache()->clean(Zend_Cache::CLEANING_MODE_ALL); $this->redirect('admin/content/'); } else { $form->populate($this->_request->getPost()); } } else { // find id is expected in $params['id'] $id = (int) $this->_request->getParam('id', 0); if ($id > 0) { $content = $this->_content->fetchRow('id=' . (int) $id)->toArray(); if ($content) { $form->populate($content); } else { throw new Pas_Exception_Param($this->_nothingFound); } } } } else { throw new Pas_Exception_Param($this->_missingParameter, 500); } }
function build_autos($items, $data, $user) { foreach ($items as $index => &$item) { if (isset($item['auto'])) { if (isset($data['urls'][$item['auto']])) { $item['path'] = $data['urls'][$item['auto']]; } else { if ($item['auto'] === 'set') { $item['path'] = ''; } } if ($item['auto'] === 'profile') { switch ($item['id']) { case 'twitter': $item['path'] = 'https://twitter.com/' . $user->twitter; break; default: $item['path'] = $user->{$item['id']}; if (empty($item['path'])) { unset($items[$index]); continue; } break; } if (!isset($item['label']) || empty($item['label'])) { $item['label'] = ucwords($item['id']) . ($item['id'] === 'google' ? '+' : ''); } } else { if ($item['auto'] === 'rss') { $item['path'] = '/feed/' . $item['id'] . ($item['id'] === 'essay' ? 's' : '') . '/recent.rss'; if (!isset($item['label'])) { $item['label'] = $data['url_data'][$item['id']]['plural'] . ' RSS'; } } else { if (preg_match('/s$/', $item['auto']) || $item['auto'] === 'timeline') { if ($item['auto'] === 'timeline' && isset($item['year'])) { $item['path'] .= $item['year'] . '/'; if (isset($item['month']) && $item['month'] !== false && $item['month'] !== 'any') { $m = str_pad($item['month'], 2, '0', STR_PAD_LEFT); $item['path'] .= $m . '/'; } } if (strpos($item['auto'], '_') !== false) { foreach (array('id', 'slug', 'month', 'year', 'day') as $id) { if ($id === 'month') { if (!isset($item['month']) || $item['month'] === 'any' || $item['month'] === false) { $item['month'] = ''; } else { $item['month'] = str_pad($item['month'], 2, '0', STR_PAD_LEFT); } } if ($id === 'day' && !isset($item['day'])) { $item['day'] = ''; } if ($id === 'slug' && !isset($item['slug']) && isset($item['id'])) { if (strpos($item['auto'], 'tag_') === 0) { $item['slug'] = $item['id']; } else { $c = new Category(); if (is_numeric($item['id'])) { $c->select('slug')->get_by_id($item['id']); $item['slug'] = $c->slug; } else { $item['slug'] = $item['id']; } } } if (isset($item[$id])) { $item['path'] = str_replace(":{$id}", $item[$id], $item['path']); } } } else { if (!isset($item['label'])) { $item['label'] = $data['url_data'][$item['auto'] === 'categories' ? 'category' : rtrim($item['auto'], 's')]['plural']; } } } else { if ($item['auto'] === 'home') { if (!isset($item['label'])) { $item['label'] = $data['url_data']['home']; } $item['path'] = '/home/'; } else { if ($item['auto'] === 'album' || $item['auto'] === 'set') { $a = new Album(); $a->select('id,slug,created_on,title'); if (is_numeric($item['id'])) { $a->where('id', $item['id']); } else { $a->where('slug', $item['id'])->or_where('internal_id', $item['id']); } $a->get(); if (!$a->exists()) { unset($items[$index]); continue; } $item['path'] = str_replace(':id', $a->id, $item['path']); $item['path'] = str_replace(':slug', $a->slug, $item['path']); $item['path'] = str_replace(':year', date('Y', $a->created_on), $item['path']); $item['path'] = str_replace(':month', date('m', $a->created_on), $item['path']); $item['path'] = str_replace(':day', date('d', $a->created_on), $item['path']); if (!isset($item['label'])) { $item['label'] = $a->title; } } else { if ($item['auto'] === 'page' || $item['auto'] === 'essay') { $t = new Text(); $t->select('id,slug,published_on,title'); if (is_numeric($item['id'])) { $t->where('id', $item['id']); } else { $t->where('slug', $item['id']); } $t->get(); if (!$t->exists()) { unset($items[$index]); continue; } $item['path'] = str_replace(':id', $t->id, $item['path']); $item['path'] = str_replace(':slug', $t->slug, $item['path']); $item['path'] = str_replace(':year', date('Y', $t->published_on), $item['path']); $item['path'] = str_replace(':month', date('m', $t->published_on), $item['path']); $item['path'] = str_replace(':day', date('d', $t->published_on), $item['path']); if (!isset($item['label'])) { $item['label'] = $t->title; } } else { if ($item['auto'] === 'content') { $c = new Content(); $c->select('id,slug,captured_on,title'); if (isset($item['album_id'])) { $item['path'] = preg_replace('/:(id|slug)/', ':album_$1', $data['urls']['album']) . substr(str_replace(':year/:month/', '', $data['urls']['content']), 1); $a = new Album(); $a->select('id,slug,created_on,title'); if (is_numeric($item['album_id'])) { $a->where('id', $item['album_id']); } else { $a->where('slug', $item['album_id'])->or_where('internal_id', $item['album_id']); } $a->get(); if (!$a->exists()) { unset($items[$index]); continue; } $item['path'] = str_replace(':album_id', $a->id, $item['path']); $item['path'] = str_replace(':album_slug', $a->slug, $item['path']); $date = $a->created_on; } else { $date = $c->captured_on; } if (is_numeric($item['id'])) { $c->where('id', $item['id']); } else { $c->where('slug', $item['id'])->or_where('internal_id', $item['id']); } $c->get(); if (!$c->exists()) { unset($items[$index]); continue; } $item['path'] = str_replace(':id', $c->id, $item['path']); $item['path'] = str_replace(':slug', $c->slug, $item['path']); $item['path'] = str_replace(':year', date('Y', $date), $item['path']); $item['path'] = str_replace(':month', date('m', $date), $item['path']); $item['path'] = str_replace(':day', date('d', $date), $item['path']); if (!isset($item['label'])) { $item['label'] = $c->title; } if (isset($item['lightbox']) && $item['lightbox']) { $item['path'] .= 'lightbox/'; } } else { if ($item['auto'] === 'tag') { $item['path'] = str_replace(':slug', $item['id'], $item['path']); } } } } } } } } if ($item['auto'] !== 'profile') { $item['path'] = str_replace(array(':year', ':month'), '', $item['path']); $item['path'] = preg_replace('/[\\(\\)\\?\\:]/', '', $item['path']); $item['path'] = preg_replace('~[/]+~', '/', $item['path']); } } } return $items; }
<?php $s = new Slug(); $slug_count = $s->like('id', 'content.', 'after')->count(); $c = new Content(); $content_count = $c->count(); if ($slug_count < $content_count) { $slugs = array(); $c = new Content(); foreach ($c->select('slug')->get_iterated() as $content) { $slugs[] = "('content." . $content->slug . "')"; } $slugs = join(', ', $slugs); $this->db->query("INSERT INTO {$s->table}(id) VALUES {$slugs} ON DUPLICATE KEY UPDATE id=id;"); } $done = true;
/** * rateContent() - handles rating a content * @param int @id - which content * @return void */ public function rateContent($id) { try { $content = Content::select('id')->findOrFail($id); } catch (Exception $e) { App::abort(404); } $rating = ContentRating::select('id', 'rating_sum', 'rating_count', 'lastip')->where('content_id', $id)->first(); $sanitize = new Sanitizer(Input::all()); Input::merge($sanitize->get()); $validate = new ContentRating(); if ($validate->validate(Input::all())) { if ($rating) { // Update and save if (Request::getClientIp() != $rating->lastip) { $rating->rating_sum = $rating->rating_sum + Input::get('rate'); $rating->rating_count = $rating->rating_count + 1; $rating->lastip = Request::getClientIp(); $rating->save(); //return with success message } else { return Redirect::back()->withErrors(array('failure' => 'Вече сте гласували за този урок.')); } } else { // First time voting for this content, we have to make a new record in the database $validate->content_id = $id; $validate->rating_sum = Input::get('rate'); $validate->rating_count = 1; $validate->lastip = Request::getClientIp(); $validate->save(); } return Redirect::back()->withErrors(array('success' => 'Вашият глас беше записан успешно.')); } return Redirect::back()->withErrors(array('failure' => 'Грешка, моля опитайте отново.')); }
function aggregate($type, $options = array()) { $options = array_merge(array('featured' => false), $options); $shared_params = array(); if ($type === 'tag') { $shared_params['tags'] = $options['tag_slug']; } else { if ($type === 'category') { $shared_params['category'] = $options['category']; } } $album_params = $shared_params; $date_marker = false; if ($type === 'date') { $s = new Setting(); $s->where('name', 'site_timezone')->get(); $tz = new DateTimeZone($s->value); $offset = $tz->getOffset(new DateTime('now', new DateTimeZone('UTC'))); if ($offset === 0) { $shift = ''; } else { $shift = ($offset < 0 ? '-' : '+') . abs($offset); } // Need to - the offset here, as we need to shift this timestamp by the inverse of the offset to match DB UTC time. // For example. Midnight in user's time (say, CT -5) is UTC+5. $album_params['before'] = $date_marker = strtotime("{$options['year']}-{$options['month']}-{$options['day']} 23:59:59") - $offset; } $aggregate = $essay_ids = $album_ids = $content_ids = $updated_album_ids = $exclude_albums = $exclude_content = $sets = $range = array(); $t = new Text(); $t->select('id, featured, featured_image_id, published_on')->where('page_type', 0)->where('published', 1); if ($type === 'date') { $t->where("YEAR(FROM_UNIXTIME({$t->table}.published_on{$shift}))", $options['year'])->where("MONTH(FROM_UNIXTIME({$t->table}.published_on{$shift}))", $options['month'])->where("DAY(FROM_UNIXTIME({$t->table}.published_on{$shift}))", $options['day']); } else { if ($type === 'tag') { $t->where_related('tag', 'id', $options['tag']); } else { $t->where_related('category', 'id', $options['category']); } } if ($options['featured']) { $t->where('featured', 1); } $t->include_related('album', 'id')->order_by($t->table . '.published_on DESC')->get_iterated(); foreach ($t as $essay) { $essay_ids[$essay->id] = $essay->published_on; $aggregate[] = array('type' => 'essay', 'id' => $essay->id, 'date' => $essay->published_on, 'featured' => $essay->featured); if ($essay->album_id) { $exclude_albums[] = $essay->album_id; } if (is_numeric($essay->featured_image_id)) { $exclude_content[] = $essay->featured_image_id; } } $a = new Album(); $a->select('id, featured, published_on, left_id, right_id, level')->where('visibility', 0)->where('deleted', 0)->where('total_count >', 0); if ($type === 'date') { $a->where("YEAR(FROM_UNIXTIME({$a->table}.published_on{$shift}))", $options['year'])->where("MONTH(FROM_UNIXTIME({$a->table}.published_on{$shift}))", $options['month'])->where("DAY(FROM_UNIXTIME({$a->table}.published_on{$shift}))", $options['day']); } else { if ($type === 'tag') { $a->where_related('tag', 'id', $options['tag']); } else { $a->where_related('category', 'id', $options['category']); } } if ($options['featured']) { $a->where('featured', 1); } $a->include_related('content', 'id')->order_by($a->table . '.published_on DESC')->get_iterated(); foreach ($a as $album) { if (is_numeric($album->content_id)) { $exclude_content[] = $album->content_id; } if (!array_key_exists($album->id, $album_ids) && !in_array($album->id, $exclude_albums)) { $album_ids[$album->id] = $album->published_on; $aggregate[] = array('type' => 'album', 'id' => $album->id, 'date' => $album->published_on, 'featured' => $album->featured); } if ($album->level < 2) { $range = array_merge($range, range($album->left_id, $album->right_id)); } if ($album->level > 1) { $sets[$album->id] = $album->left_id; } } foreach ($sets as $id => $left) { if (in_array($left, $range)) { unset($album_ids[$id]); foreach ($aggregate as $i => $info) { if ($info['type'] === 'album' && $info['id'] == $id) { unset($aggregate[$i]); } } } } $c = new Content(); $c->select('id, published_on, featured'); if (!empty($exclude_content)) { $c->where_not_in('id', $exclude_content); } $c->where('visibility', 0)->where('deleted', 0); if ($type === 'date') { $c->include_related('album')->where("YEAR(FROM_UNIXTIME({$c->table}.published_on{$shift}))", $options['year'])->where("MONTH(FROM_UNIXTIME({$c->table}.published_on{$shift}))", $options['month'])->where("DAY(FROM_UNIXTIME({$c->table}.published_on{$shift}))", $options['day'])->group_start()->where($a->table . '.id', null)->or_where($a->table . '.deleted', 0)->group_end(); } else { if ($type === 'tag') { $c->where_related('tag', 'id', $options['tag']); } else { $c->where_related('category', 'id', $options['category']); } } if ($options['featured']) { $c->where('featured', 1); } $c->order_by($c->table . '.published_on DESC')->get_iterated(); foreach ($c as $content) { if ($content->album_id && $content->album_visibility < 1 && $content->album_published_on <= $date_marker) { if (!isset($updated_album_ids[$content->album_id])) { $updated_album_ids[$content->album_id] = array('items' => array($content->id), 'date' => $content->published_on, 'featured' => $content->album_featured); } else { $updated_album_ids[$content->album_id]['items'][] = $content->id; $updated_album_ids[$content->album_id]['date'] = max($content->published_on, $updated_album_ids[$content->album_id]['date']); } } else { if (!$content->album_id) { $content_ids[$content->id] = $content->published_on; $aggregate[] = array('type' => 'content', 'id' => $content->id, 'date' => $content->published_on, 'featured' => $content->featured); } } } foreach ($updated_album_ids as $id => $a) { $aggregate[] = array('type' => 'updated_album', 'id' => $id, 'date' => $a['date'], 'featured' => $a['featured']); } $total = count($aggregate); if (!function_exists('_sort')) { function _sort($one, $two) { if ($one['featured'] && !$two['featured']) { return -1; } else { if ($one['featured'] && $two['featured']) { return $one['date'] < $two['date'] ? 1 : -1; } } return $two['featured'] || $one['date'] < $two['date'] || $one['date'] === $two['date'] && $two['id'] > $one['id'] ? 1 : -1; } } usort($aggregate, '_sort'); $stream = array('page' => (int) isset($options['page']) ? (int) $options['page'] : 1, 'pages' => (int) ceil($total / $options['limit']), 'per_page' => (int) min($options['limit'], $total), 'total' => (int) $total); $load = array_slice($aggregate, ($stream['page'] - 1) * $options['limit'], $options['limit']); $counts = array('essays' => count($essay_ids), 'albums' => count($album_ids), 'content' => count($content_ids)); $counts['total'] = $counts['essays'] + $counts['albums'] + $counts['content']; $updated_album_ids_arr = $updated_album_ids; $essay_ids = $album_ids = $content_ids = $updated_album_ids = $final = $index = array(); foreach ($load as $i => $item) { $index[$item['type'] . '-' . $item['id']] = $i; ${$item['type'] . '_ids'}[] = $item['id']; } if (!empty($essay_ids)) { $e = new Text(); $e->where_in('id', $essay_ids)->get_iterated(); foreach ($e as $essay) { $final[$index['essay-' . $essay->id]] = $essay->to_array($shared_params); } } if (!empty($album_ids)) { $a = new Album(); $a->where_in('id', $album_ids)->get_iterated(); foreach ($a as $album) { $final[$index['album-' . $album->id]] = $album->to_array($album_params); } } if (!empty($content_ids)) { $c = new Content(); $c->where_in('id', $content_ids)->get_iterated(); foreach ($c as $content) { $final[$index['content-' . $content->id]] = $content->to_array(array_merge($shared_params, array('order_by' => 'published_on'))); } } if (!empty($updated_album_ids)) { $a = new Album(); $a->where_in('id', $updated_album_ids)->get_iterated(); foreach ($a as $album) { $arr = $album->to_array(); $arr['event_type'] = 'album_update'; $arr['content'] = array(); $info = $updated_album_ids_arr[$album->id]; $c = new Content(); $c->where_in('id', $info['items'])->order_by('published_on DESC')->get_iterated(); foreach ($c as $i => $content) { $carr = $content->to_array(array('order_by' => 'published_on', 'in_album' => $album)); if ($i === 0) { $arr['date'] = $carr['date']; } $arr['content'][] = $carr; } $final[$index['updated_album-' . $album->id]] = $arr; } } ksort($final); $stream['items'] = array_values($final); return array($stream, $counts); }
function listing($params, $id = false) { $sort = $this->_get_site_order('content'); $options = array('order_by' => $sort['by'], 'order_direction' => $sort['direction'], 'search' => false, 'search_filter' => false, 'tags' => false, 'tags_not' => false, 'page' => 1, 'match_all_tags' => false, 'limit' => 100, 'include_presets' => true, 'featured' => null, 'types' => false, 'auth' => false, 'favorites' => null, 'before' => false, 'after' => false, 'after_column' => 'uploaded_on', 'before_column' => 'uploaded_on', 'category' => false, 'category_not' => false, 'year' => false, 'year_not' => false, 'month' => false, 'month_not' => false, 'day' => false, 'day_not' => false, 'in_album' => false, 'reduce' => false, 'is_cover' => true, 'independent' => false); $options = array_merge($options, $params); if (isset($params['order_by']) && !isset($params['order_direction'])) { $options['order_direction'] = in_array($params['order_by'], array('title', 'filename')) ? 'ASC' : 'DESC'; } Shutter::hook('content.listing', array($this, $options)); if ($options['featured'] == 1 && !isset($params['order_by'])) { $options['order_by'] = 'featured_on'; } else { if ($options['favorites'] == 1 && !isset($params['order_by'])) { $options['order_by'] = 'favorited_on'; } } if ($options['auth']) { if (isset($options['visibility']) && $options['visibility'] !== 'album') { $values = array('public', 'unlisted', 'private'); if (in_array($options['visibility'], $values)) { $options['visibility'] = array_search($options['visibility'], $values); } else { if ($options['visibility'] === 'any') { $options['visibility'] = false; } else { $options['visibility'] = 0; } } } else { if (!isset($options['visibility']) || $options['visibility'] !== 'album') { $options['visibility'] = 0; } } } else { if ($options['in_album']) { $options['visibility'] = 'album'; } else { $options['visibility'] = 0; } } if ($options['visibility'] > 0 && $options['order_by'] === 'published_on') { $options['order_by'] = 'captured_on'; } if ($options['order_by'] == 'dimension') { $options['order_by'] = 'width * height'; } if (is_numeric($options['limit']) && $options['limit'] > 0) { $options['limit'] = min($options['limit'], 100); } else { $options['limit'] = 100; } if ($options['independent']) { $this->where_related('album', 'id', null); } if ($options['types']) { $types = explode(',', str_replace(' ', '', $options['types'])); $this->group_start(); foreach ($types as $t) { switch ($t) { case 'photo': $this->or_where('file_type', 0); break; case 'video': $this->or_where('file_type', 1); break; case 'audio': $this->or_where('file_type', 2); break; } } $this->group_end(); } if ($options['search'] && $options['search_filter'] === 'tags') { $options['tags'] = $options['search']; $options['search'] = false; } if ($options['search']) { $term = urldecode($options['search']); if ($options['search_filter']) { if ($options['search_filter'] === 'category') { $cat = new Category(); $cat->where('title', $term)->get(); if ($cat->exists()) { $this->where_related('category', 'id', $cat->id); } else { $this->where_related('category', 'id', 0); } } else { $this->group_start(); $this->like($options['search_filter'], $term, 'both'); $this->group_end(); } } else { $this->group_start(); $this->like('title', $term, 'both'); $this->or_like('caption', $term, 'both'); $t = new Tag(); $t->where('name', $term)->get(); if ($t->exists()) { $this->or_where_related('tag', 'id', $t->id); } $this->group_end(); } } else { if ($options['tags'] || $options['tags_not']) { $this->_do_tag_filtering($options); } } if (!is_null($options['featured'])) { $this->where('featured', $options['featured']); } if (!is_null($options['favorites'])) { $this->where('favorite', $options['favorites']); } if ($options['category']) { $this->where_related('category', 'id', $options['category']); } else { if ($options['category_not']) { $cat = new Content(); $cat->select('id')->where_related('category', 'id', $options['category_not'])->get_iterated(); $cids = array(); foreach ($cat as $c) { $cids[] = $c->id; } $this->where_not_in('id', $cids); } } if ($options['after']) { $this->where($options['after_column'] . ' >=', $options['after']); } if ($options['before']) { $this->where($options['before_column'] . ' <=', $options['before']); } if ($options['visibility'] === 'album') { $this->where('visibility <', $options['in_album']->visibility + 1); } else { if ($options['visibility'] !== false) { $this->where('visibility', $options['visibility']); } } if ($id) { $sql_order = "ORDER BY FIELD(id,{$id})"; $id = explode(',', $id); $this->where_in('id', $id); } if ($options['order_by'] === 'captured_on' || $options['order_by'] === 'uploaded_on' || $options['order_by'] === 'modified_on' || $options['order_by'] === 'published_on') { $bounds_order = $options['order_by']; } else { $bounds_order = 'published_on'; } $s = new Setting(); $s->where('name', 'site_timezone')->get(); $tz = new DateTimeZone($s->value); $offset = $tz->getOffset(new DateTime('now', new DateTimeZone('UTC'))); if ($offset === 0) { $shift = ''; } else { $shift = ($offset < 0 ? '-' : '+') . abs($offset); } // Do this before date filters are applied $bounds = $this->get_clone()->select('COUNT(DISTINCT ' . $this->table . '.id) as count, MONTH(FROM_UNIXTIME(' . $bounds_order . $shift . ')) as month, YEAR(FROM_UNIXTIME(' . $bounds_order . $shift . ')) as year')->group_by('month,year')->order_by('year')->get_iterated(); $dates = array(); foreach ($bounds as $b) { if (!is_numeric($b->year)) { continue; } if (!isset($dates[$b->year])) { $dates[$b->year] = array(); } $dates[$b->year][$b->month] = (int) $b->count; } if (in_array($options['order_by'], array('captured_on', 'uploaded_on', 'modified_on'))) { $date_col = $options['order_by']; } else { $date_col = 'published_on'; } if ($options['year'] || $options['year_not']) { if ($options['year_not']) { $options['year'] = $options['year_not']; $compare = ' !='; } else { $compare = ''; } $this->where('YEAR(FROM_UNIXTIME(' . $date_col . $shift . '))' . $compare, $options['year']); } if ($options['month'] || $options['month_not']) { if ($options['month_not']) { $options['month'] = $options['month_not']; $compare = ' !='; } else { $compare = ''; } $this->where('MONTH(FROM_UNIXTIME(' . $date_col . $shift . '))' . $compare, $options['month']); } if ($options['day'] || $options['day_not']) { if ($options['day_not']) { $options['day'] = $options['day_not']; $compare = ' !='; } else { $compare = ''; } $this->where('DAY(FROM_UNIXTIME(' . $date_col . $shift . '))' . $compare, $options['day']); if ($options['reduce']) { $a = new Album(); $a->select('id')->where('deleted', 0)->where('visibility', 0)->where('YEAR(FROM_UNIXTIME(' . $a->table . '.published_on' . $shift . '))', $options['year'])->where('MONTH(FROM_UNIXTIME(' . $a->table . '.published_on' . $shift . '))', $options['month'])->where('DAY(FROM_UNIXTIME(' . $a->table . '.published_on' . $shift . '))', $options['day'])->include_related('content', 'id')->get_iterated(); $ids = array(); foreach ($a as $album) { if ($album->content_id) { $ids[] = $album->content_id; } } $e = new Text(); $e->select('featured_image_id')->where('page_type', 0)->where('published', 1)->where('featured_image_id >', 0)->where('YEAR(FROM_UNIXTIME(' . $e->table . '.published_on' . $shift . '))', $options['year'])->where('MONTH(FROM_UNIXTIME(' . $e->table . '.published_on' . $shift . '))', $options['month'])->where('DAY(FROM_UNIXTIME(' . $e->table . '.published_on' . $shift . '))', $options['day'])->get_iterated(); foreach ($e as $essay) { if ($essay->featured_image_id) { $ids[] = $essay->featured_image_id; } } if (!empty($ids)) { $this->where_not_in('id', $ids); } } } $vid_count = $this->get_clone()->where('file_type', 1)->count(); $aud_count = $this->get_clone()->where('file_type', 2)->count(); $final = $this->paginate($options); $final['dates'] = $dates; $this->include_related_count('albums', NULL, array('visibility' => 0)); $this->include_related_count('categories'); if ($id && !isset($params['order_by'])) { $q = explode('LIMIT', $this->get_sql()); $query = $q[0] . $sql_order . ' LIMIT ' . $q[1]; $data = $this->query($query); } else { if ($options['order_by'] === 'title') { $q = explode('LIMIT', $this->get_sql()); $query = preg_replace('/SELECT\\s(`[^`]+`\\.\\*)/', "SELECT COALESCE(NULLIF(title, ''), filename) as order_title, \$1", $q[0]); $query .= 'ORDER BY order_title ' . $options['order_direction'] . ' LIMIT ' . $q[1]; $data = $this->query($query); } else { $data = $this->order_by($options['order_by'] . ' ' . $options['order_direction'] . ', id ' . $options['order_direction'])->get_iterated(); } } if (!$options['limit']) { $final['per_page'] = $data->result_count(); $final['total'] = $data->result_count(); } $final['counts'] = array('videos' => $vid_count, 'audio' => $aud_count, 'images' => $final['total'] - $vid_count - $aud_count, 'total' => $final['total']); $final['content'] = array(); $final['sort'] = $sort; $tag_map = $this->_eager_load_tags($data); foreach ($data as $content) { $tags = isset($tag_map['c' . $content->id]) ? $tag_map['c' . $content->id] : array(); $options['eager_tags'] = $tags; $final['content'][] = $content->to_array($options); } return $final; }
function _do_match_visibility($params = false) { if (!$params) { $params = array('left_id' => $this->left_id, 'right_id' => $this->right_id, 'visibility' => $this->visibility); } $aggregator = new Album(); $aggregator->select('id')->where('left_id >=', $params['left_id'])->where('right_id <=', $params['right_id'])->get_iterated(); $ids = array(); foreach ($aggregator as $album) { $ids[] = $album->id; } $c = new Content(); $c->select('id')->where_in_related('album', 'id', $ids)->get_iterated(); $cids = array(); foreach ($c as $content) { $cids[] = $content->id; } if (count($cids)) { $c = new Content(); $c->where_in('id', $cids); if ($this->old_visibility < 2) { $c->where('visibility <', 2); } $c->update(array('visibility' => $params['visibility'])); } }
function _all($params) { $s = new Setting(); $s->where('name', 'site_timezone')->get(); $tz = new DateTimeZone($s->value); $offset = $tz->getOffset(new DateTime('now', new DateTimeZone('UTC'))); if ($offset === 0) { $shift = ''; } else { $shift = ($offset < 0 ? '-' : '+') . abs($offset); } $content_col = $params['content_column']; $select = "COUNT(*) as count, YEAR(FROM_UNIXTIME({$content_col}{$shift})) as event_year"; $group = 'event_year'; $order = 'event_year DESC'; if (!$params['scope'] || $params['scope'] !== 'year') { $select .= ", MONTH(FROM_UNIXTIME({$content_col}{$shift})) as event_month"; $group .= ',event_month'; $order .= ',event_month DESC'; } if (!$params['limit_to'] && !$params['scope']) { $select .= ", DAY(FROM_UNIXTIME({$content_col}{$shift})) as event_day"; $group .= ',event_day'; $order .= ',event_day DESC'; } $a = new Album(); $c = new Content(); $t = new Text(); $c->select(str_replace($content_col, $c->table . '.' . $content_col, $select))->include_related('album', 'id')->where('visibility', 0)->where('deleted', 0); if (!$params['limit_to']) { $c->group_start()->where('album_id', null)->or_where($c->table . '.published_on > `' . $a->table . '`.`published_on`')->group_end(); } $a->select(str_replace($content_col, 'published_on', $select))->where('visibility', 0)->where('deleted', 0)->where('total_count >', 0); $t->select(str_replace($content_col, 'published_on', $select))->where('page_type', 0)->where('published', 1); if ($params['featured']) { $c->where('featured', 1); $a->where('featured', 1); $t->where('featured', 1); } $c->group_by($group)->order_by($order); $t->group_by($group)->order_by($order); $a->group_by($group)->order_by($order); $dates = array(); if (!$params['limit_to'] || $params['limit_to'] === 'content') { foreach ($c->get_iterated() as $content) { if ($params['scope'] === 'year') { $key = "{$content->event_year}"; } else { if ($params['limit_to'] || $params['scope']) { $key = "{$content->event_year}-{$content->event_month}"; } else { $key = "{$content->event_year}-{$content->event_month}-{$content->event_day}"; } } $key = strtotime($key); if (is_numeric($content->event_year)) { $dates[$key] = array('year' => (int) $content->event_year, 'month' => (int) $content->event_month, 'day' => (int) $content->event_day, 'counts' => array('content' => (int) $content->count, 'albums' => 0, 'essays' => 0)); } } } if (!$params['limit_to'] || $params['limit_to'] === 'albums') { foreach ($a->get_iterated() as $album) { if ($params['scope'] === 'year') { $key = "{$album->event_year}"; } else { if ($params['limit_to'] || $params['scope']) { $key = "{$album->event_year}-{$album->event_month}"; } else { $key = "{$album->event_year}-{$album->event_month}-{$album->event_day}"; } } $key = strtotime($key); if (is_numeric($album->event_year)) { if (!isset($dates[$key])) { $dates[$key] = array('year' => (int) $album->event_year, 'month' => (int) $album->event_month, 'day' => (int) $album->event_day, 'counts' => array('content' => 0, 'albums' => (int) $album->count, 'essays' => 0)); } else { $dates[$key]['counts']['albums'] = (int) $album->count; } } } } if (!$params['limit_to'] || $params['limit_to'] === 'essays') { foreach ($t->get_iterated() as $essay) { if ($params['scope'] === 'year') { $key = "{$essay->event_year}"; } else { if ($params['limit_to'] || $params['scope']) { $key = "{$essay->event_year}-{$essay->event_month}"; } else { $key = "{$essay->event_year}-{$essay->event_month}-{$essay->event_day}"; } } $key = strtotime($key); if (is_numeric($essay->event_year)) { if (!isset($dates[$key])) { $dates[$key] = array('year' => (int) $essay->event_year, 'month' => (int) $essay->event_month, 'day' => (int) $essay->event_day, 'counts' => array('content' => 0, 'albums' => 0, 'essays' => (int) $essay->count)); } else { $dates[$key]['counts']['essays'] = (int) $essay->count; } } } } krsort($dates); return $dates; }