* Copyright 2009-2010, Roland Mas
* Copyright 2010-2011, Franck Villaume - Capgemini
* Copyright 2010-2011, Alain Peyrat - Alcatel-Lucent
- * Copyright 2012, Franck Villaume - TrivialDev
+ * Copyright 2012-2013, Franck Villaume - TrivialDev
* http://fusionforge.org
*
* This file is part of FusionForge. FusionForge is free software;
function setStatus(&$user, $status) {
global $SYS;
- if (!forge_check_global_perm('approve_projects')) {
+ if (!forge_check_global_perm_for_user($user, 'approve_projects')) {
$this->setPermissionDeniedError();
return false;
}
// Check that status transition is valid
if ($this->getStatus() != $status
- && !in_array($this->getStatus(). $status,$allowed_status_changes)) {
+ && !array_key_exists($this->getStatus(). $status,$allowed_status_changes)) {
$this->setError(_('Invalid Status Change'));
return false;
}
* @return string homepage URL.
*/
function getHomePage() {
+ if (!preg_match("/^[a-zA-Z][a-zA-Z0-9+.-]*:/",
+ $this->data_array['homepage'])) {
+ $this->data_array['homepage'] = util_url_prefix() .
+ $this->data_array['homepage'];
+ }
return $this->data_array['homepage'];
}
array($this->getID()));
// unlink roles from this project
- $ra = RoleAnonymous::getInstance();
- $rl = RoleLoggedIn::getInstance();
- $ra->unlinkProject($this);
- $rl->unlinkProject($this);
- // @todo : unlink all the other roles created in the project...
+ foreach ($this->getRoles() as $r) {
+ if ($r->getHomeProject() == NULL
+ || $r->getHomeProject()->getID() != $this->getID()) {
+ $r->unlinkProject($this);
+ }
+ }
//
// Delete Trackers
//
- $atf = new ArtifactTypeFactory($this);
- $at_arr = $atf->getArtifactTypes();
- foreach ($at_arr as $i) {
- if (!is_object($i)) {
- continue;
- }
- if (!$i->delete(1,1)) {
- $this->setError(_('Could not properly delete the tracker:').' '.$i->getErrorMessage());
- return false;
+ if ($this->usesTracker()) {
+ $atf = new ArtifactTypeFactory($this);
+ $at_arr = $atf->getArtifactTypes();
+ foreach ($at_arr as $i) {
+ if (!is_object($i)) {
+ continue;
+ }
+ if (!$i->delete(1,1)) {
+ $this->setError(_('Could not properly delete the tracker:').' '.$i->getErrorMessage());
+ return false;
+ }
}
}
//
// Delete Forums
//
- $ff = new ForumFactory($this);
- $f_arr = $ff->getForums();
- foreach ($f_arr as $i) {
- if (!is_object($i)) {
- continue;
- }
- if(!$i->delete(1,1)) {
- $this->setError(_('Could not properly delete the forum:').' '.$i->getErrorMessage());
- return false;
+
+ if ($this->usesForum()) {
+ $ff = new ForumFactory($this);
+ $f_arr = $ff->getForums();
+ foreach ($f_arr as $i) {
+ if (!is_object($i)) {
+ continue;
+ }
+ if(!$i->delete(1,1)) {
+ $this->setError(_('Could not properly delete the forum:').' '.$i->getErrorMessage());
+ return false;
+ }
}
}
//
// Delete Subprojects
//
- $pgf = new ProjectGroupFactory($this);
- $pg_arr = $pgf->getProjectGroups();
- foreach ($pg_arr as $i) {
- if (!is_object($i)) {
- continue;
- }
- if (!$i->delete(1,1)) {
- $this->setError(_('Could not properly delete the ProjectGroup:').' '.$i->getErrorMessage());
- return false;
+ if ($this->usesPM()) {
+ $pgf = new ProjectGroupFactory($this);
+ $pg_arr = $pgf->getProjectGroups();
+ foreach ($pg_arr as $i) {
+ if (!is_object($i)) {
+ continue;
+ }
+ if (!$i->delete(1,1)) {
+ $this->setError(_('Could not properly delete the ProjectGroup:').' '.$i->getErrorMessage());
+ return false;
+ }
}
}
//
//
// Delete Surveys
//
- $sf = new SurveyFactory($this);
- $s_arr =& $sf->getSurveys();
- foreach ($s_arr as $i) {
- if (!is_object($i)) {
- continue;
- }
- if (!$i->delete()) {
- $this->setError(_('Could not properly delete the survey'));
- db_rollback();
- return false;
+ if ($this->usesSurvey()) {
+ $sf = new SurveyFactory($this);
+ $s_arr =& $sf->getSurveys();
+ foreach ($s_arr as $i) {
+ if (!is_object($i)) {
+ continue;
+ }
+ if (!$i->delete()) {
+ $this->setError(_('Could not properly delete the survey'));
+ db_rollback();
+ return false;
+ }
}
- }
//
// Delete SurveyQuestions
//
- $sqf = new SurveyQuestionFactory($this);
- $sq_arr =& $sqf->getSurveyQuestions();
- foreach ($sq_arr as $i) {
- if (!is_object($i)) {
- continue;
- }
- if (!$i->delete()) {
- $this->setError(_('Could not properly delete the survey questions'));
- db_rollback();
- return false;
+ $sqf = new SurveyQuestionFactory($this);
+ $sq_arr =& $sqf->getSurveyQuestions();
+ foreach ($sq_arr as $i) {
+ if (!is_object($i)) {
+ continue;
+ }
+ if (!$i->delete()) {
+ $this->setError(_('Could not properly delete the survey questions'));
+ db_rollback();
+ return false;
+ }
}
}
//
// Delete Mailing List Factory
//
- $mlf = new MailingListFactory($this);
- $ml_arr = $mlf->getMailingLists();
- foreach ($ml_arr as $i) {
- if (!is_object($i)) {
- continue;
- }
- if (!$i->delete(1,1)) {
- $this->setError(_('Could not properly delete the mailing list'));
- db_rollback();
- return false;
+ if ($this->usesMail()) {
+ $mlf = new MailingListFactory($this);
+ $ml_arr = $mlf->getMailingLists();
+ foreach ($ml_arr as $i) {
+ if (!is_object($i)) {
+ continue;
+ }
+ if (!$i->delete(1,1)) {
+ $this->setError(_('Could not properly delete the mailing list'));
+ db_rollback();
+ return false;
+ }
}
}
//
}
}
- // Disabled to keep user choice from registration page.
-// $this->setUseSCM ($template->usesSCM()) ;
+ if (0) {
+ /* use SCM plugin from template group */
+ $this->setUseSCM($template->usesSCM());
- foreach ($template->getPlugins() as $plugin_id => $plugin_name) {
- if (preg_match('/^scm/', $plugin_name) && ($plugin_name != 'scmhook')) {
+ foreach ($template->getPlugins() as
+ $plugin_id => $plugin_name) {
+ $this->setPluginUse($plugin_name);
+ }
+ } else {
+ /* use SCM choice from registration page */
+
+ foreach ($template->getPlugins() as
+ $plugin_id => $plugin_name) {
+ if (substr($plugin_name, 3) == 'scm' &&
+ $plugin_name != 'scmhook') {
+ /* skip copying scm plugins */
+ continue;
+ }
+ /* enable other plugins though */
$this->setPluginUse($plugin_name);
}
}
}
$this->normalizeAllRoles();
+ // empty members cache because the group creator is not yet in cache.
+ unset($this->membersArr);
$this->activateUsers();
+ // Delete fake join request
+ foreach (get_group_join_requests ($this) as $gjr) {
+ $gjr->delete(true) ;
+ }
+
// Switch back to user preference
session_set_internal($saved_session->getID());
setup_gettext_from_context();