Example #1
0
 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;
 }