Example #1
0
 /**
  * 创建活动
  */
 public function create()
 {
     if ($this->get_method() != 'POST') {
         $this->send_response(405, NULL, '请求的方法不存在');
     }
     $data = $this->get_data();
     if (!$data) {
         $this->send_response(400, NULL, '400505:活动信息非法');
     }
     $post = new Validation($data);
     $post->add_rules('title', 'required', 'length[1, 30]');
     $post->add_rules('content', 'required', 'length[0, 10000]');
     $post->add_rules('start_time', 'required');
     //$post->add_rules('end_time', 'required');
     //$post->add_rules('assemble_location', 'required');
     $post->add_rules('event_location', 'required');
     $post->add_rules('type', 'required', 'numeric', array($this, '_check_type_validation'));
     $post->add_callbacks(TRUE, array($this, '_check_time_validation'));
     if ($post->validate()) {
         $form = $post->as_array();
         $event = array();
         $event['organizer'] = $this->user_id;
         $event['type'] = $form['type'];
         $event['title'] = $form['title'];
         $event['summary'] = empty($form['summary']) ? '' : $form['summary'];
         $event['deadline'] = empty($form['deadline']) ? 0 : $form['deadline'];
         $event['apply_desc'] = empty($form['apply_desc']) ? '' : $form['apply_desc'];
         $event['content'] = $form['content'];
         $event['start_time'] = $form['start_time'];
         if ($form['end_time']) {
             $event['end_time'] = $form['end_time'];
         }
         $event['city'] = $form['city'] ? $form['city'] : 3501;
         $event['private'] = (int) $form['private'];
         $event['fee'] = $form['fee'] ? $form['fee'] : '';
         if ($form['apply_doc']) {
             if (!$this->_check_apply_doc($form['apply_doc'])) {
                 $this->send_response(400, NULL, '400413:apply_doc信息非法');
             }
             $event['apply_doc'] = serialize($form['apply_doc']);
         }
         $event['status'] = 1;
         $event['create_time'] = time();
         $event['event_location'] = serialize($form['event_location']);
         if ($form['assemble_location']) {
             $event['assemble_location'] = serialize($form['assemble_location']);
         }
         $event_id = $this->model->add($event);
         if ($event_id) {
             if ($form['image']) {
                 $this->_create_event_image($event_id, $form['image']);
             }
             if ($form['apply_doc']) {
                 $this->_create_event_apply_doc($event_id, $form['apply_doc']);
             }
             //创建群组
             $group_id = $this->_create_group($event);
             if ($group_id) {
                 $this->_add_group_user($group_id, $this->user_id, Kohana::config('group.grade.master'));
                 $this->model->update($event_id, array('gid' => $group_id));
             }
             $user = sns::getuser($this->user_id);
             $eventUser = array('eid' => $event_id, 'pid' => 0, 'uid' => $this->user_id, 'name' => $user['realname'], 'mobile' => $user['mobile'], 'apply_type' => Kohana::config('event.apply_type.joined'), 'apply_time' => time(), 'grade' => Kohana::config('event.grade.creator'));
             $this->model->applyEvent($eventUser);
             $opt = array('event' => array('id' => $event_id, 'name' => $event['title'], 'cover' => ''), 'no_sign' => 1);
             $event_url = MO_EVENT . 'event/show/' . $event_id;
             $short_title = str::strLen($event['title']) > 10 ? str::cnSubstr($event['title'], 0, 10) . '..' : $event['title'];
             $event_short_url = url::getShortUrl($event_url);
             $content = '【' . $event_short_url . ' 】由' . $user['realname'] . '发起的活动,快来参加吧';
             $this->send_event_mq(Kohana::config('uap.xiaomo'), $this->user_id, $content, $opt);
             $this->send_response(200, array('id' => floatval($event_id), 'gid' => (int) $group_id));
         }
         $this->send_response(400, NULL, '400413:活动发布失败');
     }
     $errors = $post->errors();
     foreach ($errors as $key => $value) {
         switch ($key) {
             case 'type':
                 $this->send_response(400, NULL, '400405:活动类型为空');
                 break;
             case 'start_time':
                 $this->send_response(400, NULL, '400406:活动开始时间为空');
                 break;
             case 'end_time':
                 $this->send_response(400, NULL, '400407:活动结束时间为空');
                 break;
             case 'assemble_location':
                 $this->send_response(400, NULL, '400408:集合地点为空');
                 break;
             case 'event_location':
                 $this->send_response(400, NULL, '400409:活动地点为空');
                 break;
             case 'end_before_start':
                 $this->send_response(400, NULL, '400410:活动结束时间必须大于开始时间');
                 break;
             case 'content':
                 $this->send_response(400, NULL, '400411:活动内容为空');
                 break;
             default:
                 $this->send_response(400, NULL, '400412:活动信息非法');
                 break;
         }
     }
     $this->send_response(400, NULL, '400412:活动信息非法');
 }
Example #2
0
 /**
  * Edit event
  *
  * @param  int|string  $event_id
  */
 public function _event_edit($event_id = false)
 {
     $this->history = false;
     $event = new Event_Model((int) $event_id);
     // For authenticated users only
     if (!$this->user || !$event->is_author() && !$this->visitor->logged_in(array('admin', 'event moderator'))) {
         url::back('/events');
     }
     $errors = $form_errors = array();
     $form_values = $event->as_array();
     $form_values['start_date'] = '';
     $form_values['start_hour'] = '';
     $form_values['end_hour'] = '';
     /***** CHECK POST *****/
     if (request::method() == 'post') {
         $post = array_merge($this->input->post(), $_FILES);
         $extra = array('start_time' => date::unix2sql(strtotime($post['start_date'] . ' ' . date::time_24h($post['start_hour']))));
         if (!empty($post['end_hour'])) {
             $end_time = strtotime($post['start_date']);
             // end hour is earlier than start hour = event ends the next day
             if ($post['end_hour'] < $post['start_hour']) {
                 $end_time = strtotime('+1 day', $end_time);
             }
             $extra['end_time'] = date('Y-m-d', $end_time) . ' ' . date::time_24h($post['end_hour']) . ':00';
         }
         // update
         $editing = (bool) $event->id;
         if ($editing) {
             $extra['modified'] = date::unix2sql(time());
             $extra['modifies'] = (int) $event->modifies + 1;
         } else {
             $extra['author_id'] = $this->user->id;
         }
         $city = ORM::factory('city', $post['city_id']);
         if ($city) {
             $extra['country_id'] = $city->country_id;
         }
         if (csrf::valid() && $event->validate($post, true, $extra)) {
             // Update tags
             $event->remove(ORM::factory('tag'));
             if (!empty($post['tags'])) {
                 foreach ($post['tags'] as $tag_id => $tag) {
                     $event->add(ORM::factory('tag', $tag_id));
                 }
                 $event->save();
             }
             // Handle flyer uploads
             foreach (array('flyer_front_image_id' => $post->flyer_front, 'flyer_back_image_id' => $post->flyer_back) as $image_id => $flyer) {
                 if (isset($flyer) && empty($flyer['error'])) {
                     $image = Image_Model::factory('events.flyer', $flyer, $this->user->id);
                     if ($image->id) {
                         $event->add($image);
                         $event->{$image_id} = $image->id;
                         $event->save();
                     }
                 }
             }
             if (!$editing) {
                 newsfeeditem_events::event($this->user, $event);
             }
             url::redirect(url::model($event));
         } else {
             $form_errors = $post->errors();
         }
         $form_values = arr::overwrite($form_values, $post->as_array());
     }
     /***** /CHECK POST *****/
     /***** SHOW FORM *****/
     if ($event->id) {
         $this->page_actions[] = array('link' => url::model($event) . '/delete/?token=' . csrf::token(), 'text' => __('Delete event'), 'class' => 'event-delete');
         $this->page_title = text::title($event->name);
         $this->page_subtitle = __('Edit event');
         list($form_values['start_date'], $form_values['start_hour']) = explode(' ', date('Y-m-d H', strtotime($event->start_time)));
         if (!empty($event->end_time)) {
             list($temp, $form_values['end_hour']) = explode(' ', date('Y-m-d H', strtotime($event->end_time)));
         }
     } else {
         $this->page_title = __('New event');
     }
     $form = $event->get_form();
     // Tags
     if ($tag_group = Kohana::config('events.tag_group')) {
         $form['tags'] = $form_values['tags'] = array();
         $tags = ORM::factory('tag_group', $tag_group);
         foreach ($tags->tags as $tag) {
             $form['tags'][$tag->id] = $tag->name;
             if ($event->has($tag)) {
                 $form_values['tags'][$tag->id] = $tag->name;
             }
         }
     }
     // City autocomplete
     $this->_autocomplete_city('city_name');
     // Venue autocomplete
     $venues = ORM::factory('venue')->where('event_host', '=', 1)->find_all();
     $hosts = array();
     foreach ($venues as $venue) {
         $hosts[] = "{ id: '" . $venue->id . "', text: '" . html::chars($venue->name) . "' }";
     }
     widget::add('foot', html::script_source('var venues = [' . implode(', ', $hosts) . "];\n\$('input[name=venue_name]').autocomplete(venues, {\n\tformatItem: function(item) {\n\t\treturn item.text;\n\t}\n}).result(function(event, item) {\n\t\$('input[name=venue_id]').val(item.id);\n});"));
     // Date pickers
     widget::add('foot', html::script_source("\$('input#start_date').datepicker({ dateFormat: 'd.m.yy', firstDay: 1, changeFirstDay: false, showOtherMonths: true, showWeeks: true, showStatus: true, showOn: 'both' });"));
     if (empty($errors)) {
         widget::add('main', View::factory('events/event_edit', array('form' => $form, 'values' => $form_values, 'errors' => $form_errors)));
     } else {
         //			$this->_error(Kohana::lang('generic.error'), $errors);
     }
     /***** /SHOW FORM *****/
     $this->_side_views();
 }