Example #1
0
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();
 }
Example #3
0
 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;
     }
 }
Example #4
0
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;
}
Example #5
0
<?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";