/**
  * add or edit project hook settings
  * @param [Request] $request HTTP Request
  *
  * @link(http://doc.gitlab.com/ce/api/projects.html#add-project-hook, link)
  */
 public function addOrEditProjectHooks(Request $request, $project_id = null)
 {
     $project = $request->json();
     if ($project_id == null) {
         $id = $project->get('project_id');
     } else {
         $id = $project_id;
     }
     // hook url
     $url = $project->get('url');
     $gitUrl = sprintf('projects/%d/hooks', $id);
     $json['url'] = $url;
     $json['push_events'] = $project->get('push_events') ?: true;
     $json['issues_events'] = $project->get('issues_events') ?: false;
     $json['merge_requests_events'] = $project->get('merge_requests_events') ?: true;
     $json['tag_push_events'] = $project->get('tag_push_events') ?: false;
     //dump($json);
     $client = new HttpClient();
     $method = 'POST';
     $hookId = null;
     if ($this->hookHasUrl($id, $project->get('url'), $hookId) == true) {
         Log::info("project '{$id}' hook('{$url}') is already exist..");
         $method = 'PUT';
         $gitUrl .= '/' . $hookId;
     }
     $response = $client->send($gitUrl, $json, $method);
     return json_encode($response, JSON_PRETTY_PRINT);
 }