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; }
/** * 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; }
/** * 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); }
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; } }
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'); }
public function delete($id) { Requests::destroy($id); return redirect('requests'); }