public function getUpdateAll() { // Fetch all projects in Egypt $ch = curl_init(); $projectsUrl = "https://api.betterplace.org/en/api_v4/projects.json?around=Egypt&scope=location&per_page=100"; curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_URL, $projectsUrl); $projects = json_decode(curl_exec($ch), true); curl_close($ch); foreach ($projects['data'] as $project) { if ($project['country'] == 'Egypt') { $projectData = array('external_id' => $project['id'], 'city' => $project['city'], 'country' => $project['country'], 'title' => $project['title'], 'description' => $project['description'], 'tax_deductible' => $project['tax_deductible'], 'donations_prohibited' => $project['donations_prohibited'], 'completed_at' => $project['completed_at'], 'open_amount_in_cents' => $project['open_amount_in_cents'], 'positive_opinions_count' => $project['positive_opinions_count'], 'negative_opinions_count' => $project['negative_opinions_count'], 'donor_count' => $project['donor_count'], 'progress_percentage' => $project['progress_percentage'], 'incomplete_need_count' => $project['incomplete_need_count'], 'completed_need_count' => $project['completed_need_count']); // Insert new or update existing project $newProject = Project::firstOrNew(array('external_id' => $project['id'])); $newProject->fill($projectData); $newProject->save(); } } // Fetch all opinions for the given project $mh = curl_multi_init(); $curl_arr = array(); $projects = Project::all(); $totalProjects = $projects->count(); for ($i = 0; $i < $totalProjects; $i++) { $opinionsUrl = "https://api.betterplace.org/de/api_v4/projects/" . $projects[$i]['external_id'] . "/opinions.json?per_page=" . $projects[$i]['donor_count']; // Executing requests in parallel $curl_arr[$i] = curl_init($opinionsUrl); curl_setopt($curl_arr[$i], CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true); curl_multi_add_handle($mh, $curl_arr[$i]); } do { curl_multi_exec($mh, $running); } while ($running > 0); for ($i = 0; $i < $totalProjects; $i++) { $opinions = json_decode(curl_multi_getcontent($curl_arr[$i]), true); foreach ($opinions['data'] as $opinion) { // Excluding opinions witothout a donation if (isset($opinion['donated_amount_in_cents'])) { $opinionData = array('external_id' => $opinion['id'], 'project_id' => $project['id'], 'donated_amount_in_cents' => $opinion['donated_amount_in_cents'], 'score' => $opinion['score'], 'author' => $opinion['author']['name'], 'message' => $opinion['message'], 'donated_at' => $opinion['created_at']); // Insert new or update existing opinion $newOpinion = Opinion::firstOrNew(array('external_id' => $opinion['id'])); $newOpinion->fill($opinionData); $newOpinion->save(); } } } curl_multi_close($mh); return view('projects.update'); }
/** * @param $input * @return mixed */ private function createProjectStub($input, $org_id) { $project = Project::firstOrNew(['name' => $input['name'], 'org_id' => $org_id]); $project->name = $input['name']; $project->desc = $input['desc']; $project->type = $input['type']; $project->validate = $input['validate']; $project->submit = $input['submit']; $project->sections = $input['sections']; $project->reporting = $input['reporting']; return $project; }