/**
  * update_access_levels
  * Update access levels of repos
  *
  * @param type $repo_id
  * @param type $permissions
  *
  * @return boolean
  */
 function update_access_levels($repo_id = 0, $permissions = "")
 {
     $access_table_name = TABLE_PREFIX . 'rt_gitolite_access_master';
     if ($repo_id == 0 || $repo_id == "" || $permissions == "") {
         return false;
     }
     /* echo "update  ".$access_table_name." set permissions = '$permissions' where repo_id = ".DB::escape($repo_id);
     	  die(); */
     $update_access = DB::execute("update  " . $access_table_name . " set permissions = " . DB::escape($permissions) . " where repo_id = " . DB::escape($repo_id));
     ProjectGitolite::update_repo_conf_column(DB::escape($repo_id), $permissions);
     return true;
 }
 /**
  * Delete selected repository, if repository is gitolite repository or remote repository delete that too.
  */
 function delete_git()
 {
     if (($this->request->isAsyncCall() || $this->request->isApiCall()) && $this->request->isSubmitted()) {
         if ($this->active_repository->isLoaded()) {
             if ($this->active_repository->canDelete($this->logged_user)) {
                 try {
                     $repo_table_name = TABLE_PREFIX . "rt_gitolite_repomaster";
                     /* echo "DELETE from $repo_table_name where repo_fk = '".$this->active_repository->getId()."'";
                        die(); */
                     $this->active_repository->delete();
                     $repo_table_name = TABLE_PREFIX . "rt_gitolite_repomaster";
                     $repo_access_table_name = TABLE_PREFIX . "rt_gitolite_access_master";
                     $remote_repo_table_name = TABLE_PREFIX . "rt_remote_repos";
                     $repo_fk = $this->active_repository->getId();
                     $chk_gitolite = ProjectGitolite::is_gitolite_repo($repo_fk);
                     //print_r($chk_gitolite);
                     if (is_array($chk_gitolite) && sizeof($chk_gitolite) > 0 && $chk_gitolite['chk_gitolite'] > 0) {
                         DB::execute("DELETE repo_acc,repo_tb FROM {$repo_table_name} repo_tb\n                        JOIN {$repo_access_table_name} repo_acc ON repo_acc.repo_id = repo_tb.repo_id\n                        WHERE repo_tb.repo_fk = '" . $repo_fk . "'");
                         $repo_path = GIT_FILES_PATH . "/" . $chk_gitolite["repo_name"];
                         @ProjectGitolite::remove_directory($repo_path);
                     } else {
                         $remote_name_arr = DB::executeFirstRow("SELECT remote_repo_name,actual_repo_name from {$remote_repo_table_name} where repo_fk = '" . $repo_fk . "'");
                         if ($remote_name_arr) {
                             $remote_name = $remote_name_arr["actual_repo_name"];
                         }
                         DB::execute("DELETE from {$remote_repo_table_name} where repo_fk = '" . $repo_fk . "'");
                         $repo_path = GIT_FILES_PATH . "/" . $remote_name;
                         if ($remote_name != "") {
                             @ProjectGitolite::remove_directory($repo_path);
                         }
                     }
                     $this->response->respondWithData($this->active_repository, array('as' => 'repository'));
                 } catch (Exception $e) {
                     $this->response->exception($e);
                 }
                 // if
             } else {
                 $this->response->forbidden();
             }
             // if
         } else {
             $this->response->notFound();
         }
         // if
     } else {
         $this->response->badRequest();
     }
     // if
 }
 /**
  * Render conf file once mapping is done
  * @return string message
  */
 function render_after_clone_conf()
 {
     $res = ProjectGitolite::render_conf_file();
     $settings = GitoliteAdmin::get_admin_settings();
     $dir = $settings['gitoliteadminpath'] . "gitolite-admin";
     $command = "cd " . $dir . " && git add * && git commit -am 'render conf file' && git push  || echo 'Not found'";
     exec($command, $output, $return_var);
     //print_r($output);
     die("ok");
 }
 function add_ftp_connections()
 {
     /* $cus = new CustomFields();
               //$cus->initForType("Users",2);
               $flds = $cus->getCustomFieldsByType("Users");
     
               //$cus->initForType("Project",1);
               if(is_array($flds) && count($flds) > 0)
               {
               foreach ($flds as $key => $value) {
               $settings["$key"]["label"] = "Comments";
               $settings["$key"]["is_enabled"] = "1";
               $cus->setCustomFieldsByType("Users", $settings);
     
               }
               }
               print_r($flds);
               die(); */
     //$settings["label"];
     //$cus->setCustomFieldsByType("Project", $settings);
     $repo_branches = $this->active_repository;
     $eng = $repo_branches->getEngine($this->active_project->getId());
     //print_r($eng->getBranches);
     $branches_array = $eng->getBranches();
     $repo_branches_str = implode(",", $branches_array);
     $repo_id = array_var($_GET, 'project_source_repository_id');
     //project objects id
     $repo_obj = new ProjectSourceRepository($repo_id);
     $src_repo_id = $repo_obj->getIntegerField1();
     if ($this->request->isSubmitted()) {
         // check for form submission
         $post_data = $this->request->post();
         //print_r($post_data);
         try {
             $errors = new ValidationErrors();
             $ftpdetials = $post_data["ftpdetials"];
             $fld_cnt = count($ftpdetials["ftp_domain"]);
             //print_r($ftpdetials);
             //die();
             $array_urls = array();
             for ($i = 0; $i < $fld_cnt; $i++) {
                 if ($ftpdetials["ftp_domain"][$i] == "" || $ftpdetials["ftp_port"][$i] == "" || $ftpdetials["ftp_username"][$i] == "" || $ftpdetials["ftp_password"][$i] == "" || $ftpdetials["branches"][$i] == "" || $ftpdetials["ftp_dir"][$i] == "") {
                     $errors->addError("Please fill all connection parameters.");
                 } else {
                     $arra_conn[$i] = array("ftp_domain" => $ftpdetials["ftp_domain"][$i], "ftp_port" => $ftpdetials["ftp_port"][$i], "ftp_username" => $ftpdetials["ftp_username"][$i], "ftp_password" => $ftpdetials["ftp_password"][$i], "branches" => $ftpdetials["branches"][$i], "ftp_dir" => $ftpdetials["ftp_dir"][$i]);
                 }
                 /* if(!filter_var($value, FILTER_VALIDATE_URL) && $value != "")
                    {
                    $errors->addError("$value is not a valid URL.");
                    }
                    else
                    {
                    $array_urls[] = $value;
                    } */
             }
             if ($errors->hasErrors()) {
                 throw $errors;
             }
             DB::beginWork('Add FTP Details @ ' . __CLASS__);
             if (is_array($arra_conn) && count($arra_conn) > 0) {
                 $ftp_details_exists = ProjectGitolite::ftp_connections_exists($src_repo_id);
                 if (is_array($ftp_details_exists) && $ftp_details_exists["ftp_cnt"] > 0) {
                     $ftp_table_name = TABLE_PREFIX . "rt_ftp_connections";
                     DB::execute("DELETE FROM {$ftp_table_name} where repo_fk = '" . $src_repo_id . "'");
                 }
                 for ($i = 0; $i < $fld_cnt; $i++) {
                     $ftp_details_add = ProjectGitolite::add_ftp_details($arra_conn[$i], $src_repo_id, $this->logged_user->getId());
                     if (!$ftp_details_add) {
                         $errors->addError('Problem occured while saving data, please try again.');
                         throw $errors;
                     }
                 }
                 DB::commit('FTP details Added @ ' . __CLASS__);
                 $this->response->ok();
             } else {
                 $errors->addError("Error while saving FTP details.");
                 throw $errors;
             }
         } catch (Exception $e) {
             DB::rollback('Failed to add FTP details @ ' . __CLASS__);
             $this->response->exception($e);
         }
     }
     $ftp_details_exists = ProjectGitolite::get_connection_details($src_repo_id);
     $this->response->assign(array('repo_branches_str' => $repo_branches_str, 'branches_array' => $branches_array, 'ftp_test_url' => Router::assemble('test_ftp_conn', array('project_slug' => $this->active_project->getSlug(), 'project_source_repository_id' => $repo_id)), 'form_action' => Router::assemble('add_ftp_conn', array('project_slug' => $this->active_project->getSlug(), 'project_source_repository_id' => $repo_id)), "ftp_details_exists" => $ftp_details_exists));
 }
 /**
  * Remove a specific publick key
  * @return void
  */
 function remove_key()
 {
     $get_data = $this->request->get();
     if (isset($get_data['key_id'])) {
         $key_id = $get_data['key_id'];
         $filename = GitoliteAc::get_filename($key_id);
         if ($filename != "") {
             $delete_keys = GitoliteAc::remove_keys($key_id);
             if (!$delete_keys) {
                 throw new Exception("Can't delete key");
             } else {
                 $settings = GitoliteAdmin::get_admin_settings();
                 $dirpath = $settings['gitoliteadminpath'] . "gitolite-admin/keydir/";
                 $path = $dirpath . $filename . ".pub";
                 @unlink($path);
                 $active_user = $this->active_user;
                 ProjectGitolite::update_repo_conf_on_public_key($active_user->getId());
                 $command = "cd " . $dirpath . " && git add * && git commit -am 'deleted key {$filename}.pub' && git push  || echo 'Not found'";
                 exec($command, $output);
             }
         }
     }
     echo '<script type="text/javascript">window.location.href = "' . $this->active_user->getViewUrl() . '"</script>';
     die(0);
 }