public static function create(Inputter $inputter, JSONOutputter $outputter)
 {
     //	Create
     //
     //	1) Test all data is available and valid
     //
     //		Availability
     //
     $user_type_key = 'user_type';
     $required_dictionary = array($user_type_key => '');
     $optional_dictionary = array(UNIVERSALLY_UNIQUE_OBJECT_KEY_IDENTIFICATION => uniqid(), UNIVERSALLY_UNIQUE_OBJECT_KEY_DATE_CREATED => date('c'), UNIVERSALLY_UNIQUE_OBJECT_KEY_DATE_UPDATED => date('c'), USER_KEY_NOTIFICATION_DEVICE_IDENTIFIERS => array(), CREATINGUSER_KEY_FIRST_NAME => null, CREATINGUSER_KEY_SURNAME => null, CREATINGUSER_KEY_NAME => null, CREATINGUSER_KEY_GENDER => null);
     $inputter->validate_input($required_dictionary, $optional_dictionary);
     //		Valid
     //
     //			User type
     //
     if ($inputter->variables_array[$user_type_key] !== 'creating_user' && $inputter->variables_array[$user_type_key] !== 'attending_user') {
         $error = Error::withDomain(PRIVATE_EVENTS_REST_CONTROLLER_ERROR_DOMAIN, PRIVATE_EVENTS_REST_CONTROLLER_ERROR_CODE_INPUT_UNCONFORMING, $user_type_key . " should be 'creating_user' or 'attending_user'.");
         $outputter->print_error($error);
         return;
     }
     //			User
     //
     $user_error = null;
     $user_labels = null;
     if ($inputter->variables_array[$user_type_key] === 'creating_user') {
         //	Creating user
         //
         CreatingUser::isValid($inputter->variables_array, false, $user_error);
         $user_labels = CreatingUser::labels();
     } else {
         if ($inputter->variables_array[$user_type_key] === 'attending_user') {
             //	Attending user
             //
             AttendingUser::isValid($inputter->variables_array, false, $user_error);
             $user_labels = AttendingUser::labels();
         }
     }
     if (isset($user_error)) {
         $outputter->print_error($user_error);
         return;
     }
     //	2) Check request we want to process CAN go ahead
     //
     //		Identification might exist
     //
     $client = new Everyman\Neo4j\Client('events.sb04.stations.graphenedb.com', 24789);
     $client->getTransport()->setAuth('Events', '3TP9LHROhv8LIcGmbYzq');
     $query_string_check_object = 'MATCH (object:UniversallyUniqueObject) ' . 'WHERE object.' . UNIVERSALLY_UNIQUE_OBJECT_KEY_IDENTIFICATION . ' = \'' . $inputter->variables_array[UNIVERSALLY_UNIQUE_OBJECT_KEY_IDENTIFICATION] . '\' ' . 'RETURN object';
     $query_check_object = new Everyman\Neo4j\Cypher\Query($client, $query_string_check_object);
     $result_check_object = $query_check_object->getResultSet();
     if ($result_check_object->count() > 0) {
         //	At least one object exists
         //
         $outputter->print_error(Error::withDomain(PRIVATE_EVENTS_REST_CONTROLLER_ERROR_DOMAIN, PRIVATE_EVENTS_REST_CONTROLLER_ERROR_CODE_ENTITY_EXISTS, 'Identification should be unique.'));
     }
     //		User might exist (check against email)
     //
     //			Create query
     //
     $query_string_create_user = '******' . 'WHERE user.' . USER_KEY_EMAIL . ' = \'' . $inputter->variables_array[USER_KEY_EMAIL] . '\' ' . 'RETURN user';
     $query_create_user = new Everyman\Neo4j\Cypher\Query($client, $query_string_create_user);
     $result_create_user = $query_create_user->getResultSet();
     if ($result_create_user->count() > 0) {
         //	At least one user exists
         //
         $outputter->print_error(Error::withDomain(PRIVATE_EVENTS_REST_CONTROLLER_ERROR_DOMAIN, PRIVATE_EVENTS_REST_CONTROLLER_ERROR_CODE_ENTITY_EXISTS, 'A user with the email ' . $inputter->variables_array[USER_KEY_EMAIL] . ' already exists.'));
     }
     //	3) We've got the go ahead to process the request as it's intended - create a new user in the data store
     //
     //		Query string
     //
     //			Properties
     //
     $account_to_create = $client->makeNode();
     //	Properties
     //
     $account_to_create->setProperty(UNIVERSALLY_UNIQUE_OBJECT_KEY_IDENTIFICATION, $inputter->variables_array[UNIVERSALLY_UNIQUE_OBJECT_KEY_IDENTIFICATION]);
     $account_to_create->setProperty(UNIVERSALLY_UNIQUE_OBJECT_KEY_DATE_CREATED, $inputter->variables_array[UNIVERSALLY_UNIQUE_OBJECT_KEY_DATE_CREATED]);
     $account_to_create->setProperty(UNIVERSALLY_UNIQUE_OBJECT_KEY_DATE_UPDATED, $inputter->variables_array[UNIVERSALLY_UNIQUE_OBJECT_KEY_DATE_UPDATED]);
     $account_to_create->setProperty(USER_KEY_EMAIL, $inputter->variables_array[USER_KEY_EMAIL]);
     $account_to_create->setProperty(USER_KEY_PASSWORD, $inputter->variables_array[USER_KEY_PASSWORD]);
     if (isset($inputter->variables_array[CREATINGUSER_KEY_FIRST_NAME])) {
         $account_to_create->setProperty(CREATINGUSER_KEY_FIRST_NAME, $inputter->variables_array[CREATINGUSER_KEY_FIRST_NAME]);
     }
     if (isset($inputter->variables_array[CREATINGUSER_KEY_SURNAME])) {
         $account_to_create->setProperty(CREATINGUSER_KEY_SURNAME, $inputter->variables_array[CREATINGUSER_KEY_SURNAME]);
     }
     if (isset($inputter->variables_array[CREATINGUSER_KEY_NAME])) {
         $account_to_create->setProperty(CREATINGUSER_KEY_NAME, $inputter->variables_array[CREATINGUSER_KEY_NAME]);
     }
     if (isset($inputter->variables_array[CREATINGUSER_KEY_GENDER])) {
         $account_to_create->setProperty(CREATINGUSER_KEY_GENDER, $inputter->variables_array[CREATINGUSER_KEY_GENDER]);
     }
     //	Save
     //
     $account_to_create->save();
     //	Add labels
     //
     $label_objects = array();
     foreach ($user_labels as $name) {
         array_push($label_objects, new Everyman\Neo4j\Label($client, $name));
     }
     if (count($label_objects) > 0) {
         $account_to_create->addLabels($label_objects);
     }
     //	4) Output results
     //
     //	Compare sent data is equal to data retrieved
     //
     if ($inputter->variables_array[$user_type_key] === 'creating_user') {
         $user_print = CreatingUser::printer_dictionary($account_to_create);
     } else {
         if ($inputter->variables_array[$user_type_key] === 'attending_user') {
             $user_print = AttendingUser::printer_dictionary($account_to_create);
         }
     }
     //	Print data
     //
     $outputter->print_data(array(array($user_print)));
 }
 public static function labels()
 {
     $labels = parent::labels();
     array_push($labels, 'AttendingUser');
     return $labels;
 }