Esempio n. 1
0
 public function init()
 {
     // Init form
     $user = Engine_Api::_()->user()->getViewer();
     $this->setTitle('Ban Members');
     $maindescription = $this->getTranslator()->translate('Social networks are often the target of aggressive spam tactics. This most often comes in the form of fake user accounts and spam in comments. On this page, you can manage various anti-spam and censorship features. Note: To turn on the signup image verification feature (a popular anti-spam tool), see the Signup Progress page. <br>');
     // Decorators
     $this->loadDefaultDecorators();
     $this->getDecorator('Description')->setOption('escape', false);
     // Set form attributes
     //$this->setTitle('Ban new Member');
     $this->setDescription($maindescription);
     $this->addAdditionalElements();
     // Expiry date
     $expiry_date = new Engine_Form_Element_CalendarDateTime('expiry_date');
     $expiry_date->setLabel("Expiry Date");
     $expiry_date->setAllowEmpty(true);
     $this->addElement($expiry_date);
     // init Reason
     $this->addElement('textarea', 'reason', array('label' => '*Reason', 'required' => true, 'value' => 'Spam'));
     // init submit
     $this->addElement('Button', 'submit', array('label' => 'Ban', 'type' => 'submit', 'style' => 'margin-left: 170px;', 'link' => true, 'ignore' => true, 'onclick' => 'actionSubmit()', 'decorators' => array('ViewHelper')));
     // Set default action
     $this->setAction(Zend_Controller_Front::getInstance()->getRouter()->assemble(array()));
 }
Esempio n. 2
0
 public function init()
 {
     $user = Engine_Api::_()->user()->getViewer();
     $this->setTitle('Create New Event')->setAttrib('id', 'event_create_form')->setMethod("POST")->setAction(Zend_Controller_Front::getInstance()->getRouter()->assemble(array()));
     // Title
     $this->addElement('Text', 'title', array('label' => 'Event Name', 'allowEmpty' => false, 'required' => true, 'validators' => array(array('NotEmpty', true), array('StringLength', false, array(1, 64))), 'filters' => array('StripTags', new Engine_Filter_Censor())));
     $title = $this->getElement('title');
     // Description
     $this->addElement('Textarea', 'description', array('label' => 'Event Description', 'maxlength' => '10000', 'filters' => array('StripTags', new Engine_Filter_Censor(), new Engine_Filter_EnableLinks(), new Engine_Filter_StringLength(array('max' => 10000)))));
     // Start time
     $start = new Engine_Form_Element_CalendarDateTime('starttime');
     $start->setLabel("Start Time");
     $start->setAllowEmpty(false);
     $this->addElement($start);
     // End time
     $end = new Engine_Form_Element_CalendarDateTime('endtime');
     $end->setLabel("End Time");
     $end->setAllowEmpty(false);
     $this->addElement($end);
     // Host
     if ($this->_parent_type == 'user') {
         $this->addElement('Text', 'host', array('label' => 'Host', 'filters' => array(new Engine_Filter_Censor())));
     }
     // Location
     $this->addElement('Text', 'location', array('label' => 'Location', 'filters' => array(new Engine_Filter_Censor())));
     // Photo
     $this->addElement('File', 'photo', array('label' => 'Main Photo'));
     $this->photo->addValidator('Extension', false, 'jpg,png,gif,jpeg');
     // Category
     $this->addElement('Select', 'category_id', array('label' => 'Event Category', 'multiOptions' => array('0' => ' ')));
     // Search
     $this->addElement('Checkbox', 'search', array('label' => 'People can search for this event', 'value' => True));
     // Approval
     $this->addElement('Checkbox', 'approval', array('label' => 'People must be invited to RSVP for this event'));
     // Invite
     $this->addElement('Checkbox', 'auth_invite', array('label' => 'Invited guests can invite other people as well', 'value' => True));
     // Privacy
     $viewOptions = (array) Engine_Api::_()->authorization()->getAdapter('levels')->getAllowed('event', $user, 'auth_view');
     $commentOptions = (array) Engine_Api::_()->authorization()->getAdapter('levels')->getAllowed('event', $user, 'auth_comment');
     $photoOptions = (array) Engine_Api::_()->authorization()->getAdapter('levels')->getAllowed('event', $user, 'auth_photo');
     if ($this->_parent_type == 'user') {
         $availableLabels = array('everyone' => 'Everyone', 'registered' => 'All Registered Members', 'owner_network' => 'Friends and Networks', 'owner_member_member' => 'Friends of Friends', 'owner_member' => 'Friends Only', 'member' => 'Event Guests Only', 'owner' => 'Just Me');
         $viewOptions = array_intersect_key($availableLabels, array_flip($viewOptions));
         $commentOptions = array_intersect_key($availableLabels, array_flip($commentOptions));
         $photoOptions = array_intersect_key($availableLabels, array_flip($photoOptions));
     } else {
         if ($this->_parent_type == 'group') {
             $availableLabels = array('everyone' => 'Everyone', 'registered' => 'All Registered Members', 'parent_member' => 'Group Members', 'member' => 'Event Guests Only', 'owner' => 'Just Me');
             $viewOptions = array_intersect_key($availableLabels, array_flip($viewOptions));
             $commentOptions = array_intersect_key($availableLabels, array_flip($commentOptions));
             $photoOptions = array_intersect_key($availableLabels, array_flip($photoOptions));
         }
     }
     // View
     if (!empty($viewOptions) && count($viewOptions) >= 1) {
         // Make a hidden field
         if (count($viewOptions) == 1) {
             $this->addElement('hidden', 'auth_view', array('value' => key($viewOptions)));
             // Make select box
         } else {
             $this->addElement('Select', 'auth_view', array('label' => 'Privacy', 'description' => 'Who may see this event?', 'multiOptions' => $viewOptions, 'value' => key($viewOptions)));
             $this->auth_view->getDecorator('Description')->setOption('placement', 'append');
         }
     }
     // Comment
     if (!empty($commentOptions) && count($commentOptions) >= 1) {
         // Make a hidden field
         if (count($commentOptions) == 1) {
             $this->addElement('hidden', 'auth_comment', array('value' => key($commentOptions)));
             // Make select box
         } else {
             $this->addElement('Select', 'auth_comment', array('label' => 'Comment Privacy', 'description' => 'Who may post comments on this event?', 'multiOptions' => $commentOptions, 'value' => key($commentOptions)));
             $this->auth_comment->getDecorator('Description')->setOption('placement', 'append');
         }
     }
     // Photo
     if (!empty($photoOptions) && count($photoOptions) >= 1) {
         // Make a hidden field
         if (count($photoOptions) == 1) {
             $this->addElement('hidden', 'auth_photo', array('value' => key($photoOptions)));
             // Make select box
         } else {
             $this->addElement('Select', 'auth_photo', array('label' => 'Photo Uploads', 'description' => 'Who may upload photos to this event?', 'multiOptions' => $photoOptions, 'value' => key($photoOptions)));
             $this->auth_photo->getDecorator('Description')->setOption('placement', 'append');
         }
     }
     // Buttons
     $this->addElement('Button', 'submit', array('label' => 'Save Changes', 'type' => 'submit', 'ignore' => true, 'decorators' => array('ViewHelper')));
     $this->addElement('Cancel', 'cancel', array('label' => 'cancel', 'link' => true, 'prependText' => ' or ', 'decorators' => array('ViewHelper')));
     $this->addDisplayGroup(array('submit', 'cancel'), 'buttons', array('decorators' => array('FormElements', 'DivDivDivWrapper')));
 }
Esempio n. 3
0
 public function editAction()
 {
     // Get navigation
     $this->view->navigation = $navigation = Engine_Api::_()->getApi('menus', 'core')->getNavigation('ynevent_main');
     $event_id = $this->getRequest()->getParam('event_id');
     $event = Engine_Api::_()->getItem('event', $event_id);
     //Keep info to check changing
     if (is_object($event)) {
         $event_temp = clone $event;
     }
     $viewer = Engine_Api::_()->user()->getViewer();
     if (!($this->_helper->requireAuth()->setAuthParams(null, null, 'edit')->isValid() || $event->isOwner($viewer))) {
         return;
     }
     // Create form
     $this->view->gEndDate = Engine_Api::_()->getApi('settings', 'core')->getSetting("ynevent.day", "");
     $this->view->form = $form = new Ynevent_Form_Edit(array('parent_type' => $event->parent_type, 'parent_id' => $event->parent_id, 'item' => $event));
     //Populate Tag
     $tagStr = '';
     foreach ($event->tags()->getTagMaps() as $tagMap) {
         $tag = $tagMap->getTag();
         if (!isset($tag->text)) {
             continue;
         }
         if ('' !== $tagStr) {
             $tagStr .= ', ';
         }
         $tagStr .= $tag->text;
     }
     $form->populate(array('tags' => $tagStr));
     $this->view->confirm_apply_for = false;
     if (isset($_POST['apply_for_action'])) {
         $this->view->confirm_apply_for = true;
         $form->populate(array('apply_for_action' => $_POST['apply_for_action']));
     }
     // Repeat event can not change repeat type
     if ($event->repeat_type) {
         $form->repeat_type->setAttrib('disable', true);
         $form->repeat_frequency->setAttrib('disable', true);
         $form->removeElement('repeatstarttime');
         $form->removeElement('repeatendtime');
         $form->removeElement('repeatstartdate');
         $form->removeElement('repeatenddate');
         if ($event->repeat_type == 99) {
             $apply_for = $_POST['apply_for_action'];
             if ($apply_for > 0) {
                 $form->removeElement('starttime');
                 $form->removeElement('endtime');
                 //Get DBTable Events
                 $tblEvents = Engine_Api::_()->getDbTable('events', 'ynevent');
                 //Get all events in group repeat
                 $event_list = $tblEvents->getRepeatEvent($event->repeat_group);
                 $order = 6;
                 foreach ($event_list as $objEvent) {
                     if ($apply_for == 2 && $objEvent->repeat_order < $event->repeat_order) {
                         continue;
                     }
                     $event_id = $objEvent->getIdentity();
                     $form->addElement('Heading', 'starttime_heading_' . $event_id, array('order' => $order + 1, 'label' => $this->view->translate("Event ") . $objEvent->repeat_order, 'decorators' => array('ViewHelper', array('Label', array('tag' => 'span')), array('HtmlTag2', array('class' => 'form-wrapper-heading')))));
                     $start_time = strtotime($objEvent->starttime);
                     $end_time = strtotime($objEvent->endtime);
                     $oldTz = date_default_timezone_get();
                     date_default_timezone_set($viewer->timezone);
                     $start_time = date('Y-m-d H:i:s', $start_time);
                     $end_time = date('Y-m-d H:i:s', $end_time);
                     date_default_timezone_set($oldTz);
                     // Start time
                     $start = new Engine_Form_Element_CalendarDateTime('starttime_' . $event_id);
                     $start->setAllowEmpty(false);
                     $start->setLabel("Start Date");
                     $start->setOrder($order + 2);
                     $start->setValue($start_time);
                     $form->addElement($start);
                     // End time
                     $end = new Engine_Form_Element_CalendarDateTime('endtime_' . $event_id);
                     $end->setAllowEmpty(false);
                     $end->setLabel("End Date");
                     $end->setOrder($order + 3);
                     $end->setValue($end_time);
                     $form->addElement($end);
                     $order = $order + 3;
                 }
                 $form->addElement('Heading', 'starttime_heading_addmore', array('order' => $order + 1, 'label' => "Add More specify", 'decorators' => array('ViewHelper', array('Label', array('tag' => 'span')), array('HtmlTag2', array('class' => 'form-wrapper-heading')))));
             } else {
                 $form->removeElement('spec_start_date');
                 $form->removeElement('spec_end_date');
                 $form->removeElement('specify_repeat');
             }
         } else {
             $form->removeElement('spec_start_date');
             $form->removeElement('spec_end_date');
             $form->removeElement('specify_repeat');
         }
         // Add check form when save 1 repeat event
         $this->view->formcheck = $formcheck = new Ynevent_Form_Check();
     }
     // Populate auth
     $auth = Engine_Api::_()->authorization()->context;
     $roles = array('owner', 'member', 'owner_member', 'owner_member_member', 'owner_network', 'registered', 'everyone');
     foreach ($roles as $role) {
         if (isset($form->auth_view->options[$role]) && $auth->isAllowed($event, $role, 'view')) {
             $form->auth_view->setValue($role);
         }
         if (isset($form->auth_comment->options[$role]) && $auth->isAllowed($event, $role, 'comment')) {
             $form->auth_comment->setValue($role);
         }
     }
     $form->auth_invite->setValue($auth->isAllowed($event, 'member', 'invite'));
     // Sub category
     $eventArray = $event->toArray();
     $st_address = "";
     if ($eventArray['address'] != '') {
         $st_address .= $eventArray['address'];
     }
     if ($eventArray['city'] != '') {
         $st_address .= "," . $eventArray['city'];
     }
     if ($eventArray['country'] != '') {
         $st_address .= "," . $eventArray['country'];
     }
     if ($eventArray['zip_code'] != '') {
         $st_address .= "," . $eventArray['zip_code'];
     }
     $pos = strpos($st_address, ",");
     if ($pos === 0) {
         $st_address = substr($st_address, 1);
     }
     $eventArray['full_address'] = $st_address;
     $form->populate($eventArray);
     // Convert and re-populate times
     $start = strtotime($event->starttime);
     $end = strtotime($event->endtime);
     $oldTz = date_default_timezone_get();
     date_default_timezone_set($viewer->timezone);
     $start = date('Y-m-d H:i:s', $start);
     $end = date('Y-m-d H:i:s', $end);
     date_default_timezone_set($oldTz);
     $form->populate(array('starttime' => $start, 'endtime' => $end));
     $form->populate(array('f_repeat_type' => $event->repeat_type, 'g_repeat_type' => $event->repeat_type));
     if ($event->repeat_type == 0) {
         $rp_type = 0;
         $req = 0;
     } else {
         $rp_type = 1;
         switch ($event->repeat_type) {
             case 1:
                 $req = 1;
                 break;
             case 7:
                 $req = 7;
                 break;
             case 30:
                 $req = 30;
                 break;
             case 99:
                 $req = 99;
                 break;
             default:
                 $req = 1;
                 break;
         }
     }
     $form->populate(array('repeat_type' => $rp_type, 'repeat_frequency' => $req));
     $this->view->repeat_type = $event->repeat_type;
     if (isset($eventArray['country_id'])) {
         $provincesAssoc = array();
         $country_id = $eventArray['country_id'];
         if ($country_id) {
             $provincesAssoc = Engine_Api::_()->getDbTable('locations', 'user')->getLocationsAssoc($country_id);
             $provincesAssoc = array('0' => '') + $provincesAssoc;
         }
         $form->getElement('province_id')->setMultiOptions($provincesAssoc);
     }
     if (isset($eventArray['province_id'])) {
         $citiesAssoc = array();
         $province_id = $eventArray['province_id'];
         if ($province_id) {
             $citiesAssoc = Engine_Api::_()->getDbTable('locations', 'user')->getLocationsAssoc($province_id);
             $citiesAssoc = array('0' => '') + $citiesAssoc;
         }
         $form->getElement('city_id')->setMultiOptions($citiesAssoc);
     }
     if (!isset($_POST['save_change'])) {
         //Keep info to check changing
         return;
     }
     $_post = $this->getRequest()->getPost();
     $provincesAssoc = array();
     $country_id = $_post['country_id'];
     if ($country_id) {
         $provincesAssoc = Engine_Api::_()->getDbTable('locations', 'user')->getLocationsAssoc($country_id);
         $provincesAssoc = array('0' => '') + $provincesAssoc;
     }
     $form->getElement('province_id')->setMultiOptions($provincesAssoc);
     $citiesAssoc = array();
     $province_id = $_post['province_id'];
     if ($province_id) {
         $citiesAssoc = Engine_Api::_()->getDbTable('locations', 'user')->getLocationsAssoc($province_id);
         $citiesAssoc = array('0' => '') + $citiesAssoc;
     }
     $form->getElement('city_id')->setMultiOptions($citiesAssoc);
     if (!isset($_post['repeat_type'])) {
         $_post['repeat_type'] = $rp_type;
     }
     if (!isset($_post['repeat_frequency'])) {
         $_post['repeat_frequency'] = $req;
     }
     $localeObject = Zend_Registry::get('Locale');
     $dateLocaleString = $localeObject->getTranslation('short', 'Date', $localeObject);
     $dateLocaleString = preg_replace('~\'[^\']+\'~', '', $dateLocaleString);
     $dateLocaleString = strtolower($dateLocaleString);
     $dateLocaleString = preg_replace(array('/y+/i', '/m+/i', '/d+/i'), array('Y', 'm', 'd'), $dateLocaleString);
     $dateLocaleString = str_replace('  ', '/', $dateLocaleString);
     $dateLocaleString = str_replace('.', '/', $dateLocaleString);
     $dateLocaleString = str_replace('-', '/', $dateLocaleString);
     $date_default = trim(date($dateLocaleString));
     $language = $localeObject->getLanguage();
     if ($language == 'ar') {
         $date_default = date('d/m/Y');
     }
     $_post['repeatstartdate']['hour'] = 1;
     $_post['repeatstartdate']['minute'] = 10;
     $_post['repeatstartdate']['ampm'] = 'AM';
     $_post['repeatenddate']['hour'] = 1;
     $_post['repeatenddate']['minute'] = 20;
     $_post['repeatenddate']['ampm'] = 'AM';
     $_post['repeatstarttime']['date'] = $date_default;
     $_post['repeatendtime']['date'] = $date_default;
     if (!$_post['repeat_type']) {
         $_post['repeatstartdate']['date'] = $date_default;
         $_post['repeatenddate']['date'] = $date_default;
         $_post['repeatstarttime']['hour'] = 1;
         $_post['repeatstarttime']['minute'] = 10;
         $_post['repeatstarttime']['ampm'] = 'AM';
         $_post['repeatendtime']['hour'] = 1;
         $_post['repeatendtime']['minute'] = 20;
         $_post['repeatendtime']['ampm'] = 'AM';
         $_post['spec_start_date']['date'] = $date_default;
         $_post['spec_end_date']['date'] = $date_default;
         $_post['spec_start_date']['hour'] = 1;
         $_post['spec_start_date']['minute'] = 10;
         $_post['spec_start_date']['ampm'] = 'AM';
         $_post['spec_end_date']['hour'] = 1;
         $_post['spec_end_date']['minute'] = 20;
         $_post['spec_end_date']['ampm'] = 'AM';
     } else {
         if ($event_temp->repeat_type == 0) {
             $_post['starttime']['date'] = $date_default;
             $_post['endtime']['date'] = $date_default;
             $_post['starttime']['hour'] = 1;
             $_post['starttime']['minute'] = 10;
             $_post['starttime']['ampm'] = 'AM';
             $_post['endtime']['hour'] = 1;
             $_post['endtime']['minute'] = 20;
             $_post['endtime']['ampm'] = 'AM';
         }
         if ($_post['repeat_frequency'] == 99) {
             $_post['repeatstartdate']['date'] = $date_default;
             $_post['repeatenddate']['date'] = $date_default;
             $_post['repeatstarttime']['hour'] = 1;
             $_post['repeatstarttime']['minute'] = 10;
             $_post['repeatstarttime']['ampm'] = 'AM';
             $_post['repeatendtime']['hour'] = 1;
             $_post['repeatendtime']['minute'] = 20;
             $_post['repeatendtime']['ampm'] = 'AM';
             $_post['spec_start_date']['date'] = $date_default;
             $_post['spec_end_date']['date'] = $date_default;
             $_post['spec_start_date']['hour'] = 1;
             $_post['spec_start_date']['minute'] = 10;
             $_post['spec_start_date']['ampm'] = 'AM';
             $_post['spec_end_date']['hour'] = 1;
             $_post['spec_end_date']['minute'] = 20;
             $_post['spec_end_date']['ampm'] = 'AM';
         } else {
             $_post['spec_start_date']['date'] = $date_default;
             $_post['spec_end_date']['date'] = $date_default;
             $_post['spec_start_date']['hour'] = 1;
             $_post['spec_start_date']['minute'] = 10;
             $_post['spec_start_date']['ampm'] = 'AM';
             $_post['spec_end_date']['hour'] = 1;
             $_post['spec_end_date']['minute'] = 20;
             $_post['spec_end_date']['ampm'] = 'AM';
         }
     }
     if (!$form->isValid($_post)) {
         return;
     }
     // Process
     $values = $form->getValues();
     if ($values['repeat_type'] == "") {
         $values['repeat_type'] = $event->repeat_type;
     }
     if ($_post['input_start_specifys']) {
         $values['input_start_specifys'] = $_post['input_start_specifys'];
         $values['input_end_specifys'] = $_post['input_end_specifys'];
         unset($_post);
     }
     if (!empty($values['sub_category_id']) && $values['sub_category_id'] > 0) {
         $values["category_id"] = $values['sub_category_id'];
     }
     if (strpos($values['host'], 'younetco_event_key_') !== FALSE) {
         $user_id = substr($values['host'], 19, strlen($values['host']));
         $owner = $event->getOwner();
         if ($user_id != $owner->getIdentity() && $user_id != substr($event->host, 19, strlen($event->host))) {
             $friend = Engine_Api::_()->getItem('user', $user_id);
             $notifyApi = Engine_Api::_()->getDbtable('notifications', 'activity');
             $notifyApi->addNotification($friend, $owner, $event, 'friend_host');
         }
     }
     // Check parent
     if (!isset($values['host']) && $event->parent_type == 'group' && Engine_Api::_()->hasItemType('group')) {
         $group = Engine_Api::_()->getItem('group', $event->parent_id);
         $values['host'] = $group->getTitle();
     }
     // Process
     $db = Engine_Api::_()->getItemTable('event')->getAdapter();
     $db->beginTransaction();
     try {
         $values['parent_type'] = $event->parent_type;
         $values['parent_id'] = $event->parent_id;
         $values['end_repeat'] = $values['repeatend'] == "0000-00-00" ? "" : $values['repeatend'];
         $values['user_id'] = $event->user_id;
         // Set event info
         if ($values['repeat_type'] == 1) {
             $values['repeat_type'] = $values['repeat_frequency'];
         }
         $copyvalues = $values;
         // Convert times to server time
         $oldTz = date_default_timezone_get();
         date_default_timezone_set($viewer->timezone);
         $start1 = strtotime($copyvalues['starttime']);
         $end1 = strtotime($copyvalues['endtime']);
         date_default_timezone_set($oldTz);
         $copyvalues['starttime'] = date('Y-m-d H:i:s', $start1);
         $copyvalues['endtime'] = date('Y-m-d H:i:s', $end1);
         $event->setFromArray($copyvalues);
         // 2: Apply for following repeating events
         // 1: Apply for all repeating events
         // 0: Apply for only current event
         // not care with case following events , just only or all
         // if change basic info (for only and all)
         // if change start_date, end_date (for only and all events)
         // if change repeat information (not for only and only for all)
         $apply_for = $values['apply_for_action'] == "" ? 0 : $values['apply_for_action'];
         //Have change all
         $is_change = false;
         // Change relate repeat
         $is_repeat_change = false;
         //Start time of event
         $first_date = $values['starttime'];
         //End time of event
         $first_end_date = $values['endtime'];
         //Maxinstance
         $maxInstance = Engine_Api::_()->getApi('settings', 'core')->getSetting('ynevent.instance', 50);
         if ($maxInstance == '') {
             $maxInstance = 50;
         }
         //Redirect Event
         $redirectEvent = NULL;
         if ($event_temp != $event) {
             $is_change = true;
             //check basic or repeating change
             if ($values['repeat_type'] != 0 && $event_temp->repeat_type == 0) {
                 $is_repeat_change = true;
             }
         }
         if ($is_change) {
             //Up to repeat event
             if ($is_repeat_change) {
                 $_start_temp = null;
                 if ($values['repeat_frequency'] != 99) {
                     //End repeat date
                     $configDate = Engine_Api::_()->getApi('settings', 'core')->getSetting('ynevent.day', '');
                     if ($configDate != '' && $values['repeatenddate'] > $configDate) {
                         $values['repeatenddate'] = $configDate;
                     }
                     $arr_temp = explode(' ', $values['repeatstarttime']);
                     $repeat_start_time = $arr_temp['1'];
                     $arr_temp = explode(' ', $values['repeatendtime']);
                     $repeat_end_time = $arr_temp['1'];
                     $repeat_start = strtotime($values['repeatstartdate']);
                     $repeat_start = date('Y-m-d ' . $repeat_start_time, $repeat_start);
                     $repeat_end = strtotime($values['repeatenddate']);
                     $repeat_end = date('Y-m-d ' . $repeat_end_time, $repeat_end);
                     if ($repeat_start > $repeat_end) {
                         $form->addError("Start date of the event must be less than the end repeat date");
                         return;
                     }
                     // 1, 7, monthly~30
                     $step = $values['repeat_frequency'];
                     //Duration between starttime and endtime
                     $duration = Engine_Api::_()->ynevent()->dateDiffBySec($values['repeatstarttime'], $values['repeatendtime']);
                     $_start_temp = $repeat_start;
                     $oldTz = date_default_timezone_get();
                     date_default_timezone_set($viewer->timezone);
                     $start_update = strtotime($repeat_start);
                     $end_update = strtotime(Engine_Api::_()->ynevent()->dateAddBySec($repeat_start, $duration));
                     date_default_timezone_set($oldTz);
                     $event->starttime = date('Y-m-d H:i:s', $start_update);
                     $event->endtime = date('Y-m-d H:i:s', $end_update);
                     $event->save();
                     //Start of repeat
                     $loopstart = $repeat_start;
                     $i = 1;
                     //When start date still <= end repeat date
                     while ($loopstart <= $repeat_end) {
                         //If not monthly repeat
                         if ($step != 30) {
                             $arrStart[] = $loopstart;
                             $loopstart = Engine_Api::_()->ynevent()->dateAdd($loopstart, $step);
                         } else {
                             $arrStart[] = $loopstart;
                             $loopstart = Engine_Api::_()->ynevent()->monthAdd($repeat_start, $i);
                             $i++;
                         }
                     }
                 } else {
                     $event->starttime = $event_temp->starttime;
                     $event->endtime = $event_temp->endtime;
                     $event->save();
                     foreach ($values['input_start_specifys'] as $id => $value) {
                         $arrStart[] = date('Y-m-d H:i:s', strtotime(str_replace('/', '-', $value)));
                         $endStart[] = date('Y-m-d H:i:s', strtotime(str_replace('/', '-', $values['input_end_specifys'][$id])));
                     }
                 }
                 if ($maxInstance <= count($arrStart)) {
                     $str = "You are allowed creating only {$maxInstance} in the repeat event chain.";
                     $form->addError($str);
                     return;
                 }
                 // Create event
                 $table = Engine_Api::_()->getDbtable('events', 'ynevent');
                 //Set repeat group
                 $values['repeat_group'] = $event_temp->repeat_group;
                 $repeat_order = 1;
                 if (is_array($arrStart)) {
                     foreach ($arrStart as $key => $value) {
                         if ($_start_temp != $value) {
                             $repeat_order++;
                             $values['repeat_order'] = $repeat_order;
                             //create new row
                             $new_event = $table->createRow();
                             if ($values['repeat_frequency'] != 99) {
                                 $values['starttime'] = $value;
                                 $values['endtime'] = Engine_Api::_()->ynevent()->dateAddBySec($value, $duration);
                             } else {
                                 $values['starttime'] = $value;
                                 $values['endtime'] = $endStart[$key];
                             }
                             $oldTz = date_default_timezone_get();
                             date_default_timezone_set($viewer->timezone);
                             if ($values['repeat_frequency'] != 99) {
                                 $repeat_end = strtotime($repeat_end);
                             }
                             $start = strtotime($values['starttime']);
                             $end = strtotime($values['endtime']);
                             date_default_timezone_set($oldTz);
                             $values['starttime'] = date('Y-m-d H:i:s', $start);
                             $values['endtime'] = date('Y-m-d H:i:s', $end);
                             if ($values['repeat_frequency'] != 99) {
                                 $repeat_end = date('Y-m-d H:i:s', $repeat_end);
                                 $values['end_repeat'] = $repeat_end;
                             }
                             $values['repeat_type'] = $values['repeat_frequency'];
                             $new_event->setFromArray($values);
                             $new_event->save();
                             if ($redirectEvent == NULL) {
                                 $redirectEvent = $new_event;
                             }
                             // Add owner as member
                             $new_event->membership()->addMember($viewer)->setUserApproved($viewer)->setResourceApproved($viewer);
                             // Add owner rsvp
                             $new_event->membership()->getMemberInfo($viewer)->setFromArray(array('rsvp' => 2))->save();
                             // Add photo
                             if (!empty($values['photo'])) {
                                 $new_event->setPhoto($form->photo);
                             }
                             // Add Cover photo
                             if (!empty($values['cover_thumb'])) {
                                 $new_event->setCoverPhoto($form->cover_thumb);
                             }
                             //Set custom fields
                             $customfieldform = $form->getSubForm('fields');
                             $customfieldform->setItem($new_event);
                             $customfieldform->saveValues();
                             // Add tags
                             $tags = preg_split('/[,]+/', $values['tags']);
                             $new_event->tags()->setTagMaps($viewer, $tags);
                             //Add owner follow
                             Engine_Api::_()->ynevent()->setEventFollow($new_event, $viewer);
                             // Process privacy
                             $this->setAuth($new_event, $values);
                             //Add activity only one
                             if ($repeat_order <= 1) {
                                 // Add action
                                 $activityApi = Engine_Api::_()->getDbtable('actions', 'activity');
                                 $action = $activityApi->addActivity($viewer, $new_event, 'ynevent_create');
                                 if ($action) {
                                     $activityApi->attachActivity($action, $new_event);
                                 }
                             }
                         }
                     }
                     //End foreach create events
                 }
                 //End is_array($arrStart)
             } else {
                 //Only current event
                 if ($apply_for == 0) {
                     if ($first_date > $first_end_date) {
                         $form->addError("Start time of the event must be less than the end time.");
                         return;
                     }
                     // change basic information for currents event
                     if ($values['repeat_type'] == 0) {
                         $event->repeat_group = microtime(true) * 10000;
                     }
                     $event->save();
                     //Set redirect event
                     if ($redirectEvent == NULL) {
                         $redirectEvent = $event;
                     }
                     // Edit photo
                     if (!empty($values['photo'])) {
                         $event->setPhoto($form->photo);
                     }
                     // Add Cover photo
                     if (!empty($values['cover_thumb'])) {
                         $event->setCoverPhoto($form->cover_thumb);
                     }
                     //Set custom fields
                     $customfieldform = $form->getSubForm('fields');
                     $customfieldform->setItem($event);
                     $customfieldform->saveValues();
                     // Add tags
                     $tags = preg_split('/[,]+/', $values['tags']);
                     $event->tags()->setTagMaps($viewer, $tags);
                     // Process privacy
                     $this->setAuth($event, $values);
                     // Add notify
                     $this->setNotify($event, $viewer, 'ynevent_change_details');
                 }
                 //For all repeating events
                 if ($apply_for == 1) {
                     //Get DBTable Events
                     $tblEvents = Engine_Api::_()->getDbTable('events', 'ynevent');
                     //Get all events in group repeat
                     $event_list = $tblEvents->getRepeatEvent($event->repeat_group);
                     if ($values['repeat_frequency'] != 99) {
                         $arr_temp = explode(' ', $values['starttime']);
                         $repeat_start_time = $arr_temp['1'];
                         $arr_temp = explode(' ', $values['endtime']);
                         $repeat_end_time = $arr_temp['1'];
                         if ($repeat_start_time > $repeat_end_time) {
                             $form->addError("Start time of the event must be less than the end time.");
                             return;
                         }
                         foreach ($event_list as $objevent) {
                             $repeat_start = strtotime($objevent->starttime);
                             $values['starttime'] = date('Y-m-d ' . $repeat_start_time, $repeat_start);
                             $repeat_end = strtotime($objevent->endtime);
                             $values['endtime'] = date('Y-m-d ' . $repeat_end_time, $repeat_end);
                             $oldTz = date_default_timezone_get();
                             date_default_timezone_set($viewer->timezone);
                             $start = strtotime($values['starttime']);
                             $end = strtotime($values['endtime']);
                             date_default_timezone_set($oldTz);
                             $values['starttime'] = date('Y-m-d H:i:s', $start);
                             $values['endtime'] = date('Y-m-d H:i:s', $end);
                             $objevent->setFromArray($values);
                             $objevent->save();
                             // Edit photo
                             if (!empty($values['photo'])) {
                                 $objevent->setPhoto($form->photo);
                             }
                             // Add Cover photo
                             if (!empty($values['cover_thumb'])) {
                                 $objevent->setCoverPhoto($form->cover_thumb);
                             }
                             //Set custom fields
                             $customfieldform = $form->getSubForm('fields');
                             $customfieldform->setItem($objevent);
                             $customfieldform->saveValues();
                             // Add tags
                             $tags = preg_split('/[,]+/', $values['tags']);
                             $objevent->tags()->setTagMaps($viewer, $tags);
                             // Process privacy
                             $this->setAuth($objevent, $values);
                             // Add notify
                             $this->setNotify($objevent, $viewer, 'ynevent_change_details');
                         }
                     } else {
                         foreach ($event_list as $objevent) {
                             //Set viewer time zone
                             $oldTz = date_default_timezone_get();
                             date_default_timezone_set($viewer->timezone);
                             $start = strtotime($values['starttime_' . $objevent->getIdentity()]);
                             $end = strtotime($values['endtime_' . $objevent->getIdentity()]);
                             date_default_timezone_set($oldTz);
                             $values['starttime'] = date('Y-m-d H:i:s', $start);
                             $values['endtime'] = date('Y-m-d H:i:s', $end);
                             if ($start > $end) {
                                 $element = $form->getElement("starttime_heading_" . $objevent->getIdentity())->addError("Start date of the event must be less than the end date.");
                                 return;
                             }
                             $objevent->setFromArray($values);
                             $objevent->save();
                             // Edit photo
                             if (!empty($values['photo'])) {
                                 $objevent->setPhoto($form->photo);
                             }
                             // Add Cover photo
                             if (!empty($values['cover_thumb'])) {
                                 $objevent->setCoverPhoto($form->cover_thumb);
                             }
                             //Set custom fields
                             $customfieldform = $form->getSubForm('fields');
                             $customfieldform->setItem($objevent);
                             $customfieldform->saveValues();
                             // Add tags
                             $tags = preg_split('/[,]+/', $values['tags']);
                             $objevent->tags()->setTagMaps($viewer, $tags);
                             // Process privacy
                             $this->setAuth($objevent, $values);
                             // Add notify
                             $this->setNotify($objevent, $viewer, 'ynevent_change_details');
                         }
                     }
                 }
                 //For following events
                 if ($apply_for == 2) {
                     //Get DBTable Events
                     $tblEvents = Engine_Api::_()->getDbTable('events', 'ynevent');
                     //Get all events in group repeat
                     $event_list = $tblEvents->getRepeatEvent($event->repeat_group);
                     if ($values['repeat_frequency'] != 99) {
                         $arr_temp = explode(' ', $values['starttime']);
                         $repeat_start_time = $arr_temp['1'];
                         $arr_temp = explode(' ', $values['endtime']);
                         $repeat_end_time = $arr_temp['1'];
                         if ($repeat_start_time > $repeat_end_time) {
                             $form->addError("Start time of the event must be less than the end time.");
                             return;
                         }
                         foreach ($event_list as $objevent) {
                             if ($objevent->repeat_order >= $event->repeat_order) {
                                 $repeat_start = strtotime($objevent->starttime);
                                 $values['starttime'] = date('Y-m-d ' . $repeat_start_time, $repeat_start);
                                 $repeat_end = strtotime($objevent->endtime);
                                 $values['endtime'] = date('Y-m-d ' . $repeat_end_time, $repeat_end);
                                 $objevent->setFromArray($values);
                                 $objevent->save();
                                 // Edit photo
                                 if (!empty($values['photo'])) {
                                     $objevent->setPhoto($form->photo);
                                 }
                                 // Add Cover photo
                                 if (!empty($values['cover_thumb'])) {
                                     $objevent->setCoverPhoto($form->cover_thumb);
                                 }
                                 //Set custom fields
                                 $customfieldform = $form->getSubForm('fields');
                                 $customfieldform->setItem($objevent);
                                 $customfieldform->saveValues();
                                 // Add tags
                                 $tags = preg_split('/[,]+/', $values['tags']);
                                 $objevent->tags()->setTagMaps($viewer, $tags);
                                 // Process privacy
                                 $this->setAuth($objevent, $values);
                                 // Add notify
                                 $this->setNotify($objevent, $viewer, 'ynevent_change_details');
                             }
                         }
                         //End Event list
                     } else {
                         foreach ($event_list as $objevent) {
                             if ($objevent->repeat_order >= $event->repeat_order) {
                                 //Set viewer time zone
                                 $oldTz = date_default_timezone_get();
                                 date_default_timezone_set($viewer->timezone);
                                 $start = strtotime($values['starttime_' . $objevent->getIdentity()]);
                                 $end = strtotime($values['endtime_' . $objevent->getIdentity()]);
                                 date_default_timezone_set($oldTz);
                                 $values['starttime'] = date('Y-m-d H:i:s', $start);
                                 $values['endtime'] = date('Y-m-d H:i:s', $end);
                                 if ($start > $end) {
                                     $element = $form->getElement("starttime_heading_" . $objevent->getIdentity())->addError("Start date of the event must be less than the end date.");
                                     return;
                                 }
                                 $objevent->setFromArray($values);
                                 $objevent->save();
                                 // Edit photo
                                 if (!empty($values['photo'])) {
                                     $objevent->setPhoto($form->photo);
                                 }
                                 // Add Cover photo
                                 if (!empty($values['cover_thumb'])) {
                                     $objevent->setCoverPhoto($form->cover_thumb);
                                 }
                                 //Set custom fields
                                 $customfieldform = $form->getSubForm('fields');
                                 $customfieldform->setItem($objevent);
                                 $customfieldform->saveValues();
                                 // Add tags
                                 $tags = preg_split('/[,]+/', $values['tags']);
                                 $objevent->tags()->setTagMaps($viewer, $tags);
                                 // Process privacy
                                 $this->setAuth($objevent, $values);
                                 // Add notify
                                 $this->setNotify($objevent, $viewer, 'ynevent_change_details');
                             }
                         }
                     }
                 }
                 //End apply_for == 2
             }
             //Basic info change
         }
         //End is_change
         // Commit
         $db->commit();
     } catch (Engine_Image_Exception $e) {
         $db->rollBack();
         $form->addError(Zend_Registry::get('Zend_Translate')->_('The image you selected was too large.'));
     } catch (Exception $e) {
         $db->rollBack();
         throw $e;
     }
     // Redirect
     if ($this->_getParam('ref') === 'profile' && $redirectEvent != NULL) {
         $this->_redirectCustom($redirectEvent);
     }
     if ($event->parent_type == 'group') {
         $group = $event->getParent('group');
         $this->_redirectCustom($group);
     } else {
         $this->_redirectCustom(array('route' => 'event_general', 'action' => 'manage'));
     }
 }
Esempio n. 4
0
 public function init()
 {
     $settings = Engine_Api::_()->getApi('settings', 'core');
     $view = Zend_Registry::get("Zend_View");
     $user = Engine_Api::_()->user()->getViewer();
     $this->setTitle('Add New Campaign')->setDescription("NEW_CAMPAIGN_DESCRIPTION");
     $maxCharTitle = $settings->getSetting('tfcampaign_max_title', "300");
     $this->addElement('Text', 'title', array('label' => 'Title', 'description' => $view->translate("Maximum %s characters.", $maxCharTitle), 'allowEmpty' => false, 'required' => true, 'validators' => array(array('NotEmpty', true), array('StringLength', false, array(1, $maxCharTitle))), 'filters' => array('StripTags', new Engine_Filter_Censor())));
     $this->title->setAttrib('required', true);
     $maxCharDesc = $settings->getSetting('tfcampaign_max_description', "300");
     $this->addElement('Textarea', 'description', array('label' => 'Description', 'description' => $view->translate("Maximum %s characters.", $maxCharDesc), 'validators' => array(array('NotEmpty', true), array('StringLength', false, array(1, $maxCharDesc))), 'filters' => array('StripTags', new Engine_Filter_Censor())));
     $this->description->setAttrib('required', true);
     // Start time
     $start = new Engine_Form_Element_CalendarDateTime('start_date');
     $start->setLabel("Start Time");
     $start->setAllowEmpty(false);
     $this->addElement($start);
     // End time
     $end = new Engine_Form_Element_CalendarDateTime('end_date');
     $end->setLabel("End Time");
     $end->setAllowEmpty(false);
     $this->addElement($end);
     $sportCattable = Engine_Api::_()->getDbtable('sportcategories', 'user');
     $node = $sportCattable->getNode(0);
     $categories = $node->getChilren();
     foreach ($categories as $category) {
         $sport_categories[$category->getIdentity()] = $category->getTitle();
     }
     $this->addElement('Select', 'category_id', array('label' => 'Sport Category', 'multiOptions' => $sport_categories, 'onchange' => 'subCategories()'));
     $positions = $sportCattable->getMultiOptions('--', '', FALSE);
     array_shift($positions);
     $this->addElement('Select', 'position_id', array('label' => 'Position', 'multiOptions' => $positions));
     $this->addElement('Select', 'referred_foot', array('label' => 'Preferred Foot', 'multiOptions' => array('1' => 'Left', '2' => 'Right', '0' => 'Both')));
     /*
     $this->addElement('File', 'photo', array(
           'label' => 'Campaign Photo'
         ));
     $this -> photo -> setAllowEmpty(true);
         $this -> photo -> addValidator('Extension', false, 'jpg,png,gif,jpeg');
     $this -> photo -> setAttrib('accept', 'image/*');
     */
     $arrAge = array();
     $arrAge[] = "Any";
     for ($i = 1; $i <= 100; $i++) {
         $arrAge[] = $i;
     }
     $this->addElement('Select', 'from_age', array('label' => 'From Age', 'multiOptions' => $arrAge));
     $this->addElement('Select', 'to_age', array('label' => 'To Age', 'multiOptions' => $arrAge));
     $gender = new Engine_Form_Element_Select('gender');
     $gender->setLabel("Gender");
     $gender->setAllowEmpty(false);
     $gender->setMultiOptions(array('0' => 'Any', '1' => 'Male', '2' => 'Female'));
     $gender->setRequired(true);
     $this->addElement($gender);
     $countriesAssoc = Engine_Api::_()->getDbTable('locations', 'user')->getLocationsAssoc(0);
     $countriesAssoc = array('0' => 'Any') + $countriesAssoc;
     $this->addElement('Select', 'country_id', array('label' => 'Country', 'multiOptions' => $countriesAssoc));
     $this->addElement('Select', 'province_id', array('label' => 'Province/State'));
     $this->addElement('Select', 'city_id', array('label' => 'City'));
     $languages = Engine_Api::_()->getDbTable('languages', 'user')->getLanguagesArray();
     $this->addElement('MultiCheckbox', 'languages', array('label' => 'Languages', 'required' => false, 'allowEmpty' => true, 'multiOptions' => $languages, 'filters' => array('StripTags', new Engine_Filter_Censor())));
     $this->languages->getDecorator("Description")->setOption("placement", "append");
     $this->addElement('Select', 'percentage', array('label' => 'Matching Percentage', 'description' => 'The minimum percentage of matching.', 'multiOptions' => array('25' => '25%', '50' => '50%', '75' => '75%', '100' => '100%'), 'value' => 25));
     // View for specific users
     $this->addElement('Text', 'user', array('label' => 'Allow view for', 'autocomplete' => 'off', 'order' => '16'));
     $this->addElement('Hidden', 'user_ids', array('filters' => array('HtmlEntities'), 'order' => '18'));
     Engine_Form::addDefaultDecorators($this->user_ids);
     $allowPrivate = Engine_Api::_()->getApi('settings', 'core')->getSetting('tfcampaign_private_allow', 1);
     if ($allowPrivate) {
         // View
         $availableLabels = array('everyone' => 'Everyone', 'registered' => 'All Registered Members', 'owner_network' => 'Followers and Networks', 'owner_member_member' => 'Followers of Followers', 'owner_member' => 'My Followers', 'owner' => 'Only Me');
         $viewOptions = (array) Engine_Api::_()->authorization()->getAdapter('levels')->getAllowed('tfcampaign_campaign', $user, 'auth_view');
         $viewOptions = array_intersect_key($availableLabels, array_flip($viewOptions));
         if (!empty($viewOptions) && count($viewOptions) >= 1) {
             // Make a hidden field
             if (count($viewOptions) == 1) {
                 $this->addElement('hidden', 'auth_view', array('value' => key($viewOptions)));
                 // Make select box
             } else {
                 $this->addElement('Select', 'auth_view', array('label' => 'Who may see this campaign', 'multiOptions' => $viewOptions, 'value' => key($viewOptions), 'onchange' => 'privacyChange()'));
                 $this->auth_view->getDecorator('Description')->setOption('placement', 'append');
             }
         }
     }
     // Buttons
     $this->addElement('Button', 'submit', array('label' => 'Post Campaign ', 'type' => 'submit', 'ignore' => true, 'onClick' => 'return checkValid();', 'decorators' => array('ViewHelper')));
     $this->addElement('Cancel', 'cancel', array('label' => 'cancel', 'link' => true, 'prependText' => ' or ', 'decorators' => array('ViewHelper')));
     $this->addDisplayGroup(array('submit', 'cancel'), 'buttons', array('decorators' => array('FormElements', 'DivDivDivWrapper')));
 }
Esempio n. 5
0
 public function init()
 {
     $this->addPrefixPath('Ynevent_Form_Decorator', APPLICATION_PATH . '/application/modules/Ynevent/Form/Decorator', 'decorator')->addPrefixPath('Ynevent_Form_Element', APPLICATION_PATH . '/application/modules/Ynevent/Form/Element', 'element')->addElementPrefixPath('Ynevent_Form_Decorator', APPLICATION_PATH . '/application/modules/Ynevent/Form/Decorator', 'decorator');
     $view = Zend_Registry::get('Zend_View');
     $user = Engine_Api::_()->user()->getViewer();
     $this->setTitle('Create New Tryout/Event')->setAttrib('id', 'ynevent_create_form')->setMethod("POST")->setAction(Zend_Controller_Front::getInstance()->getRouter()->assemble(array()));
     // Title
     $this->addElement('Text', 'title', array('label' => 'Title(*)', 'allowEmpty' => false, 'required' => true, 'validators' => array(array('NotEmpty', true), array('StringLength', false, array(1, 64))), 'filters' => array('StripTags', new Engine_Filter_Censor())));
     $this->title->setAttrib('required', true);
     $title = $this->getElement('title');
     $this->addElement('Select', 'type_id', array('label' => 'Type', 'multiOptions' => array(0 => "Event", 1 => 'Tryout')));
     // Brief Description
     $this->addElement('Textarea', 'brief_description', array('label' => 'Brief Description', 'description' => 'Max 250 characters', 'maxlength' => '250', 'filters' => array('StripTags', new Engine_Filter_Censor(), new Engine_Filter_EnableLinks(), new Engine_Filter_StringLength(array('max' => 250)))));
     $this->brief_description->getDecorator('Description')->setOption('placement', 'append');
     // Description
     $this->addElement('Textarea', 'description', array('label' => 'Description', 'maxlength' => '10000', 'filters' => array('StripTags', new Engine_Filter_Censor(), new Engine_Filter_EnableLinks(), new Engine_Filter_StringLength(array('max' => 10000)))));
     $this->addElement('Text', 'tags', array('label' => 'Tags (Keywords)', 'autocomplete' => 'off', 'description' => 'Separate tags with commas.', 'filters' => array(new Engine_Filter_Censor())));
     $this->tags->getDecorator("Description")->setOption("placement", "append");
     // Description
     $this->addElement('Textarea', 'metadata', array('label' => 'Metadata Keywords', 'description' => 'Put in keywords for so that Search Engine can search your event more easily. Separate keywords with commas.', 'filters' => array(new Engine_Filter_Censor())));
     $this->metadata->getDecorator("Description")->setOption("placement", "append");
     $this->addElement('Radio', 'repeat_type', array('label' => 'Please Select', 'multiOptions' => array('0' => 'One Time', '1' => 'Repeating'), 'value' => 0, 'onclick' => 'isrepeat(this)'));
     // Start time
     $start = new Engine_Form_Element_CalendarDateTime('starttime');
     $start->setLabel("Start Time(*)");
     $start->setAllowEmpty(false);
     $this->addElement($start);
     // End time
     $end = new Engine_Form_Element_CalendarDateTime('endtime');
     $end->setLabel("End Time(*)");
     $end->setAllowEmpty(false);
     $this->addElement($end);
     $this->addElement('Select', 'repeat_frequency', array('label' => 'Repeat', 'multiOptions' => array('1' => 'Daily', '7' => 'Weekly', '30' => 'Monthly', '99' => 'Specify'), 'order' => 6, 'onchange' => 'en4.ynevent.specify(this)'));
     // Start repeat time
     $start_repeat_time = new Engine_Form_Element_CalendarDateTime('repeatstarttime');
     $start_repeat_time->setLabel("Start Time(*)");
     $start_repeat_time->setAllowEmpty(false);
     $this->addElement($start_repeat_time);
     // End repeat time
     $end_repeat_time = new Engine_Form_Element_CalendarDateTime('repeatendtime');
     $end_repeat_time->setLabel("End Time(*)");
     $end_repeat_time->setAllowEmpty(false);
     $this->addElement($end_repeat_time);
     // Start repeat date
     $start_repeat = new Engine_Form_Element_CalendarDateTime('repeatstartdate');
     $start_repeat->setLabel("Start Date(*)");
     $start_repeat->setAllowEmpty(false);
     $this->addElement($start_repeat);
     // End repeat date
     $end_repeat = new Engine_Form_Element_CalendarDateTime('repeatenddate');
     $end_repeat->setLabel("End Date(*)");
     $end_repeat->setAllowEmpty(false);
     $this->addElement($end_repeat);
     // Start time
     $spec_start_date = new Engine_Form_Element_CalendarDateTime('spec_start_date');
     $spec_start_date->setLabel("Add Start Date(*)");
     $spec_start_date->setAllowEmpty(false);
     $this->addElement($spec_start_date);
     // End time
     $spec_end_date = new Engine_Form_Element_CalendarDateTime('spec_end_date');
     $spec_end_date->setLabel("Add End Date(*)");
     $spec_end_date->setAllowEmpty(false);
     $this->addElement($spec_end_date);
     $this->addElement('Dummy', 'specify_repeat', array('decorators' => array(array('ViewScript', array('viewScript' => '_specify_repeat.tpl', 'class' => 'form element')))));
     // Capacity
     $this->addElement('Text', 'capacity', array('label' => 'Capacity', 'description' => 'Set 0 for unlimited participants', 'allowEmpty' => false, 'required' => true, 'value' => 0, 'validators' => array(array('Int', true), new Engine_Validate_AtLeast(0))));
     $this->capacity->getDecorator('Description')->setOption('placement', 'append');
     // Capacity
     $this->addElement('Text', 'price', array('label' => 'Price', 'description' => 'Set 0 for free', 'allowEmpty' => false, 'required' => true, 'value' => 0, 'validators' => array(array('Float', true), new Engine_Validate_AtLeast(0))));
     $this->price->getDecorator('Description')->setOption('placement', 'append');
     $countriesAssoc = Engine_Api::_()->getDbTable('locations', 'user')->getLocationsAssoc(0);
     $countriesAssoc = array('0' => '') + $countriesAssoc;
     $this->addElement('Select', 'country_id', array('label' => 'Country', 'multiOptions' => $countriesAssoc));
     $this->addElement('Select', 'province_id', array('label' => 'Province/State'));
     $this->addElement('Select', 'city_id', array('label' => 'City'));
     // Address
     $this->addElement('Text', 'full_address', array('label' => 'Full Address', 'required' => false, 'style' => 'width: 400px;', 'description' => $view->htmlLink(array('action' => 'add-location', 'route' => 'event_general', 'reset' => true), $view->translate('View map'), array('class' => 'smoothbox')), 'filters' => array(new Engine_Filter_Censor())));
     $this->full_address->getDecorator("Description")->setOption("placement", "append")->setEscape(FALSE);
     if ($this->_parent_type == 'user') {
         $host = "";
         if ($this->_item) {
             $host = $this->_item->host;
         }
         $this->addElement('Dummy', 'host', array('label' => 'Host', 'value' => $host, 'decorators' => array(array('ViewScript', array('viewScript' => '_host.tpl', 'class' => 'form element')))));
     }
     // Cover Photo
     $this->addElement('File', 'cover_thumb', array('label' => 'Cover Photo'));
     $this->cover_thumb->addValidator('Extension', false, 'jpg,png,gif,jpeg');
     // Photo
     $this->addElement('File', 'photo', array('label' => 'Event/Tryout Photo'));
     $this->photo->addValidator('Extension', false, 'jpg,png,gif,jpeg');
     $sportCattable = Engine_Api::_()->getDbtable('sportcategories', 'user');
     $node = $sportCattable->getNode(0);
     $categories = $node->getChilren();
     $sport_categories[0] = '';
     foreach ($categories as $category) {
         $sport_categories[$category->getIdentity()] = $category->getTitle();
     }
     $this->addElement('Select', 'category_id', array('label' => 'Sport Category', 'multiOptions' => $sport_categories));
     // Email
     $this->addElement('Text', 'email', array('label' => 'Email', 'allowEmpty' => true, 'required' => false, 'filters' => array('StripTags', new Engine_Filter_Censor()), 'validators' => array(array('NotEmpty', true), array('EmailAddress', true))));
     // Url
     $this->addElement('Text', 'url', array('label' => 'Url', 'allowEmpty' => true, 'required' => false, 'filters' => array('StripTags', new Engine_Filter_Censor())));
     // Phone
     $this->addElement('Text', 'phone', array('label' => 'Phone', 'allowEmpty' => true, 'required' => false, 'filters' => array('StripTags', new Engine_Filter_Censor())));
     // Contact Information
     $this->addElement('Text', 'contact_info', array('label' => 'Contact Information', 'allowEmpty' => true, 'required' => false, 'filters' => array('StripTags', new Engine_Filter_Censor())));
     // Search
     $this->addElement('Checkbox', 'search', array('label' => 'People can search for this event', 'value' => True));
     // Approval
     $this->addElement('Checkbox', 'approval', array('label' => 'People must be invited to RSVP for this event'));
     // Invite
     $this->addElement('Checkbox', 'auth_invite', array('label' => 'Invited guests can invite other people as well', 'value' => True));
     // Add subforms
     if (!$this->_item) {
         $customFields = new Ynevent_Form_Custom_Fields();
     } else {
         $customFields = new Ynevent_Form_Custom_Fields(array('item' => $this->getItem()));
     }
     if (get_class($this) == 'Ynevent_Form_Create') {
         $customFields->setIsCreation(true);
     }
     $this->addSubForms(array('fields' => $customFields));
     // Privacy
     $viewOptions = (array) Engine_Api::_()->authorization()->getAdapter('levels')->getAllowed('event', $user, 'auth_view');
     $commentOptions = (array) Engine_Api::_()->authorization()->getAdapter('levels')->getAllowed('event', $user, 'auth_comment');
     $availableLabels = array('everyone' => 'Everyone', 'registered' => 'All Registered Members', 'owner_network' => 'Followers and Networks', 'owner_member_member' => 'Followers of Followers', 'owner_member' => 'Followers Only', 'member' => 'Event Guests Only', 'leader' => 'Owner and Leader', 'owner' => 'Just Me');
     $viewOptions = array_intersect_key($availableLabels, array_flip($viewOptions));
     $commentOptions = array_intersect_key($availableLabels, array_flip($commentOptions));
     // View
     if (!empty($viewOptions) && count($viewOptions) >= 1) {
         // Make a hidden field
         if (count($viewOptions) == 1) {
             $this->addElement('hidden', 'auth_view', array('value' => key($viewOptions)));
             // Make select box
         } else {
             $this->addElement('Select', 'auth_view', array('label' => 'Privacy', 'description' => 'Who may see this event?', 'multiOptions' => $viewOptions, 'value' => key($viewOptions)));
             $this->auth_view->getDecorator('Description')->setOption('placement', 'append');
         }
     }
     // Comment
     if (!empty($commentOptions) && count($commentOptions) >= 1) {
         // Make a hidden field
         if (count($commentOptions) == 1) {
             $this->addElement('hidden', 'auth_comment', array('value' => key($commentOptions)));
             // Make select box
         } else {
             $this->addElement('Select', 'auth_comment', array('label' => 'Comment Privacy', 'description' => 'Who may post comments on this event?', 'multiOptions' => $commentOptions, 'value' => key($commentOptions)));
             $this->auth_comment->getDecorator('Description')->setOption('placement', 'append');
         }
     }
     $this->addElement('Hidden', 'address', array('order' => '21'));
     $this->addElement('Hidden', 'city', array('order' => '22'));
     $this->addElement('Hidden', 'country', array('order' => '23'));
     $this->addElement('Hidden', 'zip_code', array('order' => '24'));
     $this->addElement('Hidden', 'latitude', array('order' => '25'));
     $this->addElement('Hidden', 'longitude', array('order' => '26'));
     $this->addElement('Hidden', 'apply_for_action', array('order' => '27', 'value' => 0));
     $this->addElement('Hidden', 'f_repeat_type', array('order' => '28'));
     $this->addElement('Hidden', 'g_repeat_type', array('order' => '29'));
     // Buttons
     $this->addElement('Button', 'save_change', array('label' => 'Post Event/Tryous', 'type' => 'submit', 'ignore' => true, 'decorators' => array('ViewHelper')));
     $this->addElement('Cancel', 'cancel', array('label' => 'cancel', 'link' => true, 'prependText' => ' or ', 'decorators' => array('ViewHelper')));
     $this->addDisplayGroup(array('save_change', 'cancel'), 'buttons', array('decorators' => array('FormElements', 'DivDivDivWrapper')));
 }