3 * quota_managementPlugin Class
5 * Copyright 2005, Fabio Bertagnin
6 * Copyright 2011, Franck Villaume - Capgemini
7 * http://fusionforge.org
9 * This file is part of FusionForge.
11 * FusionForge is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
16 * FusionForge is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License along
22 * with this program; if not, write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 class quota_managementPlugin extends Plugin {
27 public $systask_types = array(
28 'QUOTAMANAGEMENT_SET_QUOTA' => 'quota_management-set_quota.php',
33 function __construct() {
34 parent::__construct();
35 $this->name = "quota_management";
36 $this->text = _("Quota Management"); // To show in the tabs, use...
38 _("This is a Quota Management plugin within FusionForge. Provide an easy way
39 to monitor disk and database usage per user, project.");
40 $this->_addHook('project_admin_plugins'); // to show up in the admin page fro group
41 $this->_addHook('site_admin_option_hook'); // to show in admin
42 $this->_addHook('groupadminmenu');
45 function CallHook($hookname, &$params) {
48 case "project_admin_plugins": {
49 // this displays the link in the project admin options page to it's quota_management administration
50 echo html_e('p', array(), util_make_link('/plugins/'.$this->name.'/?type=projectadmin&group_id='.$params['group_id'],
51 _('Quota Management Administration')));
55 case "groupadminmenu": {
56 $params['labels'][] = _ ('Quota');
57 $params['links'][] = '/plugins/quota_management/index.php?group_id='.$params['group'].'&type=projectadmin';
58 $params['attr_r'][] = array('title' => _('View the Quota Management Administration'));
66 function site_admin_option_hook() {
67 echo html_e('li', array(), $this->getAdminOptionLink());
70 function getAdminOptionLink() {
71 return util_make_link('/plugins/'.$this->name.'/index.php?type=globaladmin', _('Ressources usage and quota'));
74 function get_dir_size($dir) {
76 $cmd = "/usr/bin/du -bs $dir";
77 $res = shell_exec($cmd);
78 $a = explode("\t", $res);
79 if (isset($a[1])) $size = $a[0];
83 function setDirSize($group_id, $dirtype, $dirsize) {
86 $res = db_query_params('UPDATE plugin_quota_management SET home_usage = $1 WHERE group_id = $2', array($dirsize, $group_id));
89 $res = db_query_params('UPDATE plugin_quota_management SET ftp_usage = $1 WHERE group_id = $2', array($dirsize, $group_id));
94 function getDataArray($group_id) {
95 $res = db_query_params('SELECT * from plugin_quota_management WHERE group_id = $1', array($group_id));
96 $this->data_array = db_fetch_array($res);
99 function getFTPSize($group_id) {
100 if (!isset($this->data_array['ftp_usage'])) {
101 $this->getDataArray($group_id);
103 return $this->data_array['ftp_usage'];
106 function getHomeSize($group_id) {
107 if (!isset($this->data_array['home_usage'])) {
108 $this->getDataArray($group_id);
110 return $this->data_array['home_usage'];
113 function getQuota($group_id, $quota_type) {
114 if (!isset($this->data_array[$quota_type])) {
115 $this->getDataArray($group_id);
117 return $this->data_array[$quota_type];
120 function getHeader($type, $group_id = 0) {
122 case 'globaladmin': {
124 require_once $gfwww.'admin/admin_utils.php';
125 site_admin_header(array('title'=>_('Quota and Usage Admin')));
128 case 'projectadmin': {
130 require_once $gfwww.'project/admin/project_admin_utils.php';
131 project_admin_header(array('title' => sprintf(_('Quota Management for %s'), group_getname($group_id)), 'group' => $group_id));
137 function getDocumentsSizeQuery() {
138 return db_query_params('SELECT doc_data.group_id, SUM(doc_data_version.filesize) as size, SUM(octet_length(doc_data_version.data_words)) as size1
139 FROM doc_data, doc_data_version
140 WHERE doc_data.docid = doc_data_version.docid
141 GROUP BY doc_data.group_id
142 ORDER BY doc_data.group_id',
146 function getDocumentsSizeForProject($group_id) {
147 return db_query_params('SELECT SUM(doc_data_version.filesize) as size, SUM(octet_length(doc_data_version.data_words)) as size1, count(doc_data_version.serial_id) as nb
148 FROM doc_data, doc_data_version WHERE doc_data.docid = doc_data_version.docid AND doc_data.group_id = $1',
152 function getNewsSizeQuery() {
153 return db_query_params('SELECT group_id, SUM(octet_length(summary) + octet_length(details)) as size
160 function getNewsSizeForProject($group_id) {
161 return db_query_params('SELECT SUM(octet_length(summary) + octet_length(details)) as size, count(*) as nb
163 WHERE group_id = $1',
167 function getForumSizeQuery() {
168 return db_query_params('SELECT forum_group_list.group_id as group_id, SUM(octet_length(subject)+octet_length(body)) as size
169 FROM forum INNER JOIN forum_group_list ON forum.group_forum_id = forum_group_list.group_forum_id
175 function getForumSizeForProject($group_id) {
176 return db_query_params('SELECT SUM(octet_length(subject)+octet_length(body)) as size, count(*) as nb
177 FROM forum INNER JOIN forum_group_list ON forum.group_forum_id = forum_group_list.group_forum_id
178 WHERE group_id = $1',
182 function getTrackersSizeQuery() {
183 return db_query_params('SELECT artifact_group_list.group_id, SUM(octet_length(artifact.summary)+octet_length(artifact.details)+octet_length(artifact_message.body)+artifact_file.filesize) as size
184 FROM artifact, artifact_group_list, artifact_message, artifact_file
185 WHERE artifact.group_artifact_id = artifact_group_list.group_artifact_id
186 AND artifact.artifact_id = artifact_message.artifact_id
187 AND artifact.artifact_id = artifact_file.artifact_id
188 GROUP BY artifact_group_list.group_id
189 ORDER BY artifact_group_list.group_id',
193 function getTrackerSizeForProject($group_id) {
194 return db_query_params('SELECT SUM(octet_length(artifact.summary)+octet_length(artifact.details)+octet_length(artifact_message.body)+artifact_file.filesize) as size, count(artifact_group_list.group_artifact_id) as nb
195 FROM artifact, artifact_group_list, artifact_message, artifact_file
196 WHERE artifact.group_artifact_id = artifact_group_list.group_artifact_id
197 AND artifact.artifact_id = artifact_message.artifact_id
198 AND artifact.artifact_id = artifact_file.artifact_id
203 function getFRSSizeQuery() {
204 return db_query_params('SELECT frs_package.group_id, SUM(octet_length(frs_package.name)+octet_length(frs_release.name)+octet_length(frs_release.notes)+octet_length(frs_release.changes)+frs_file.file_size) as size
205 FROM frs_package, frs_release, frs_file
206 WHERE frs_package.package_id = frs_release.package_id
207 AND frs_release.release_id = frs_file.release_id
208 GROUP BY frs_package.group_id
209 ORDER BY frs_package.group_id',
213 function getFRSSizeForProject($group_id) {
214 return db_query_params('SELECT SUM(octet_length(frs_package.name)+octet_length(frs_release.name)+octet_length(frs_release.notes)+octet_length(frs_release.changes)+frs_file.file_size) as size, count(frs_package.package_id) as nb
215 FROM frs_package, frs_release, frs_file
216 WHERE frs_package.package_id = frs_release.package_id
217 AND frs_release.release_id = frs_file.release_id
222 function getPMSizeQuery() {
223 return db_query_params('SELECT project_group_list.group_id, SUM(octet_length(project_group_list.description)+octet_length(project_task.summary)+octet_length(project_task.details)+octet_length(project_messages.body)) as size
224 FROM project_group_list, project_task, project_messages
225 WHERE project_group_list.group_project_id = project_task.group_project_id
226 AND project_task.project_task_id = project_messages.project_task_id
227 GROUP BY project_group_list.group_id
228 ORDER BY project_group_list.group_id',
232 function getPMSizeForProject($group_id) {
233 return db_query_params('SELECT SUM(octet_length(project_group_list.description)+octet_length(project_task.summary)+octet_length(project_task.details)+octet_length(project_messages.body)) as size, count(project_group_list.group_project_id) as nb
234 FROM project_group_list, project_task, project_messages
235 WHERE project_group_list.group_project_id = project_task.group_project_id
236 AND project_task.project_task_id = project_messages.project_task_id
244 // c-file-style: "bsd"