1<?php
2/*=========================================================================
3
4  Program:   CDash - Cross-Platform Dashboard System
5  Module:    $Id$
6  Language:  PHP
7  Date:      $Date$
8  Version:   $Revision$
9
10  Copyright (c) 2002 Kitware, Inc.  All rights reserved.
11  See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
12
13     This software is distributed WITHOUT ANY WARRANTY; without even
14     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15     PURPOSE.  See the above copyright notices for more information.
16
17=========================================================================*/
18include("cdash/config.php");
19require_once("cdash/pdo.php");
20include_once("cdash/common.php");
21include('login.php');
22include('cdash/version.php');
23include_once("models/project.php");
24include_once("models/subproject.php");
25include_once("models/user.php");
26
27if ($session_OK)
28{
29@$db = pdo_connect("$CDASH_DB_HOST", "$CDASH_DB_LOGIN","$CDASH_DB_PASS");
30pdo_select_db("$CDASH_DB_NAME",$db);
31
32$userid = $_SESSION['cdash']['loginid'];
33// Checks
34if(!isset($userid) || !is_numeric($userid))
35  {
36  echo "Not a valid userid!";
37  return;
38  }
39
40$xml = begin_XML_for_XSLT();
41$xml .= "<backurl>user.php</backurl>";
42$xml .= "<title>CDash - Manage Subproject</title>";
43$xml .= "<menutitle>CDash</menutitle>";
44$xml .= "<menusubtitle>Subprojects</menusubtitle>";
45
46@$projectid = $_GET["projectid"];
47if ($projectid != NULL)
48  {
49    $projectid = pdo_real_escape_numeric($projectid);
50  }
51
52$Project = new Project;
53
54// If the projectid is not set and there is only one project we go directly to the page
55if(isset($edit) && !isset($projectid))
56  {
57  $projectids = $Project->GetIds();
58  if(count($projectids)==1)
59    {
60    $projectid = $projectids[0];
61    }
62  }
63if(!isset($projectid))
64  {
65  $projectid = -1;
66  }
67
68$User = new User;
69$User->Id = $userid;
70$Project->Id = $projectid;
71
72$role = $Project->GetUserRole($userid);
73
74if($User->IsAdmin()===FALSE && $role<=1)
75  {
76  echo "You don't have the permissions to access this page";
77  return;
78  }
79
80$sql = "SELECT id,name FROM project";
81if($User->IsAdmin() == false)
82  {
83  $sql .= " WHERE id IN (SELECT projectid AS id FROM user2project WHERE userid='$userid' AND role>0)";
84  }
85$projects = pdo_query($sql);
86while($project_array = pdo_fetch_array($projects))
87   {
88   $xml .= "<availableproject>";
89   $xml .= add_XML_value("id",$project_array['id']);
90   $xml .= add_XML_value("name",$project_array['name']);
91   if($project_array['id']==$projectid)
92      {
93      $xml .= add_XML_value("selected","1");
94      }
95   $xml .= "</availableproject>";
96   }
97
98$Subproject = new Subproject();
99$Subproject->SetProjectId($projectid);
100
101// If submit has been pressed
102@$addSubproject = $_POST["addSubproject"];
103if(isset($addSubproject))
104  {
105  $Subproject->Name = htmlspecialchars(pdo_real_escape_string($_POST["newsubproject"]));
106  $Subproject->Save();
107  }
108
109// If delete is requested
110if(isset($_GET["delete"]))
111  {
112  $Subproject->Id = pdo_real_escape_numeric($_GET["delete"]);
113  $Subproject->Delete();
114  }
115
116// If we should remove a dependency
117if(isset($_GET["removeDependency"]))
118  {
119  $Subproject->Id = pdo_real_escape_numeric($_GET["dependency"]);
120  $Subproject->RemoveDependency(pdo_real_escape_numeric($_GET["removeDependency"]));
121  }
122
123
124// If we should add a dependency
125if(isset($_POST["addDependency"]))
126  {
127  $Subproject->Id = pdo_real_escape_numeric($_POST["dependencyid"]);
128  $Subproject->AddDependency($_POST["dependency_selection_".$Subproject->Id]);
129  }
130
131/** We start generating the XML here */
132// List the available project
133if($projectid>=0)
134  {
135  $xml .= "<project>";
136  $xml .= add_XML_value("id",$Project->Id);
137  $xml .= add_XML_value("name_encoded",urlencode($Project->GetName()));
138
139  if($projectid>0)
140    {
141    $xml .= add_XML_value("name",$Project->GetName());
142
143    $subprojectids = $Project->GetSubProjects();
144    foreach($subprojectids as $subprojectid)
145      {
146      $SubProject1 = new SubProject();
147      $SubProject1->Id = $subprojectid;
148      $xml .= "<subproject>";
149      $xml .= add_XML_value("id",$subprojectid);
150      $xml .= add_XML_value("name",$SubProject1->GetName());
151
152      $dependencies = $SubProject1->GetDependencies();
153
154      foreach($dependencies as $dependency)
155        {
156        $Dependency = new SubProject();
157        $Dependency->Id = $dependency;
158        $xml .= "<dependency>";
159        $xml .= add_XML_value("id",$dependency);
160        $xml .= add_XML_value("name",$Dependency->GetName());
161        $xml .= "</dependency>";
162        }
163
164      foreach($subprojectids as $dependency)
165        {
166        if($dependency == $subprojectid
167           || in_array($dependency,$dependencies)
168           )
169           {
170           continue;
171           }
172        $Dependency = new SubProject();
173        $Dependency->Id = $dependency;
174        $xml .= "<availabledependency>";
175        $xml .= add_XML_value("id",$dependency);
176        $xml .= add_XML_value("name",$Dependency->GetName());
177        $xml .= "</availabledependency>";
178        }
179      $xml .= "</subproject>";
180      }
181    } // end projectid > 0
182  $xml .= add_XML_value("id",$Project->Id);
183  $xml .= "</project>";
184  }
185
186$xml .= "</cdash>";
187
188// Now doing the xslt transition
189generate_XSLT($xml,"manageSubproject");
190
191} // end session OK
192?>
193
194