예제 #1
0
 public function requestAPI($API = null, $username = null)
 {
     $data = array('API' => $API, 'IP' => $_SERVER['REMOTE_ADDR'], 'username' => $username, 'nounce' => gmdate(time()), 'DateTime' => new \MongoDate());
     $requests = Requests::find('first', array('conditions' => array('IP' => $_SERVER['REMOTE_ADDR'], 'API' => $API), 'order' => array('DateTime' => -1)));
     Requests::create()->save($data);
     if ($_SERVER['REMOTE_ADDR'] == '198.50.222.223') {
         return true;
     }
     if ($_SERVER['REMOTE_ADDR'] == '107.20.80.120') {
         return true;
     }
     if ($_SERVER['REMOTE_ADDR'] == '178.62.83.36') {
         return true;
     }
     //bittybot.co.uk
     if ($_SERVER['REMOTE_ADDR'] == '107.6.11.150') {
         return true;
     }
     //GreenCoinX.com
     if ($_SERVER['REMOTE_ADDR'] == '127.0.0.1') {
         return true;
     }
     //GreenCoinX.com
     if ($_SERVER['REMOTE_ADDR'] == '107.6.11.211') {
         return true;
     }
     //SiiCrypto.com
     if (in_array($username, array("SiiUserA", "SiiUserB"))) {
         return true;
     }
     if (gmdate(time()) - $requests['nounce'] <= 1000) {
         return false;
     }
     return true;
 }
예제 #2
0
 /**
  * Creates data provider instance with search query applied
  *
  * @param array $params
  *
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $query = Requests::find();
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     $dataProvider->setSort(['attributes' => ['id', 'userlogin' => ['asc' => ['users.login' => SORT_ASC], 'desc' => ['users.login' => SORT_DESC], 'label' => 'user', 'default' => SORT_ASC], 'tasktitle' => ['asc' => ['tasks.title' => SORT_ASC], 'desc' => ['tasks.title' => SORT_DESC], 'label' => 'task', 'default' => SORT_ASC], 'answer', 'created', 'result']]);
     $this->load($params);
     if (!$this->validate()) {
         // uncomment the following line if you do not want to return any records when validation fails
         // $query->where('0=1');
         return $dataProvider;
     }
     $query->andFilterWhere(['id' => $this->id, 'created' => $this->created, 'result' => $this->result]);
     $query->andFilterWhere(['like', 'answer', $this->answer]);
     $query->joinWith(["user" => function ($q) {
         $q->where("users.login LIKE '%" . $this->userlogin . "%'");
     }]);
     $query->joinWith(["task" => function ($q) {
         $q->where("tasks.title LIKE '%" . $this->tasktitle . "%'");
     }]);
     return $dataProvider;
 }
예제 #3
0
 /**
  * Store a newly created resource in storage.
  *
  * @param  Request  $request
  * @return Response
  */
 public function store(Request $request)
 {
     sleep(3);
     //id of the user who is making the request
     $requester_id = Auth::user()->id;
     //Validate the request.
     $this->validate($request, array('pick-up-location' => 'required', 'drop-off-location' => 'required', 'pick-up-time' => 'required', 'sourceAddressComponents.lat' => 'required|max:90|min:-90', 'destinationAddressComponents.lat' => 'required|max:90|min:-90', 'sourceAddressComponents.lng' => 'required|max:180|min:-180', 'destinationAddressComponents.lng' => 'required|max:180|min:-180', 'destinationAddressComponents.country' => 'required|max:180|min:-180'));
     $source_lat = $request->input('sourceAddressComponents.lat', 0);
     $source_lng = $request->input('sourceAddressComponents.lng', 0);
     $destination_lat = $request->input('destinationAddressComponents.lat', 0);
     $destination_lng = $request->input('destinationAddressComponents.lng', 0);
     //Store mapping of address get the id
     $source_address = EntityAddress::firstOrCreate(array('full_address_text' => $request->input('pick-up-location', ''), 'street_name' => $request->input('sourceAddressComponents.street_number', ''), 'route' => $request->input('sourceAddressComponents.route', ''), 'locality' => $request->input('sourceAddressComponents.locality', ''), 'neighborhood' => $request->input('sourceAddressComponents.neighborhood', ''), 'administrative_area_level_2' => $request->input('sourceAddressComponents.administrative_area_level_2', ''), 'administrative_area_level_1' => $request->input('sourceAddressComponents.administrative_area_level_1', ''), 'country' => $request->input('sourceAddressComponents.country', ''), 'postal_zip' => $request->input('sourceAddressComponents.postal_code', ''), 'geo_location' => DB::raw("(GeomFromText('POINT({$source_lat} {$source_lng})'))")));
     //Store mapping of destination address
     //if it already exists use that address id.
     $destination_address = EntityAddress::firstOrCreate(array('full_address_text' => $request->input('drop-off-location', ''), 'street_name' => $request->input('destinationAddressComponents.street_number', ''), 'route' => $request->input('destinationAddressComponents.route', ''), 'locality' => $request->input('destinationAddressComponents.locality', ''), 'neighborhood' => $request->input('destinationAddressComponents.neighborhood', ''), 'administrative_area_level_2' => $request->input('destinationAddressComponents.administrative_area_level_2', ''), 'administrative_area_level_1' => $request->input('destinationAddressComponents.administrative_area_level_1', ''), 'country' => $request->input('destinationAddressComponents.country', ''), 'postal_zip' => $request->input('destinationAddressComponents.postal_code', ''), 'geo_location' => DB::raw("(GeomFromText('POINT({$destination_lat} {$destination_lng})'))")));
     //get default status when request is created.
     $request_status_id = RequestStatuses::getDefaultRequestStatus();
     //Store the request.
     $pool_request = Requests::create(array('requester_id' => $requester_id, 'source_address_id' => $source_address->id, 'destination_address_id' => $destination_address->id, 'request_status_id' => $request_status_id));
     //get all values from pickup times table
     $pickup_times = PickupTimes::all()->toArray();
     $lookup_hash = array();
     foreach ($pickup_times as $index => $arr) {
         $lookup_hash[$arr['id']] = $arr['time_value'];
     }
     //Store the mapping of times
     $pickup_times = $request->input('pick-up-time');
     $request_pickup_time_array = array();
     foreach ($pickup_times as $index => $time) {
         $timestamp = time();
         if (isset($lookup_hash[$time + 1])) {
             $today_date = date('Y-m-d');
             $timestamp = $today_date . ' ' . $lookup_hash[$time + 1];
         }
         $request_pickup_time_array[] = array('request_id' => $pool_request->id, 'pickup_timestamp' => $timestamp);
     }
     RequestPickupTimes::insert($request_pickup_time_array);
 }
 /**
  * Get the matching request for the given request id.
  *
  * @param  int  $id
  * @return Response
  */
 public function show($id)
 {
     //Unique namespace for request PMRequest.
     $request = PMRequest::find($id);
     //Not a valid request
     if (empty($request)) {
         return parent::InvalidRequestResponseHandler();
         exit;
     }
     $request_pickup_times = $request->requestPickupTimes->toArray();
     $request_pickup_times_array = array();
     foreach ($request_pickup_times as $index => $vArray) {
         $request_pickup_times_array[] = $vArray['pickup_timestamp'];
     }
     $request_pickup_times_hash = array_flip($request_pickup_times_array);
     $time_filtered_requests = RequestPickupTimes::getRequestWithMatchingPickup($request_pickup_times_array, $id, $request->requester_id);
     //No requests matched, you want to suggest somthing to the user here
     if (empty($time_filtered_requests)) {
         return parent::NoRequestMatchResponseHandler();
         exit;
     }
     $result = array();
     foreach ($time_filtered_requests as $index => $request_info) {
         if (!isset($result[$request_info->request_id])) {
             $result[$request_info->request_id] = array();
         }
         $result[$request_info->request_id]['pickup_time'][] = $request_info->pickup_timestamp;
     }
     $time_filtered_requests_ids = array_keys($result);
     //get source address for my request
     $source_address = $request->sourceAddress;
     //get destination address for my request.
     $destination_address = $request->destinationAddress;
     //Get spatial distance from MySQL for source address
     $requests_by_source_distance = EntityAddress::getDistanceAmongRequestsByTimeFilteredIds($time_filtered_requests_ids, $source_address->lat, $source_address->lng, "source_address_id", $request_pickup_times_hash);
     $requests_by_destination_distance = EntityAddress::getDistanceAmongRequestsByTimeFilteredIds($time_filtered_requests_ids, $destination_address->lat, $destination_address->lng, "destination_address_id", $request_pickup_times_hash);
     $gdm_request_source = EntityAddress::getCSVForLatLong($source_address);
     $gdm_request_destination = EntityAddress::getCSVForLatLong($destination_address);
     $gdm_request_potential_source_matches = EntityAddress::getCSVForLatLong($requests_by_source_distance);
     $gdm_request_potential_destination_matches = EntityAddress::getCSVForLatLong($requests_by_destination_distance);
     $gdm_request_potential_source_matches = GoogleDistanceMatrixManager::get_distance_matrix($gdm_request_source, $gdm_request_potential_source_matches, Config::get('pm_constants.formats.array'));
     $gdm_request_potential_destination_matches = GoogleDistanceMatrixManager::get_distance_matrix($gdm_request_destination, $gdm_request_potential_destination_matches, Config::get('pm_constants.formats.array'));
     $api_response = PMRequest::formatAPIResponse($request, $source_address, $destination_address, $requests_by_source_distance, $requests_by_destination_distance, $gdm_request_potential_source_matches, $gdm_request_potential_destination_matches);
     return parent::ValidResponseHandler($api_response);
 }
예제 #5
0
 public static function submitFlag($team, $task, $flag)
 {
     if (Tasks::isTaskAccepted($team, $task)) {
         return true;
     }
     $model = Tasks::find()->where(["id" => $task])->one();
     if (!$model) {
         return false;
     }
     if ($model->visible !== 1) {
         return false;
     }
     $request = new Requests();
     $request->user_id = $team;
     $request->task_id = $task;
     $request->answer = $flag;
     $task_is_accepted = false;
     if ($model->checker_name === 0) {
         $task_is_accepted = $flag === $model->answer;
     } else {
         $main_checker = new MainChecker();
         $task_is_accepted = $main_checker->checkFlag($model->checker_name, $flag);
     }
     if ($task_is_accepted === true) {
         Tasks::givePoints($team, $task);
         $request->result = 1;
         $request->save();
         $tasks_open = Tasks::find()->where(["category" => $model->category])->andWhere('position = :position+1', [':position' => $model->position])->orderBy("position")->all();
         foreach ($tasks_open as $task_open) {
             $task_open->visible = 1;
             $task_open->save();
         }
         return true;
     } else {
         $request->result = 0;
         $request->save();
         return false;
     }
 }
예제 #6
0
 public function api()
 {
     if ($this->__init() == false) {
         $this->redirect('ex::dashboard');
     }
     if ($this->request->data) {
         $StartDate = new MongoDate(strtotime($this->request->data['StartDate']));
         $EndDate = new MongoDate(strtotime($this->request->data['EndDate']));
     } else {
         $StartDate = new MongoDate(strtotime(gmdate('Y-m-d H:i:s', mktime(0, 0, 0, gmdate('m', time()), gmdate('d', time()), gmdate('Y', time())) - 60 * 60 * 24 * 2)));
         $EndDate = new MongoDate(strtotime(gmdate('Y-m-d H:i:s', mktime(0, 0, 0, gmdate('m', time()), gmdate('d', time()), gmdate('Y', time())) + 60 * 60 * 24 * 1)));
     }
     $mongodb = Connections::get('default')->connection;
     $Requests = Requests::connection()->connection->command(array('aggregate' => 'requests', 'pipeline' => array(array('$project' => array('_id' => 0, 'DateTime' => '$DateTime', 'API' => '$API', 'username' => '$username', 'IP' => '$IP', 'nounce' => '$nounce')), array('$match' => array('DateTime' => array('$gte' => $StartDate, '$lte' => $EndDate))), array('$group' => array('_id' => array('year' => array('$year' => '$DateTime'), 'month' => array('$month' => '$DateTime'), 'day' => array('$dayOfMonth' => '$DateTime'), 'username' => '$username', 'IP' => '$IP', 'API' => '$API'), 'count' => array('$sum' => 1))), array('$sort' => array('_id.year' => -1, '_id.month' => -1, '_id.day' => -1, '_id.username' => 1, '_id.API' => 1)))));
     $new = array();
     $days = ($EndDate->sec - $StartDate->sec) / (60 * 60 * 24);
     for ($i = 0; $i <= $days; $i++) {
         $date = gmdate('Y-m-d', $EndDate->sec - $i * 60 * 60 * 24);
         $new[$date] = array();
     }
     foreach ($Requests['result'] as $rq) {
         $RQdate = date_create($rq['_id']['year'] . "-" . $rq['_id']['month'] . "-" . $rq['_id']['day']);
         $RQDate = date_format($RQdate, "Y-m-d");
         $new[$RQDate][$rq['_id']['username']][$rq['_id']['API']][$rq['_id']['IP']] = array('Request' => $rq['count']);
     }
     return compact('new');
 }
예제 #7
0
 public function delete($id)
 {
     Requests::destroy($id);
     return redirect('requests');
 }