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>
15 * This script takes some POST variables.It makes a check and it
16 * store in DB the commit info attached to the tracker or task.
19 require_once('squal_pre.php');
20 require_once('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('\"','"',$_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'];
44 if($cvs_tracker_debug) {
45 echo "Variables received by newcommit.php:\n";
46 print_r($Configs[$i]);
52 * Checks if the commit it's possible and parse arguments
53 * Checks if repository, group and user_name are right.
54 * It extract group from cvsroot, and check if the plugin
55 * is availabe. It checks if the user exists.
57 * @param array $Config Config
59 * @return array Returns 'check'=true if check passed, group, group_id
61 function parseConfig($Config)
63 global $sys_cvsroot_path, $cvs_tracker_debug;
66 $Result['check'] = true;
67 $Repository = $Config['Repository'];
68 $UserName = $Config['UserName'];
70 // add a trailing / if needed
71 if($sys_cvsroot_path[strlen($sys_cvsroot_path)-1]!='/') {
72 $sys_cvsroot_path.='/';
74 if(strncmp($Repository,$sys_cvsroot_path, strlen($sys_cvsroot_path)) == 0) {
75 $GroupName = substr($Repository, strlen($sys_cvsroot_path));
77 $GroupName = $Repository;
79 if($cvs_tracker_debug) {
80 echo "GroupName = ".$GroupName."\n";
81 echo "CVSRootPath = ".$sys_cvsroot_path."\n";
85 $Result['user'] = user_get_object_by_name($UserName);
86 if (!$Result['user'] || !is_object($Result['user']) ||
87 $Result['user']->isError() || !$Result['user']->isActive()) {
88 $Result['check'] = false;
89 $Result['error'] = 'Invalid User';
92 session_set_new($Result['user']->getID());
94 $Result['group'] = group_get_object_by_name($GroupName);
95 if (!$Result['group'] || !is_object($Result['group']) ||
96 $Result['group']->isError() || !$Result['group']->isActive()) {
97 $Result['check'] = false;
98 $Result['error'] = 'Group Not Found';
100 $Result['group_id'] = $Result['group']->getID();
101 if (!$Result['group']->usesPlugin('cvstracker')) {
102 $Result['check'] = false;
103 $Result['error'] = 'Plugin not enabled for this Group';
111 * Add a entry in the DataBase for a Artifact associated to a commit
113 * @param array $Config Config
114 * @param string $GroupId The GroupId to insert it into
115 * @param string $Num The artifact_id
117 * @return array Returns 'check'=true if check passed, group, group_id
119 function addArtifactLog($Config, $GroupId, $Num)
122 $Query = "SELECT * from artifact,artifact_group_list WHERE ".
123 "artifact.group_artifact_id=artifact_group_list.group_artifact_id ".
124 "AND artifact_group_list.group_id=".
125 "'".$GroupId."' AND artifact.artifact_id='".$Num."'";
126 $Result = db_query($Query);
127 $Rows = db_numrows($Result);
129 $return['Error'] .= "Artifact ".$Num." Not Found.";
134 $Query = "INSERT INTO plugin_cvstracker_data_artifact ".
135 "(kind, group_artifact_id) VALUES ".
137 $DBRes = db_query($Query);
138 $HolderID= db_insertid($DBRes,'plugin_cvstracker_data_artifact','id');
139 if (!$DBRes || !$HolderID) {
140 $return['Error']='Problems with Artifact $Num: '.db_error($DBRes);
143 $Query = "INSERT INTO plugin_cvstracker_data_master ".
144 "(holder_id, cvs_date, log_text, file, prev_version, ".
145 "actual_version, author)".
146 " VALUES ('".$HolderID."','".$Config['CvsDate']."','".$Config['Log'].
147 "','".$Config['FileName']."','".
148 $Config['PrevVersion']."','".
149 $Config['ActualVersion']."','".$Config['UserName']."')";
150 $DBRes = db_query($Query);
160 $return['Error'] .= "Unknown problem adding Tracker:$Num.";
166 * Add a entry in the DataBase for a Tracker associated to a commit
168 * @param array $Config Config
169 * @param string $GroupId The GroupId to insert it into
170 * @param string $Num The tracker_id
172 * @return array Returns 'check'=true if check passed, group, group_id
174 function addTaskLog($Config, $GroupId, $Num)
177 $Query = "SELECT * from project_task,project_group_list WHERE ".
178 "project_task.group_project_id=".
179 "project_group_list.group_project_id ".
180 "AND project_task.project_task_id='".$Num."' AND ".
181 " project_group_list.group_id='".$GroupId."'";
182 $Result = db_query($Query);
183 $Rows = db_numrows($Result);
185 $return['Error'] .= "Task:$Num Not Found.";
189 $Query = "INSERT INTO plugin_cvstracker_data_artifact ".
190 "(kind, project_task_id) VALUES ".
192 $DBRes = db_query($Query);
193 $HolderID= db_insertid($DBRes,'plugin_cvstracker_data_artifact','id');
194 if (!$DBRes || !$HolderID) {
195 $return['Error']='Problems with Task $Num: '.db_error($DBRes);
198 $Query = "INSERT INTO plugin_cvstracker_data_master ".
199 "(holder_id, cvs_date, log_text, file, prev_version, ".
200 "actual_version, author)".
201 " VALUES ('".$HolderID."','".$Config['CvsDate']."','".$Config['Log'].
202 "','".$Config['FileName'].
203 "','".$Config['PrevVersion']."','".
204 $Config['ActualVersion']."','".$Config['UserName']."')";
205 $DBRes = db_query($Query);
214 $return['Error'] .= "Unknown problem adding Task:$Num.";
219 foreach ($Configs as $Config) {
220 $Result = parseConfig($Config);
221 if ($Result['check'] == false) {
222 exit_error('Check_error', $Result['error']);
225 if (!is_null($Config['ArtifactNumbers'])) {
226 foreach ($Config['ArtifactNumbers'] as $Num)
228 $AddResult = addArtifactLog($Config, $Result['group_id'], $Num);
229 if (isset($AddResult['Error'])) {
230 exit_error('Adding ArtifactNumber',$AddResult['Error']);
235 if (!is_null($Config['TaskNumbers'])) {
236 foreach ($Config['TaskNumbers'] as $Num)
238 $AddResult = addTaskLog($Config, $Result['group_id'], $Num);
239 if (isset($AddResult['Error'])) {
240 exit_error('Adding TaskNumber',$AddResult['Error']);
250 // c-file-style: "bsd"