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; }