/** * Render view. * * @return string */ public function content() { ob_start(); $foursquare = $this->venue->foursquare(); if (!$foursquare) { echo new View_Alert(__('This venue has not been linked to Foursquare yet.'), null, View_Alert::INFO); } else { // Homepage echo HTML::anchor(Arr::path($foursquare, 'short_url'), HTML::image(Arr::path($foursquare, 'primarycategory.iconurl'), array('alt' => HTML::chars(Arr::path($foursquare, 'primarycategory.nodename')), 'title' => HTML::chars(Arr::path($foursquare, 'primarycategory.nodename')))) . ' ' . HTML::chars(Arr::path($foursquare, 'primarycategory.nodename'))), '<br />'; // Mayor if ($mayor = Arr::path($foursquare, 'stats.mayor.user')) { echo __('Mayor: :mayor, :city', array(':mayor' => HTML::anchor('http://foursquare.com/user/' . Arr::get($mayor, 'id'), HTML::chars(Arr::get($mayor, 'firstname')) . ' ' . HTML::chars(Arr::get($mayor, 'lastname'))), ':city' => HTML::chars($mayor['homecity']))), '<br />'; } // Checkins echo __('Check-ins: :checkins', array(':checkins' => '<var>' . Arr::path($foursquare, 'stats.checkins') . '</var>')), '<br />'; // Here now echo __('Here now: :herenow', array(':herenow' => '<var>' . Arr::path($foursquare, 'stats.herenow') . '</var>')), '<br />'; // Tips if ($tips = Arr::path($foursquare, 'tips')) { echo '<h5>', __('Tips (:tips)', array(':tips' => '<var>' . count($tips) . '</var>')), '</h5><dl>'; foreach (array_slice($tips, 0, 5) as $tip) { echo '<dt>', HTML::anchor('http://foursquare.com/user/' . Arr::path($tip, 'user.id'), HTML::chars(Arr::path($tip, 'user.firstname')) . ' ' . HTML::chars(Arr::path($tip, 'user.lastname'))), ', ', HTML::chars(Arr::path($tip, 'user.homecity')), ':</dt>'; echo '<dd>', Text::auto_p(HTML::chars(Arr::path($tip, 'text'))), '</dd>'; } echo '</dl>'; } } // Admin controls if (Permission::has($this->venue, Model_Venue::PERMISSION_UPDATE)) { echo HTML::anchor('#map', __('Link to Foursquare'), array('class' => 'action', 'id' => 'link-foursquare')); echo $this->form(); } return ob_get_clean(); }
public static function createVenue($system_venue_id, $venue, $region_id = false) { $BaseVenue = new \Model_Venue(); $BaseVenue->id = $system_venue_id; $BaseVenue->name = $venue->name; $BaseVenue->lat = $venue->location->lat; $BaseVenue->lng = $venue->location->lng; $BaseVenue->street = isset($venue->location->address) ? $venue->location->address : '-'; $BaseVenue->postalCode = isset($venue->location->postalCode) ? $venue->location->postalCode : 0; $BaseVenue->city = isset($venue->location->city) ? $venue->location->city : '-'; $BaseVenue->state = isset($venue->location->state) ? $venue->location->state : '-'; $BaseVenue->cc = $venue->location->cc; $BaseVenue->region_id = $region_id; $BaseVenue->save(); }
/** * 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) { case self::TYPE_VENUE: case self::TYPE_VENUE_EDIT: $venue = Model_Venue::factory($item->data['venue_id']); if ($venue->loaded()) { $text = HTML::anchor(Route::model($venue), '<i class="fa fa-map-marker"></i> ' . HTML::chars($venue->name), array('class' => 'venue')); } break; } return $text; }
public function get_venues() { $text = \Input::get('query'); if (!$text) { return $this->response(array()); } $result = \DB::select()->from('venue')->join('roles', 'LEFT')->on('roles.id', '=', 'users.role_id'); $Results = \Model_Venue::query()->where('region_id', 1)->limit(100)->get(); $response = array(); foreach ($Results as $Result) { $response[] = $Result->name; } return $this->response($response); }
/** * Get newsfeed item as HTML * * @static * @param Model_NewsfeedItem $item * @return string */ public static function get(Model_NewsFeedItem $item) { $text = ''; switch ($item->type) { case self::TYPE_VENUE: $venue = Model_Venue::factory($item->data['venue_id']); if ($venue->loaded()) { $text = __('added new venue<br />:venue', array(':venue' => HTML::anchor(Route::model($venue), '<i class="icon-map-marker icon-white"></i> ' . HTML::chars($venue->name), array('class' => 'venue')))); } break; case self::TYPE_VENUE_EDIT: $venue = Model_Venue::factory($item->data['venue_id']); if ($venue->loaded()) { $text = __('updated venue<br />:venue', array(':venue' => HTML::anchor(Route::model($venue), '<i class="icon-map-marker icon-white"></i> ' . HTML::chars($venue->name), array('class' => 'venue')))); } break; } return $text; }
/** * Render view. * * @return string */ public function content() { ob_start(); echo Form::open(); if ($this->venue_duplicate) { // Confirm $venue = new View_Venue_Info($this->venue); $duplicate = new View_Venue_Info($this->venue_duplicate); ?> <div class="col-sm-3"> <h3><?php echo HTML::anchor(Route::model($this->venue_duplicate), HTML::chars($this->venue_duplicate->name)); ?> </h3> #<?php echo $this->venue_duplicate->id; ?> <?php echo $duplicate->content(); ?> </div> <div class="col-sm-1"> <h3><?php echo __('to'); ?> </h3> </div> <div class="col-sm-3"> <h3><?php echo HTML::anchor(Route::model($this->venue), HTML::chars($this->venue->name)); ?> </h3> #<?php echo $this->venue->id; ?> <?php echo $venue->content(); ?> </div> <div class="col-sm-1"> <?php echo HTML::anchor(Route::model($this->venue, 'combine') . '/' . $this->venue_duplicate->id . '?' . Security::csrf_query(), __('Merge'), array('class' => 'btn btn-primary')); ?> </div> <?php } else { // Select duplicate echo Form::input_wrap('venue', null, null, __('Combine to')); ?> <script> head.ready('anqh', function() { var venues = <?php echo json_encode(Model_Venue::factory()->find_all_autocomplete($this->venue->id)); ?> ; $('input[name=venue]').autocompleteVenue({ source: venues, action: function(event, ui) { window.location = window.location + '/' + ui.item.id; } }); }); </script> <?php } echo Form::close(); return ob_get_clean(); }
/** * Action: search */ public function action_search() { $this->data['venues'] = array(); $term = trim(Arr::get($_REQUEST, 'q', '')); $search = explode(':', Arr::get($_REQUEST, 'search', 'name')); $limit = (int) Arr::get($_REQUEST, 'limit', 25); $order = Arr::get($_REQUEST, 'order', 'name.asc'); $field = explode(':', Arr::get($_REQUEST, 'field', 'id:name:city')); // Term must be at least 2 characters if (strlen($term) >= 3) { // 500 events max $limit = min($limit, 500); // Get order $orders = $this->_prepare_order($order, self::$_orderable); $orders = empty($orders) ? array('name' => 'asc') : $orders; // Get fields $fields = empty($field) ? self::$_fields : array_intersect($field, self::$_fields); $fields = empty($fields) ? array('id', 'name') : $fields; // Get search $searches = empty($search) ? self::$_searchable : array_intersect($search, self::$_searchable); $searches = empty($searches) ? array('name') : $searches; // Build query $venue = new Model_Venue(); $venues = DB::select_array($venue->fields()); foreach ($orders as $column => $direction) { $venues->order_by($column, $direction); } $venues->where_open(); foreach ($searches as $search) { if ($search == 'city') { $search .= '_name'; } $venues->or_where($search, 'ILIKE', '%' . $term . '%'); } $venues->where_close(); // Build data foreach ($venue->load($venues, $limit) as $venue) { $this->data['venues'][] = $this->_prepare_venue($venue, $fields); } } }
/** * Get event venue * * @return Model_Venue */ public function venue() { try { return $this->venue_id ? Model_Venue::factory($this->venue_id) : null; } catch (AutoModeler_Exception $e) { return null; } }
/** * Get JavaScripts. * * @return string */ public function javascript() { // Date picker options $datepicker = array('changeMonth' => true, 'changeYear' => true, 'dateFormat' => 'd.m.yy', 'dayNames' => array(__('Sunday'), __('Monday'), __('Tuesday'), __('Wednesday'), __('Thursday'), __('Friday'), __('Saturday')), 'dayNamesMin' => array(__('Su'), __('Mo'), __('Tu'), __('We'), __('Th'), __('Fr'), __('Sa')), 'firstDay' => 1, 'monthNames' => array(__('January'), __('February'), __('March'), __('April'), __('May'), __('June'), __('July'), __('August'), __('September'), __('October'), __('November'), __('December')), 'monthNamesShort' => array(__('Jan'), __('Feb'), __('Mar'), __('Apr'), __('May'), __('Jun'), __('Jul'), __('Aug'), __('Sep'), __('Oct'), __('Nov'), __('Dec')), 'nextText' => '►', 'prevText' => '◄', 'showWeek' => true, 'showOtherMonths' => true, 'weekHeader' => __('Wk')); $venues = Model_Venue::factory()->find_all_autocomplete(); // Venues, Maps and tickets ob_start(); ?> <script> head.ready('anqh', function() { // Tickets $('#field-free input').on('click', function() { console.log($(this).is(':checked')); if ($(this).is(':checked')) { $('input[name=price]').attr('disabled', 'disabled'); } else { $('input[name=price]').removeAttr('disabled'); } }); // Venue $('#field-ug input').on('click', function() { console.log(this.checked); if ($(this).is(':checked')) { $('input[name=venue_name]').attr('disabled', 'disabled'); } else { $('input[name=venue_name]').removeAttr('disabled'); } }); // Datepicker var pickerOptions = <?php echo json_encode($datepicker); ?> , $dateBegin = $('input[name="stamp_begin[date]"]') , $dateEnd = $('input[name="stamp_end[date]"]'); $dateEnd.datepicker(pickerOptions); $dateBegin.datepicker($.extend(pickerOptions, { onClose: function(dateText, inst) { var startDate = $dateBegin.datepicker('getDate'); startDate.setDate(startDate.getDate() + 1); $dateEnd.datepicker('setDate', startDate); } })); // City autocomplete /* $('input[name=city_name]').placecomplete({ requestParams: { types: [ '(cities)' ] } });*/ var $city = $('input[name=city_name]'); $city.geocomplete({ map: '#map', details: '#form-event', detailsAttribute: 'data-geo', location: <?php echo $this->venue->latitude ? '[ ' . $this->venue->latitude . ', ' . $this->venue->longitude . ' ]' : "'" . ($this->event->city_name ? $this->event->city_name : 'Helsinki') . "'"; ?> , types: [ '(cities)' ] }); // Venue autocomplete function toggleVenue(toggle) { $('#fields-venue div').toggleClass('hidden', toggle); $('#fields-venue .venue-placeholder').toggleClass('hidden', !toggle); } var $latitude = $('input[name=latitude]') , $longitude = $('input[name=longitude]'); var venues = <?php echo json_encode($venues); ?> ; $('input[name=venue_name]') .on('change', function() { $('input[name=venue_id]').val(''); }) .on('typeahead:selected', function(event, selection, name) { var map = $city.geocomplete('map') , marker = $city.geocomplete('marker'); // Update form if (selection.foursquare_id) { $('input[name=venue_id]').val(''); $('input[name=foursquare_id]').val(selection.foursquare_id); } else { $('input[name=venue_id]').val(selection.id); $('input[name=foursquare_id]').val(''); } if (selection.latitude && selection.longitude) { $latitude.val(selection.latitude); $longitude.val(selection.longitude); var center = new google.maps.LatLng(selection.latitude, selection.longitude); map.setCenter(center); marker.setPosition(center); } else { $city.geocomplete('find', selection.city); } $('input[name=city_name], input[name=city]').val(selection.city); // Update label $('#fields-venue .venue-name').text(selection.value); $('#fields-venue .venue-city').text(selection.city || ''); toggleVenue(true); }) .typeahead([ { name: 'local', header: '<header class="dropdown-header"><?php echo __('Existing'); ?> </header>', local: venues }, { name: 'foursquare', header: '<header class="dropdown-header"><i class="fa fa-foursquare"></i> <?php echo __('Foursquare'); ?> </header>', remote: { url: Anqh.APIURL + '/v1/venues/foursquare', dataType: 'jsonp', replace: function(url, uriEncodedQuery) { return url += '?method=venues&ll=' + $latitude.val() + ',' + $longitude.val() + '&query=' + uriEncodedQuery; }, filter: function(parsedResponse) { return parsedResponse.venues || []; } } } ]); $('.venue-placeholder a').on('click', function() { toggleVenue(false); return false; }); <?php if (!$this->venue_errors && $this->event->venue_name && $this->event->city_name) { ?> toggleVenue(true); <?php } ?> }); </script> <?php return ob_get_clean(); }
/** * Edit event * * @param integer $event_id */ protected function _edit_event($event_id = null) { $this->history = false; if ($event_id) { // Editing old $event = Model_Event::factory($event_id); if (!$event->loaded()) { throw new Model_Exception($event, $event_id); } Permission::required($event, Model_Event::PERMISSION_UPDATE, self::$user); $cancel = Request::back(Route::model($event), true); $this->view = View_Page::factory(HTML::chars($event->name)); // Set actions if (Permission::has($event, Model_Event::PERMISSION_DELETE, self::$user)) { $this->view->actions[] = array('link' => Route::model($event, 'delete') . '?token=' . Security::csrf(), 'text' => '<i class="icon-trash icon-white"></i> ' . __('Delete event'), 'class' => 'btn-danger event-delete'); } $edit = true; } else { // Creating new $event = new Model_Event(); Permission::required($event, Model_Event::PERMISSION_CREATE, self::$user); $cancel = Request::back(Route::get('events')->uri(), true); $this->view = View_Page::factory(__('New event')); $event->author_id = self::$user->id; $event->created = time(); $edit = false; } // Handle post if ($_POST && Security::csrf_valid()) { // Handle venue if ($venue_hidden = Arr::get($_POST, 'venue_hidden')) { // Hidden events require only city } else { if ($venue_id = (int) Arr::get_once($_POST, 'venue_id')) { // Old venue $venue = Model_Venue::factory($venue_id); } else { if ($venue_name = Arr::get($_POST, 'venue_name')) { // Check for duplicate venue $venues = Model_Venue::factory()->find_by_name($venue_name); if ($venues->count()) { $city_name = strtolower(Arr::get($_POST, 'city_name')); foreach ($venues as $venue_old) { if (strtolower($venue_old->city_name) == $city_name) { $venue = $venue_old; break; } } } } } } $post = Arr::intersect($_POST, Model_Event::$editable_fields); if (isset($post['stamp_begin']['date']) && isset($post['stamp_end']['time'])) { $post['stamp_end']['date'] = $post['stamp_begin']['date']; } $event->set_fields($post); if (Arr::get($_POST, 'free')) { $event->price = 0; } // Venue/location $event->venue_hidden = (bool) $venue_hidden; if ($venue_hidden) { // Hidden events don't have a venue $event->venue_id = null; $event->venue_name = null; } else { if (isset($venue)) { // Venue loaded $event->venue_id = $venue->id; $event->city_name = $venue->city_name; } else { if (!empty($venue_name)) { // Create new venue $venue = Model_Venue::factory(); $venue->name = Arr::get($_POST, 'venue_name'); $venue->address = Arr::get($_POST, 'address'); $venue->latitude = Arr::get($_POST, 'latitude'); $venue->longitude = Arr::get($_POST, 'longitude'); $venue->event_host = true; $venue->author_id = self::$user->id; $venue->city_name = $event->city_name; try { $venue->save(); $event->venue_id = $venue->id; } catch (Validation_Exception $venue_validation) { } } } } // Validate event try { $event->is_valid(); } catch (Validation_Exception $event_validation) { } // If no errors found, save if (!isset($venue_validation) && !isset($event_validation)) { // Make sure end time is after start time, i.e. the next day if ($event->stamp_end < $event->stamp_begin) { $event->stamp_end += Date::DAY; } $event->save(); // Set tags $event->set_tags(Arr::get($_POST, 'tag')); $edit ? NewsfeedItem_Events::event_edit(self::$user, $event) : NewsfeedItem_Events::event(self::$user, $event); $this->request->redirect(Route::model($event)); } } // Fill the required information to view $this->view->event = $event; $this->view->event_errors = isset($event_validation) ? $event_validation->array->errors('validation') : null; $this->view->venue = isset($venue) ? $venue : null; $this->view->venue_errors = isset($venue_validation) ? $venue_validation->array->errors('validation') : null; // Tags $tags = array(); $tag_group = new Model_Tag_Group('Music'); if ($tag_group->loaded() && count($tag_group->tags())) { foreach ($tag_group->tags() as $tag) { $tags[$tag->id()] = $tag->name(); } } // Form $section = $this->section_event_edit($event); $section->event_errors = isset($event_validation) ? $event_validation->array->errors('validation') : null; $section->venue = isset($venue) ? $venue : $event->venue; $section->venue_errors = isset($venue_validation) ? $venue_validation->array->errors('validation') : null; $section->cancel = $cancel; $this->view->add(View_Page::COLUMN_TOP, $section); }
/** * Get JavaScripts. * * @return string */ public function javascript() { // Date picker options $datepicker = array('changeMonth' => true, 'changeYear' => true, 'dateFormat' => 'd.m.yy', 'dayNames' => array(__('Sunday'), __('Monday'), __('Tuesday'), __('Wednesday'), __('Thursday'), __('Friday'), __('Saturday')), 'dayNamesMin' => array(__('Su'), __('Mo'), __('Tu'), __('We'), __('Th'), __('Fr'), __('Sa')), 'firstDay' => 1, 'monthNames' => array(__('January'), __('February'), __('March'), __('April'), __('May'), __('June'), __('July'), __('August'), __('September'), __('October'), __('November'), __('December')), 'monthNamesShort' => array(__('Jan'), __('Feb'), __('Mar'), __('Apr'), __('May'), __('Jun'), __('Jul'), __('Aug'), __('Sep'), __('Oct'), __('Nov'), __('Dec')), 'nextText' => __('»'), 'prevText' => __('«'), 'showWeek' => true, 'showOtherMonths' => true, 'weekHeader' => __('Wk')); $venues = Model_Venue::factory()->find_all_autocomplete(); // Venues, Maps and tickets ob_start(); ?> <script> head.ready('anqh', function() { // Datepicker $('input.date').datepicker(<?php echo json_encode($datepicker); ?> ); // City autocomplete $('input[name=city_name]').autocompleteGeo(); // Venue autocomplete var venues = <?php echo json_encode($venues); ?> ; $('input[name=venue_name]').autocompleteVenue({ source: venues }); // Tickets $('#field-free').change(function _togglePrice() { if (this.checked) { $('input[name=price]').attr('disabled', 'disabled'); $('#group-price').slideUp(); } else { $('input[name=price]').removeAttr('disabled'); $('#group-price').slideDown(); } }); // Venue $('#field-ug').change(function _toggleVenue() { if (this.checked) { $('input[name=venue_name]').attr('disabled', 'disabled'); $('#group-venue').slideUp(); } else { $('input[name=venue_name]').removeAttr('disabled'); $('#group-venue').slideDown(); } }); }); </script> <?php return ob_get_clean(); }
public function post_price() { $system_venue_id = \Input::post('venue_id'); $price = intval(\Input::post('price')); if (!$price || !$system_venue_id) { return $this->sendAPIResponse(null, 400, 'Please provide a value both for venue_id and price!'); } $Venue = \Model_Venue::find($system_venue_id); if (!$Venue) { return $this->sendAPIResponse(null, 400, 'Unkown venue / invalid venue_id!'); } try { $Record = new \Model_Record(); // $Record->record_hash = $record_hash; $Record->object_id = $system_venue_id; $Record->property = 'price'; $Record->value = $price; $Record->datatype = 'absolute'; $Record->save(); if (\Collection\Venue::calculateVenuePriceScore($system_venue_id)) { return $this->sendAPIResponse(array('success' => true)); } return $this->sendAPIResponse(null, 400, 'Unkown error'); } catch (\Database_Exception $err) { // catch error. normally there shouldn't be an error, but in the development phase it's possible to have incomplete data, so errors could occur at this place. return $this->sendAPIResponse(null, 400, $err); } }
/** * Add side views. */ protected function _side_views() { // New venues $section = $this->section_venue_list(Model_Venue::factory()->find_new(10)); $section->title = __('New venues'); $this->view->add(View_Page::COLUMN_RIGHT, $section); // Updated venues $section = $this->section_venue_list(Model_Venue::factory()->find_updated(10)); $section->title = __('Updated venues'); $this->view->add(View_Page::COLUMN_RIGHT, $section); }
/** * Edit event * * @param integer $event_id */ protected function _edit_event($event_id = null) { $this->history = false; if ($event_id) { // Editing old $event = Model_Event::factory($event_id); if (!$event->loaded()) { throw new Model_Exception($event, $event_id); } Permission::required($event, Model_Event::PERMISSION_UPDATE); $cancel = Request::back(Route::model($event), true); $this->view = View_Page::factory(HTML::chars($event->name)); // Set actions if (Permission::has($event, Model_Event::PERMISSION_DELETE)) { $this->view->actions[] = array('link' => Route::model($event, 'delete') . '?token=' . Security::csrf(), 'text' => '<i class="fa fa-trash-o"></i> ' . __('Delete event'), 'class' => 'btn-danger event-delete'); } $edit = true; $event->update_count++; $event->modified = time(); } else { // Creating new $event = new Model_Event(); Permission::required($event, Model_Event::PERMISSION_CREATE); $cancel = Request::back(Route::get('events')->uri(), true); $this->view = View_Page::factory(__('New event')); $event->author_id = Visitor::$user->id; $event->created = time(); $edit = false; } // Handle post if ($_POST && Security::csrf_valid()) { $preview = isset($_POST['preview']); // Handle venue if ($venue_hidden = Arr::get($_POST, 'venue_hidden')) { // Hidden events require only city } else { if ($venue_id = (int) Arr::get_once($_POST, 'venue_id')) { // Old venue $venue = Model_Venue::factory($venue_id); } else { if ($venue_name = Arr::get($_POST, 'venue_name')) { // Check for duplicate venue $venues = Model_Venue::factory()->find_by_name($venue_name); if ($venues->count()) { $city_name = strtolower(Arr::get($_POST, 'city_name')); foreach ($venues as $venue_old) { if (strtolower($venue_old->city_name) == $city_name) { $venue = $venue_old; break; } } } } } } $post = Arr::intersect($_POST, Model_Event::$editable_fields); if (isset($post['stamp_begin']['date']) && isset($post['stamp_end']['time']) && !isset($post['stamp_end']['date'])) { $post['stamp_end']['date'] = $post['stamp_begin']['date']; } $event->set_fields($post); if (Arr::get($_POST, 'free')) { $event->price = 0; } // Venue/location $event->venue_hidden = (bool) $venue_hidden; if ($venue_hidden) { // Hidden events don't have a venue $event->venue_id = null; $event->venue_name = null; } else { if (isset($venue)) { // Venue loaded $event->venue_id = $venue->id; $event->city_name = $venue->city_name; } else { if (!empty($venue_name)) { // Create new venue $venue = Model_Venue::factory(); $venue->name = Arr::get($_POST, 'venue_name'); $venue->address = Arr::get($_POST, 'address'); $venue->latitude = Arr::get($_POST, 'latitude'); $venue->longitude = Arr::get($_POST, 'longitude'); $venue->foursquare_id = Arr::get($_POST, 'foursquare_id'); $venue->event_host = true; $venue->author_id = Visitor::$user->id; $venue->city_name = $event->city_name; if (!$preview) { try { $venue->save(); $event->venue_id = $venue->id; } catch (Validation_Exception $venue_validation) { } } } } } // Validate event try { $event->is_valid(); } catch (Validation_Exception $event_validation) { } // Handle preview request if ($preview) { if ($this->ajax) { $preview = '<p>' . self::_event_subtitle($event) . '</p>'; $preview .= '<div id="main" class="col-md-8">'; $preview .= $this->section_event_main($event); $preview .= '<hr></div>'; $this->response->body($preview); } return; } // Flyer if ($flyer_url = Arr::get($_POST, 'flyer')) { $event->flyer_url = $flyer_url; $image = new Model_Image(); $image->remote = $flyer_url; $image->created = time(); $image->author_id = Visitor::$user->id; try { $image->save(); try { $flyer = new Model_Flyer(); $flyer->set_fields(array('image_id' => $image->id, 'name' => $event->name, 'stamp_begin' => $event->stamp_begin)); $flyer->save(); } catch (Validation_Exception $flyer_validation) { $flyer_error = print_r($flyer_validation->array->errors('validation'), true); } } catch (Validation_Exception $image_validation) { $flyer_error = print_r($image_validation->array->errors('validation'), true); } catch (Kohana_Exception $e) { $flyer_error = $e->getMessage(); } } // If no errors found, save if (!isset($venue_validation) && !isset($event_validation) && !isset($flyer_error)) { // Make sure end time is after start time, i.e. the next day if ($event->stamp_end < $event->stamp_begin) { $event->stamp_end += Date::DAY; } $event->save(); // Handle flyer if (isset($image) && isset($flyer) && $flyer->loaded()) { $flyer->event_id = $event->id; $flyer->save(); $event->set_flyer($flyer); $event->save(); } // Set tags $event->set_tags(Arr::get($_POST, 'tag')); if ($edit) { // Don't flood edits right after save if (time() - $event->created > 60 * 30) { NewsfeedItem_Events::event_edit(Visitor::$user, $event); } } else { NewsfeedItem_Events::event(Visitor::$user, $event); // Add to favorites $event->add_favorite(Visitor::$user); // Create forum topic if ($event->add_forum_topic()) { Visitor::$user->post_count++; Visitor::$user->save(); } } $this->request->redirect(Route::model($event)); } } // Remove orphan flyer on all errors if (isset($flyer)) { $flyer->delete(); } else { if (isset($image)) { $image->delete(); } } // Tags $tags = array(); $tag_group = new Model_Tag_Group('Music'); if ($tag_group->loaded() && count($tag_group->tags())) { foreach ($tag_group->tags() as $tag) { $tags[$tag->id()] = $tag->name(); } } // Form $section = $this->section_event_edit($event); $section->event_errors = isset($event_validation) ? $event_validation->array->errors('validation') : null; $section->flyer_error = isset($flyer_error) ? $flyer_error : null; $section->venue = isset($venue) ? $venue : $event->venue; $section->venue_errors = isset($venue_validation) ? $venue_validation->array->errors('validation') : null; $section->cancel = $cancel; $this->view->add(View_Page::COLUMN_TOP, $section); }