6 * This script stand for receiving a HTTP Post from a hook in a
7 * CVS script. Arguments are passed and new entries in DB are
10 * Copyright Francisco Gimeno <kikov@kikov.org>
14 * This script takes some POST variables.It makes a check and it
15 * store in DB the commit info attached to the tracker or task.
18 require_once dirname(__FILE__)."/../../env.inc.php";
19 require_once $gfcommon.'include/pre.php';
20 require_once $gfconfig.'plugins/cvstracker/config.php';
23 * Getting POST variables
24 * UserName, Repository, Path, FileName, PrevVersion, ActualVersion, Log,
25 * ArtifactNumbers and TaskNumbers
28 $SubmittedVars = array();
29 $SubmittedVars = unserialize(str_replace('\\\\', '\\', str_replace('\"','"',$_POST['data'])));
32 foreach ($SubmittedVars as $SubmittedVar) {
33 $Configs[$i]['UserName'] = $SubmittedVar['UserName'];
34 //$Configs[$i]['UserName'] = "def_admin"; USE THIS FOR TESTING PURPOSES
35 $Configs[$i]['Repository'] = $SubmittedVar['Repository'];
36 $Configs[$i]['FileName'] = $SubmittedVar['FileName'];
37 $Configs[$i]['PrevVersion'] = $SubmittedVar['PrevVersion'];
38 $Configs[$i]['ActualVersion'] = $SubmittedVar['ActualVersion'];
39 $Configs[$i]['ArtifactNumbers'] = $SubmittedVar['ArtifactNumbers'];
40 $Configs[$i]['TaskNumbers'] = $SubmittedVar['TaskNumbers'];
41 $Configs[$i]['Log'] = $SubmittedVar['Log'];
42 $Configs[$i]['CvsDate'] = $SubmittedVar['CvsDate'];
48 * Checks if the commit it's possible and parse arguments
49 * Checks if repository, group and user_name are right.
50 * It extract group from cvsroot, and check if the plugin
51 * is availabe. It checks if the user exists.
53 * @param array $Config Config
55 * @return array Returns 'check'=true if check passed, group, group_id
57 function parseConfig($Config)
59 $repos_path = forge_get_config ('repos_path', 'scmcvs') ;
62 $Result['check'] = true;
63 $Repository = $Config['Repository'];
64 $UserName = $Config['UserName'];
66 // add a trailing / if needed
67 if($repos_path[strlen($repos_path)-1]!='/') {
70 if(strncmp($Repository,$repos_path, strlen($repos_path)) == 0) {
71 $GroupName = substr($Repository, strlen($repos_path));
73 $GroupName = $Repository;
76 $Result['user'] = user_get_object_by_name($UserName);
77 if (!$Result['user'] || !is_object($Result['user']) ||
78 $Result['user']->isError() || !$Result['user']->isActive()) {
79 $Result['check'] = false;
80 $Result['error'] = 'Invalid User';
83 session_set_new($Result['user']->getID());
85 $Result['group'] = group_get_object_by_name($GroupName);
86 if (!$Result['group'] || !is_object($Result['group']) ||
87 $Result['group']->isError() || !$Result['group']->isActive()) {
88 $Result['check'] = false;
89 $Result['error'] = 'Group Not Found';
91 $Result['group_id'] = $Result['group']->getID();
92 if (!$Result['group']->usesPlugin('cvstracker')) {
93 $Result['check'] = false;
94 $Result['error'] = 'Plugin not enabled for this Group';
102 * Add a entry in the DataBase for a Artifact associated to a commit
104 * @param array $Config Config
105 * @param string $GroupId The GroupId to insert it into
106 * @param string $Num The artifact_id
108 * @return array Returns 'check'=true if check passed, group, group_id
110 function addArtifactLog($Config, $GroupId, $Num)
113 $Result = db_query_params ('SELECT * from artifact,artifact_group_list WHERE artifact.group_artifact_id=artifact_group_list.group_artifact_id AND artifact_group_list.group_id=$1 AND artifact.artifact_id=$2',
116 $Rows = db_numrows($Result);
118 $return['Error'] .= "Artifact ".$Num." Not Found.";
123 $DBRes = db_query_params ('INSERT INTO plugin_cvstracker_data_artifact (kind, group_artifact_id) VALUES (0, $1)',
125 $HolderID= db_insertid($DBRes,'plugin_cvstracker_data_artifact','id');
126 if (!$DBRes || !$HolderID) {
127 $return['Error']='Problems with Artifact $Num: '.db_error($DBRes);
130 $DBRes = db_query_params ('INSERT INTO plugin_cvstracker_data_master (holder_id, cvs_date, log_text, file, prev_version, actual_version, author) VALUES ($1,$2,$3,$4,$5,$6,$7)',
135 $Config['PrevVersion'],
136 $Config['ActualVersion'],
137 $Config['UserName']));
147 $return['Error'] .= "Unknown problem adding Tracker:$Num.";
153 * Add a entry in the DataBase for a Tracker associated to a commit
155 * @param array $Config Config
156 * @param string $GroupId The GroupId to insert it into
157 * @param string $Num The tracker_id
159 * @return array Returns 'check'=true if check passed, group, group_id
161 function addTaskLog($Config, $GroupId, $Num)
164 $Result = db_query_params ('SELECT * from project_task,project_group_list WHERE project_task.group_project_id=project_group_list.group_project_id AND project_task.project_task_id=$1 AND project_group_list.group_id=$2',
167 $Rows = db_numrows($Result);
169 $return['Error'] .= "Task:$Num Not Found.";
173 $DBRes = db_query_params ('INSERT INTO plugin_cvstracker_data_artifact (kind, project_task_id) VALUES (1, $1)',
175 $HolderID= db_insertid($DBRes,'plugin_cvstracker_data_artifact','id');
176 if (!$DBRes || !$HolderID) {
177 $return['Error']='Problems with Task $Num: '.db_error($DBRes);
180 $DBRes = db_query_params ('INSERT INTO plugin_cvstracker_data_master (holder_id, cvs_date, log_text, file, prev_version, actual_version, author) VALUES ($1,$2,$3,$4,$5,$6,$7)',
185 $Config['PrevVersion'],
186 $Config['ActualVersion'],
187 $Config['UserName']));
196 $return['Error'] .= "Unknown problem adding Task:$Num.";
201 foreach ($Configs as $Config) {
202 $Result = parseConfig($Config);
203 if ($Result['check'] == false) {
204 exit_error('Check_error', $Result['error']);
207 if (!is_null($Config['ArtifactNumbers'])) {
208 foreach ($Config['ArtifactNumbers'] as $Num)
210 $AddResult = addArtifactLog($Config, $Result['group_id'], $Num);
211 if (isset($AddResult['Error'])) {
212 exit_error('Adding ArtifactNumber',$AddResult['Error']);
217 if (!is_null($Config['TaskNumbers'])) {
218 foreach ($Config['TaskNumbers'] as $Num)
220 $AddResult = addTaskLog($Config, $Result['group_id'], $Num);
221 if (isset($AddResult['Error'])) {
222 exit_error('Adding TaskNumber',$AddResult['Error']);
232 // c-file-style: "bsd"