function build_json_response() { if (!isset($_POST['json'])) { return array('error' => array('message' => 'No JSON found')); } $data = json_decode($_POST['json'], true); if (!$data) { return array('error' => array('message' => 'JSON could not be decoded')); } if (!$data['id']) { return array('error' => array('message' => 'Missing ID')); } // Converts data to an event, loading the existing one if id is included in data $event = Event::fromArray($data); // Else if ($event->exists() && !$event->secretValid($data['secret'])) { return array('error' => array('message' => 'Invalid secret, use link from email')); } try { $event->delete(); } catch (Exception $ex) { return array('error' => array('message' => 'Server error')); } return array('success' => true); }
/** * SetUp */ public function setup() { foreach ($this->_items as $i => $item) { $event = new Event(); $event->fromArray($item); $form = new EventBatchForm($event); $form->getWidgetSchema()->setFormFormatterName('Inline'); $this->embedForm($i, $form); } $this->widgetSchema->setNameFormat('events[%s]'); $this->validatorSchema->setOption('allow_extra_fields', true); $this->disableLocalCSRFProtection(); }
public function executeSave(sfWebRequest $request) { $items = $request->getParameter('events'); $config = $request->getParameter('config'); $place = PlaceTable::getInstance()->findOneById((int) $config['place_id']); $user = $this->getUser()->getGuardUser(); $this->events = array(); foreach ($items as $item) { $event = new Event(); $event->fromArray(array('icon' => $config['icon'], 'title' => $item['title'], 'description' => $item['description'], 'fire_at' => date('Y-m-d H:i:s', strtotime($item['fire_at'])), 'place_id' => (int) $config['place_id'], 'user_id' => $user->id, 'geo_lat' => $place->geo_lat, 'geo_lng' => $place->geo_lng)); $event->save(); $this->events[] = $event; } }
function build_json_response() { if (!isset($_POST['json'])) { return array('error' => array('message' => "No JSON found")); } $data = json_decode($_POST['json'], true); if (!$data) { return array('error' => array('message' => "JSON could not be decoded")); } $_POST = $data; // fValidation inspects $_POST for field data $validator = new fValidation(); $validator->addRequiredFields('title', 'details', 'venue', 'address', 'organizer', 'email', 'read_comic'); $validator->addEmailFields('email'); $validator->addRegexReplacement('#^(.*?): (.*)$#', '\\2 for <span class="field-name">\\1</span>'); // If id is specified require secret $validator->addConditionalRule(array('id'), NULL, array('secret')); $messages = $validator->validate(TRUE, TRUE); if (!$data['read_comic']) { $messages['read_comic'] = 'You must have read the Ride Leading Comic'; } if ($messages) { return array('error' => array('message' => 'There were errors in your fields', 'fields' => $messages)); } $inputDateStrings = get($data['dates'], array()); $validDates = array(); $invalidDates = array(); foreach ($inputDateStrings as $dateString) { $date = DateTime::createFromFormat('Y-m-d', $dateString); if ($date) { $validDates[] = $date; } else { $invalidDates[] = $dateString; } } if ($invalidDates) { $messages['dates'] = "Invalid dates: " . implode(', ', $invalidDates); } if (count($validDates) === 1) { $data['datestype'] = 'O'; $data['datestring'] = date_format($validDates[0], 'l, F j'); } else { // not dealing with 'consecutive' $data['datestype'] = 'S'; $data['datestring'] = 'Scattered days'; } // Converts data to an event, loading the existing one if id is included in data $event = Event::fromArray($data); // Else if ($event->exists() && !$event->secretValid($data['secret'])) { return array('error' => array('message' => 'Invalid secret, use link from email')); } $messages = $event->validate($return_messages = TRUE, $remove_column_names = TRUE); if (isset($_FILES['file'])) { $uploader = new fUpload(); $uploader->setMIMETypes(array('image/gif', 'image/jpeg', 'image/pjpeg', 'image/png'), 'The file uploaded is not an image'); $uploader->setMaxSize('2MB'); $uploader->setOptional(); $file_message = $uploader->validate('file', TRUE); if ($file_message != null) { $messages['file'] = $file_message; } global $IMAGEDIR; $file = $uploader->move($IMAGEDIR, 'file'); $event->setImage($file->getName()); } if ($messages) { return array('error' => array('message' => 'There were errors in your fields', 'fields' => $messages)); } // if needs secret generate and email if (!$event->exists()) { $includeSecret = true; } else { $includeSecret = false; } // If there are validation errors this starts spewing html, so we validate before $event->store(); // Create/delete EventTimes to match the list of dates included EventTime::matchEventTimesToDates($event, $validDates); // Returns the created object $details = $event->toDetailArray(true); if ($includeSecret) { $details['secret'] = $event->getPassword(); // Wait until after it is stored to ensure it has an id $event->emailSecret(); } return $details; }
<?php /** * Imports some events from the real calendar for testing * * Takes one argument, number of days of events to import. Default is 10. */ include 'init.php'; const URL = 'http://shift2bikes.org/betacal/www/events.php'; if (count($argv) > 1) { $futureDays = intval($argv[1]) - 1; } else { $futureDays = 9; } $endDate = new DateTime("+{$futureDays} days"); $ch = curl_init(URL . "?enddate=" . $endDate->format('Y-m-d')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $eventJson = curl_exec($ch); curl_close($ch); $decoded = json_decode($eventJson, true); $eventArrays = $decoded['events']; foreach ($eventArrays as $eventArray) { $event = Event::fromArray($eventArray); $event->store(); $dates = array(DateTime::createFromFormat('Y-m-d', $eventArray['date'])); EventTime::matchEventTimesToDates($event, $dates); } $num = count($eventArrays); print "Imported {$num} events from shift2bikes.org\n";