3 * Project Admin page to manage quotas project
5 * Portions Copyright 1999-2001 (c) VA Linux Systems
6 * The rest Copyright 2002-2004 (c) GForge Team
9 * This file is part of GForge.
11 * GForge 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 * GForge 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
22 * along with GForge; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27 require_once $gfwww.'include/pre.php';
28 require_once $gfwww.'project/admin/project_admin_utils.php';
30 if (!forge_get_config('use_project_vhost')) {
34 session_require_perm ('project_admin', $group_id) ;
36 $group = &group_get_object($group_id);
38 if (!$group || !is_object($group)) {
39 exit_error('Error','Error creating group object');
40 } else if ($group->isError()) {
41 exit_error('ERROR',$group->getErrorMessage());
45 project_admin_header(array('title'=>_('Project quota manager'),'group'=>$group->getID(),'pagename'=>'project_admin_quotas','sectionvals'=>array(group_getname($group_id))));
48 <h4><?php echo _('Project quota manager'); ?></h4>
52 $res_db = db_query_params ('SELECT SUM(octet_length(data)) as size, SUM(octet_length(data_words)) as size1, count(*) as nb FROM doc_data WHERE group_id = $1 ',
55 $q["name"] = _('Documents');
56 $q["nb"] = 0; $q["size"] = 0;
58 $q1["name"] = _('Documents search engine');
60 if (db_numrows($res_db) > 0)
62 $e = db_fetch_array($res_db);
64 $q["size"] = $e["size"];
65 // $q1["nb"] = $e["nb"];
66 $q1["size"] = $e["size1"];
71 $res_db = db_query_params ('SELECT SUM(octet_length(summary) + octet_length(details)) as size, count(*) as nb FROM news_bytes WHERE group_id = $1 ',
74 $q["name"] = _('News');
75 $q["nb"] = 0; $q["size"] = 0;
76 if (db_numrows($res_db) > 0)
78 $e = db_fetch_array($res_db);
80 $q["size"] = $e["size"];
85 $res_db = db_query_params ('SELECT SUM(octet_length(subject)+octet_length(body)) as size, count(*) as nb FROM forum INNER JOIN forum_group_list ON forum.group_forum_id = forum_group_list.group_forum_id WHERE group_id = $1 ',
88 $q["name"] = _('Forums');
89 $q["nb"] = 0; $q["size"] = 0;
90 if (db_numrows($res_db) > 0)
92 $e = db_fetch_array($res_db);
94 $q["size"] = $e["size"];
98 $quotas_disk = array();
102 $_quota_block_size = 1024;
103 $_quota_block_size = trim(shell_exec("echo $BLOCK_SIZE")) + 0;
104 if ($_quota_block_size == 0) $_quota_block_size = 1024;
107 $res_db = db_query_params ('SELECT quota_soft, quota_hard FROM groups WHERE group_id = $1',
109 if (db_numrows($res_db) > 0)
111 $e = db_fetch_array($res_db);
112 $quota_hard = $e["quota_hard"];
113 $quota_soft = $e["quota_soft"];
114 $quota_hard = round(($_quota_block_size * $quota_hard) / (1024*1024), 0);
115 $quota_soft = round(($_quota_block_size * $quota_soft) / (1024*1024), 0);
118 $quota_tot_other = 0;
122 $upload_dir = forge_get_config('upload_dir') . $group->getUnixName();
123 $chroot_dir = forge_get_config('chroot');
124 $ftp_dir = forge_get_config('ftp_upload_dir')."/pub/".$group->getUnixName();
125 $group_dir = $chroot_dir.forge_get_config('groupdir_prefix') . "/" . $group->getUnixName();
126 $cvs_dir = $chroot_dir.$cvsdir_prefix . "/" . $group->getUnixName();
127 $svn_dir = $chroot_dir.$svndir_prefix . "/" . $group->getUnixName();
129 $q["name"] = _('Download project directory');
130 $q["path"] = "$upload_dir";
131 $q["quota_label"] = _('Without quota control');
132 $q["size"] = get_dir_size ("$upload_dir");
133 $quota_tot_other += $q["size"];
136 $q["name"] = _('Home project directory');
137 $q["path"] = "$group_dir"; $q["size"] = get_dir_size ("$group_dir");
138 $q["quota_label"] = _('With ftp and home quota control');
139 $quota_tot_1 += $q["size"];
142 $q["name"] = _('Ftp project directory');
143 $q["path"] = "$ftp_dir"; $q["size"] = get_dir_size ("$ftp_dir");
144 $q["quota_label"] = _('With ftp and home quota control');
145 $quota_tot_1 += $q["size"];
148 $q["name"] = _('CVS project directory');
149 $q["path"] = "$cvs_dir"; $q["size"] = get_dir_size ("$cvs_dir");
150 $q["quota_label"] = _('With cvs and svn quota control');
151 $quota_tot_scm += $q["size"];
154 $q["name"] = _('Subversion project directory');
155 $q["path"] = "$svn_dir"; $q["size"] = get_dir_size ("$svn_dir");
156 $q["quota_label"] = _('With cvs and svn quota control');
157 $quota_tot_scm += $q["size"];
160 //echo "chroot = $chroot_dir <br />";
161 //echo "ftp = $ftp_dir <br />";
162 // echo "group = $group_dir <br />";
163 // echo "svn = $svn_dir <br />";
164 // echo "cvs = $cvs_dir <br />";
170 // print_debug(print_r($quotas, true));
173 <table width="500px" cellpadding="2" cellspacing="0" border="0">
174 <tr style="font-weight:bold">
175 <td colspan="3" style="border-top:thick solid #808080" align="center"><?php echo _('Database'); ?></td>
177 <tr style="font-weight:bold">
178 <td style="border-top:thin solid #808080"><?php echo _('quota type'); ?></td>
179 <td style="border-top:thin solid #808080" align="right"><?php echo _('quantity'); ?></td>
180 <td style="border-top:thin solid #808080" align="right"><?php echo _('size'); ?></td>
184 foreach ($quotas as $q)
186 if ($q["size"] != "")
188 $sizetot += $q["size"];
191 <td style="border-top:thin solid #808080"><?php echo $q["name"]; ?></td>
192 <td style="border-top:thin solid #808080" align="right"><?php echo $q["nb"]; ?></td>
193 <td style="border-top:thin solid #808080" align="right"><?php echo add_numbers_separator(convert_bytes_to_mega($q["size"]))." "._('Mb'); ?></td>
199 <tr style="font-weight:bold">
200 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080">
201 <?php echo _('Total'); ?>
203 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080"> </td>
204 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080" align="right">
205 <?php echo add_numbers_separator(convert_bytes_to_mega($sizetot))." "._('Mb'); ?>
211 <table width="500px" cellpadding="2" cellspacing="0" border="0">
212 <tr style="font-weight:bold">
213 <td colspan="3" style="border-top:thick solid #808080" align="center">
214 <?php echo _('Disk space'); ?>
217 <tr style="font-weight:bold">
218 <td style="border-top:thin solid #808080">
219 <?php echo _('quota type'); ?>
221 <td style="border-top:thin solid #808080" align="right"> </td>
222 <td style="border-top:thin solid #808080" align="right">
223 <?php echo _('size'); ?>
228 foreach ($quotas_disk as $q)
230 if ($q["size"] != "")
232 $sizetot += $q["size"];
235 <td style="border-top:thin solid #808080"><?php echo $q["name"]; ?></td>
236 <td style="border-top:thin solid #808080" align="right">
237 <?php echo $q["quota_label"]; ?>
239 <td style="border-top:thin solid #808080" align="right">
240 <?php echo add_numbers_separator(convert_bytes_to_mega($q["size"]))." "._('Mb'); ?>
247 <tr style="font-weight:bold">
248 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><?php echo _('Total'); ?></td>
249 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080"> </td>
250 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080" align="right">
251 <?php echo add_numbers_separator(convert_bytes_to_mega($sizetot))." "._('Mb'); ?>
265 $qs = $quota_soft * 1024 * 1024;
266 if (($quota_tot_1+0) > ($qs+0) && ($qs+0) > 0)
269 $msg1 = _('Quota exceeded');
271 if (($quota_tot_scm+0) > ($qs+0) && ($qs+0) > 0)
274 $msg2 = _('Quota exceeded');
278 <table width="500px" cellpadding="2" cellspacing="0" border="0">
279 <tr style="font-weight:bold">
280 <td colspan="4" style="border-top:thick solid #808080" align="center"><?php echo _('Quota disk management'); ?></td>
282 <tr style="font-weight:bold">
283 <td style="border-top:thin solid #808080">
284 <?php echo _('Quota settings'); ?>
286 <td style="border-top:thin solid #808080;font-weight:bold" align="right">
289 <td style="border-top:thin solid #808080" align="right">
290 <?php echo _('Quota soft'); ?>
292 <td style="border-top:thin solid #808080" align="right">
293 <?php echo _('Quota hard'); ?>
296 <tr style="background:<?php echo $color1; ?>">
297 <td style="border-top:thin solid #808080">
298 <?php echo _('Home, Ftp'); ?>
300 <td style="border-top:thin solid #808080;font-weight:bold;color:red" align="right">
303 <td style="border-top:thin solid #808080" align="right">
305 if ($quota_soft == 0)
316 <td style="border-top:thin solid #808080" align="right">
318 if ($quota_hard == 0)
330 <tr style="background:<?php echo $color2; ?>">
331 <td style="border-top:thin solid #808080">
332 <?php echo _('Cvs, Svn'); ?>
334 <td style="border-top:thin solid #808080;font-weight:bold;color:red" align="right">
337 <td style="border-top:thin solid #808080" align="right">
339 if ($quota_soft == 0)
350 <td style="border-top:thin solid #808080" align="right">
352 if ($quota_hard == 0)
364 <tr style="font-weight:bold">
365 <td colspan="4" style="border-top:thick solid #808080" align="center"> </td>
370 <?php project_admin_footer(array()); ?>
373 function print_debug ($text)
375 echo "<pre>$text</pre>";
378 function convert_bytes_to_mega ($mega)
380 $b = round($mega / (1024*1024), 0);
384 function add_numbers_separator ($val, $sep=' ')
387 $size = strrev($size);
388 $size = wordwrap($size, 3, $sep, 1);
389 $size = strrev($size);
393 function get_dir_size ($dir)
396 $cmd = "/usr/bin/du -bs $dir";
397 $res = shell_exec ($cmd);
398 $a = explode("\t", $res);
399 if (isset($a[1])) $size = $a[0];