X-Git-Url: https://scm.fusionforge.org/anonscm/gitweb?p=fusionforge%2Ffusionforge.git;a=blobdiff_plain;f=src%2Fcommon%2Finclude%2FGroup.class.php;h=faa0aa37d6ee76cdec7de62e7af33f455fbb8418;hp=c3231a80ba42fd0445807c918d5bbc71c4c7c23c;hb=8a7b8ced1c678d1404b7b795e40e382ddda43dc7;hpb=36c4a82a9727367a4d59dd007b0ff986501b6f03 diff --git a/src/common/include/Group.class.php b/src/common/include/Group.class.php index c3231a80ba..faa0aa37d6 100644 --- a/src/common/include/Group.class.php +++ b/src/common/include/Group.class.php @@ -5,7 +5,7 @@ * Copyright 1999-2001, VA Linux Systems, Inc. * Copyright 2009-2010, Roland Mas * Copyright 2010-2011, Franck Villaume - Capgemini - * Copyright 2010-2011, Alain Peyrat - Alcatel-Lucent + * Copyright 2010-2012, Alain Peyrat - Alcatel-Lucent * Copyright 2012-2013, Franck Villaume - TrivialDev * http://fusionforge.org * @@ -56,9 +56,9 @@ $GROUP_OBJ=array(); * IMPORTANT! That db result must contain all fields * from groups table or you will have problems * - * @param int Required - * @param int Result set handle ("SELECT * FROM groups WHERE group_id=xx") - * @return object a group object or false on failure + * @param int $group_id Required + * @param int|bool $res Result set handle ("SELECT * FROM groups WHERE group_id=xx") + * @return Group|bool A group object or false on failure */ function &group_get_object($group_id, $res = false) { //create a common set of group objects @@ -150,6 +150,32 @@ function &group_get_object_by_publicname($groupname) { return group_get_object(db_result($res, 0, 'group_id'), $res); } +/** + * get_public_active_projects_asc() - Get a list of rows for public active projects (initially in trove/full_list) + * + * @param int Opional Maximum number of rows to limit query length + */ +function get_public_active_projects_asc($max_query_limit = -1) { + + $res_grp = db_query_params (' + SELECT group_id, group_name, unix_group_name, short_description, register_time + FROM groups + WHERE status = $1 AND type_id=1 AND group_id>4 AND register_time > 0 + ORDER BY group_name ASC + ', + array ('A'), + $max_query_limit); + $projects = array(); + while ($row_grp = db_fetch_array($res_grp)) { + if (!forge_check_perm ('project_read', $row_grp['group_id'])) { + continue ; + } + $projects[] = $row_grp; + } + return $projects; +} + + class Group extends Error { /** * Associative array of data from db. @@ -197,11 +223,11 @@ class Group extends Error { /** * Group - Group object constructor - use group_get_object() to instantiate. * - * @param int Required - group_id of the group you want to instantiate. - * @param int Database result from select query OR associative array of all columns. - * @return boolean success or not + * @param int|bool $id Required - Id of the group you want to instantiate. + * @param int|bool $res Database result from select query OR associative array of all columns. + * @return boolean Success or not */ - function Group($id = false, $res = false) { + function __construct($id = false, $res = false) { $this->Error(); if (!$id) { //setting up an empty object @@ -236,8 +262,8 @@ class Group extends Error { /** * fetchData - May need to refresh database fields if an update occurred. * - * @param int The group_id. - * @return boolean success or not + * @param int $group_id The group_id. + * @return boolean success or not */ function fetchData($group_id) { $res = db_query_params ('SELECT * FROM groups WHERE group_id=$1', @@ -273,25 +299,25 @@ class Group extends Error { if ($this->getID()!=0) { $this->setError(_('Group::create: Group object already exists')); return false; - } else if (!$this->validateGroupName($group_name)) { + } elseif (!$this->validateGroupName($group_name)) { return false; - } else if (!account_groupnamevalid($unix_name)) { + } elseif (!account_groupnamevalid($unix_name)) { $this->setError(_('Invalid Unix name')); return false; - } else if (!$SYS->sysUseUnixName($unix_name)) { + } elseif (!$SYS->sysUseUnixName($unix_name)) { $this->setError(_('Unix name already taken')); return false; - } else if (db_numrows(db_query_params('SELECT group_id FROM groups WHERE unix_group_name=$1', + } elseif (db_numrows(db_query_params('SELECT group_id FROM groups WHERE unix_group_name=$1', array($unix_name))) > 0) { $this->setError(_('Unix name already taken')); return false; - } else if (strlen($purpose)<10) { + } elseif (strlen($purpose)<10) { $this->setError(_('Please describe your Registration Purpose in a more comprehensive manner')); return false; - } else if (strlen($purpose)>1500) { + } elseif (strlen($purpose)>1500) { $this->setError(_('The Registration Purpose text is too long. Please make it smaller than 1500 bytes.')); return false; - } else if (strlen($description)<10) { + } elseif (strlen($description)<10) { $this->setError(_('Describe in a more comprehensive manner your project.')); return false; } else { @@ -317,22 +343,20 @@ class Group extends Error { scm_box, register_purpose, register_time, - enable_anonscm, rand_hash, built_from_template ) - VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13)', + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12)', array (htmlspecialchars ($group_name), $unix_name, htmlspecialchars($description), - $unix_name.".".forge_get_config('web_host'), + $homepage, $homepage, 'P', $unix_box, $scm_box, htmlspecialchars($purpose), time(), - 0, md5(util_randbytes()), $built_from_template)); if (!$res || db_affected_rows($res) < 1) { @@ -453,7 +477,7 @@ class Group extends Error { function update(&$user, $group_name, $homepage, $short_description, $use_mail, $use_survey, $use_forum, $use_pm, $use_pm_depend_box, $use_scm, $use_news, $use_docman, $new_doc_address, $send_all_docs, $logo_image_id, - $use_ftp, $use_tracker, $use_frs, $use_stats, $tags, $is_public) { + $use_ftp, $use_tracker, $use_frs, $use_stats, $tags, $use_activity, $is_public) { $perm =& $this->getPermission(); @@ -483,7 +507,7 @@ class Group extends Error { } // in the database, these all default to '1', - // so we have to explicity set 0 + // so we have to explicitly set 0 if (!$use_mail) { $use_mail = 0; } @@ -520,6 +544,9 @@ class Group extends Error { if (!$use_stats) { $use_stats = 0; } + if (!$use_activity) { + $use_activity = 0; + } if (!$send_all_docs) { $send_all_docs = 0; } @@ -529,8 +556,8 @@ class Group extends Error { $homepage = util_make_url('/projects/' . $this->getUnixName() . '/'); } - if (strlen(htmlspecialchars($short_description))>255) { - $this->setError(_('Error updating project information: Maximum length for Project Description is 255 chars.')); + if (strlen(htmlspecialchars($short_description))<10) { + $this->setError(_('Describe in a more comprehensive manner your project.')); return false; } @@ -553,8 +580,9 @@ class Group extends Error { use_ftp=$13, use_tracker=$14, use_frs=$15, - use_stats=$16 - WHERE group_id=$17', + use_stats=$16, + use_activity=$17 + WHERE group_id=$18', array(htmlspecialchars($group_name), $homepage, htmlspecialchars($short_description), @@ -571,9 +599,10 @@ class Group extends Error { $use_tracker, $use_frs, $use_stats, + $use_activity, $this->getID())); - if (!$res) { + if (!$res || db_affected_rows($res) < 1) { $this->setError(sprintf(_('Error updating project information: %s'), db_error())); db_rollback(); return false; @@ -686,8 +715,8 @@ class Group extends Error { // Check that status transition is valid if ($this->getStatus() != $status - && !array_key_exists($this->getStatus(). $status,$allowed_status_changes)) { - $this->setError(_('Invalid Status Change')); + && !array_key_exists($this->getStatus(). $status, $allowed_status_changes)) { + $this->setError(_('Invalid Status Change From: ').$this->getStatus(). _(' To: '.$status)); return false; } @@ -719,7 +748,7 @@ class Group extends Error { /* Otherwise, the group is not active, and make sure that System group is not active either */ - } else if ($SYS->sysCheckGroup($this->getID())) { + } elseif ($SYS->sysCheckGroup($this->getID())) { if (!$SYS->sysRemoveGroup($this->getID())) { $this->setError($SYS->getErrorMessage()); db_rollback(); @@ -1091,6 +1120,19 @@ class Group extends Error { } } + /** + * usesActivity - whether or not this group has opted to display Project Activities. + * + * @return boolean uses_activities. + */ + function usesActivity() { + if (forge_get_config('use_activity')) { + return $this->data_array['use_activity']; + } else { + return false; + } + } + /** * usesForum - whether or not this group has opted to use discussion forums. * @@ -1366,7 +1408,7 @@ class Group extends Error { /** * usesPlugin - returns true if the group uses a particular plugin * - * @param string name of the plugin + * @param string $pluginname name of the plugin * @return boolean whether plugin is being used or not */ function usesPlugin($pluginname) { @@ -1565,9 +1607,6 @@ class Group extends Error { return false; } } - // Failsafe until user_group table is gone - $res = db_query_params('DELETE FROM user_group WHERE group_id=$1', - array($this->getID())); // unlink roles from this project foreach ($this->getRoles() as $r) { @@ -1752,15 +1791,17 @@ class Group extends Error { // 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; + $sq_arr = $sqf->getSurveyQuestions(); + if (is_array($sq_arr)) { + 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; + } } } } @@ -2275,7 +2316,7 @@ class Group extends Error { $oldatf = new ArtifactTypeFactory($template); foreach ($oldatf->getArtifactTypes() as $o) { $t = new ArtifactType ($this) ; - $t->create ($this->replaceTemplateStrings($o->getName()),$this->replaceTemplateStrings($o->getDescription()),$o->isPublic(),$o->allowsAnon(),$o->emailAll(),$o->getEmailAddress(),$o->getDuePeriod()/86400,0,$o->getSubmitInstructions(),$o->getBrowseInstructions()) ; + $t->create ($this->replaceTemplateStrings($o->getName()),$this->replaceTemplateStrings($o->getDescription()),$o->emailAll(),$o->getEmailAddress(),$o->getDuePeriod()/86400,0,$o->getSubmitInstructions(),$o->getBrowseInstructions()) ; $id_mappings['tracker'][$o->getID()] = $t->getID(); $t->cloneFieldsFrom ($o->getID()); } @@ -2288,7 +2329,7 @@ class Group extends Error { $oldpgf = new ProjectGroupFactory($template); foreach ($oldpgf->getProjectGroups() as $o) { $pg = new ProjectGroup($this); - $pg->create($this->replaceTemplateStrings($o->getName()),$this->replaceTemplateStrings($o->getDescription()),$o->isPublic(),$o->getSendAllPostsTo()); + $pg->create($this->replaceTemplateStrings($o->getName()),$this->replaceTemplateStrings($o->getDescription()),$o->getSendAllPostsTo()); $id_mappings['pm'][$o->getID()] = $pg->getID(); } } @@ -2300,7 +2341,7 @@ class Group extends Error { $oldff = new ForumFactory($template) ; foreach ($oldff->getForums() as $o) { $f = new Forum($this); - $f->create($this->replaceTemplateStrings($o->getName()),$this->replaceTemplateStrings($o->getDescription()),0,$o->getSendAllPostsTo(),1,0,0); + $f->create($this->replaceTemplateStrings($o->getName()),$this->replaceTemplateStrings($o->getDescription()),$o->getSendAllPostsTo(),1); $id_mappings['forum'][$o->getID()] = $f->getID(); } } @@ -2651,10 +2692,10 @@ The %1$s admin team will now examine your project submission. You will be notif if (strlen($group_name)<3) { $this->setError(_('Group name is too short')); return false; - } else if (strlen(htmlspecialchars($group_name))>50) { + } elseif (strlen(htmlspecialchars($group_name))>50) { $this->setError(_('Group name is too long')); return false; - } else if (group_get_object_by_publicname($group_name)) { + } elseif (group_get_object_by_publicname($group_name)) { $this->setError(_('Group name already taken')); return false; } @@ -2864,13 +2905,6 @@ The %1$s admin team will now examine your project submission. You will be notif } } - function setStorageAPI($type) { - return true; - } - - function getStorageAPI() { - return 'DB'; - } } /** @@ -2992,5 +3026,3 @@ function sortProjectList (&$list, $criterion='name') { // mode: php // c-file-style: "bsd" // End: - -?>