3 * Project Admin page to manage quotas project
\r
5 * Portions Copyright 1999-2001 (c) VA Linux Systems
\r
6 * The rest Copyright 2002-2004 (c) GForge Team
\r
9 * @version $Id: 08_IMPROVQUOTA_90_quota_management.dpatch,v 1.1 2006/01/11 17:02:45 fabio Exp $
\r
11 * This file is part of GForge.
\r
13 * GForge is free software; you can redistribute it and/or modify
\r
14 * it under the terms of the GNU General Public License as published by
\r
15 * the Free Software Foundation; either version 2 of the License, or
\r
16 * (at your option) any later version.
\r
18 * GForge is distributed in the hope that it will be useful,
\r
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
21 * GNU General Public License for more details.
\r
23 * You should have received a copy of the GNU General Public License
\r
24 * along with GForge; if not, write to the Free Software
\r
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
\r
29 require_once('pre.php');
\r
30 require_once('www/project/admin/project_admin_utils.php');
\r
32 if (!$sys_use_project_vhost) {
\r
36 session_require(array('group'=>$group_id,'admin_flags'=>'A'));
\r
38 $group = &group_get_object($group_id);
\r
40 if (!$group || !is_object($group)) {
\r
41 exit_error('Error','Error creating group object');
\r
42 } else if ($group->isError()) {
\r
43 exit_error('ERROR',$group->getErrorMessage());
\r
47 project_admin_header(array('title'=>_('Project quota manager'),'group'=>$group->getID(),'pagename'=>'project_admin_quotas','sectionvals'=>array(group_getname($group_id))));
\r
50 <h4><?php echo _('Project quota manager'); ?></h4>
\r
54 $SQL = "SELECT SUM(octet_length(data)) as size, SUM(octet_length(data_words)) as size1, count(*) as nb ";
\r
55 $SQL .= "FROM doc_data ";
\r
56 $SQL .= "WHERE group_id = '$group_id' ";
\r
57 $res_db = db_query($SQL);
\r
59 $q["name"] = _('Documents');
\r
60 $q["nb"] = 0; $q["size"] = 0;
\r
62 $q1["name"] = _('Documents search engine');
\r
64 if (db_numrows($res_db) > 0)
\r
66 $e = db_fetch_array($res_db);
\r
67 $q["nb"] = $e["nb"];
\r
68 $q["size"] = $e["size"];
\r
69 // $q1["nb"] = $e["nb"];
\r
70 $q1["size"] = $e["size1"];
\r
75 $SQL = "SELECT SUM(octet_length(summary) + octet_length(details)) as size, count(*) as nb FROM news_bytes WHERE group_id = '$group_id' ";
\r
76 $res_db = db_query($SQL);
\r
78 $q["name"] = _('News');
\r
79 $q["nb"] = 0; $q["size"] = 0;
\r
80 if (db_numrows($res_db) > 0)
\r
82 $e = db_fetch_array($res_db);
\r
83 $q["nb"] = $e["nb"];
\r
84 $q["size"] = $e["size"];
\r
89 $SQL = "SELECT SUM(octet_length(subject)+octet_length(body)) as size, count(*) as nb FROM forum INNER JOIN forum_group_list ";
\r
90 $SQL .= "ON forum.group_forum_id = forum_group_list.group_forum_id WHERE group_id = '$group_id' ";
\r
91 $res_db = db_query($SQL);
\r
93 $q["name"] = _('Forums');
\r
94 $q["nb"] = 0; $q["size"] = 0;
\r
95 if (db_numrows($res_db) > 0)
\r
97 $e = db_fetch_array($res_db);
\r
98 $q["nb"] = $e["nb"];
\r
99 $q["size"] = $e["size"];
\r
103 $quotas_disk = array();
\r
106 // disk_total_space
\r
107 $_quota_block_size = 1024;
\r
108 $_quota_block_size = trim(shell_exec("echo $BLOCK_SIZE")) + 0;
\r
109 if ($_quota_block_size == 0) $_quota_block_size = 1024;
\r
112 $SQL = "SELECT quota_soft, quota_hard FROM groups WHERE group_id = $group_id";
\r
113 $res_db = db_query($SQL);
\r
114 if (db_numrows($res_db) > 0)
\r
116 $e = db_fetch_array($res_db);
\r
117 $quota_hard = $e["quota_hard"];
\r
118 $quota_soft = $e["quota_soft"];
\r
119 $quota_hard = round(($_quota_block_size * $quota_hard) / (1024*1024), 0);
\r
120 $quota_soft = round(($_quota_block_size * $quota_soft) / (1024*1024), 0);
\r
123 $quota_tot_other = 0;
\r
125 $quota_tot_scm = 0;
\r
127 $upload_dir = $sys_upload_dir . $group->getUnixName();
\r
128 $chroot_dir = $sys_chroot;
\r
129 $ftp_dir = $sys_ftp_upload_dir."/pub/".$group->getUnixName();
\r
130 $group_dir = $chroot_dir.$groupdir_prefix . "/" . $group->getUnixName();
\r
131 $cvs_dir = $chroot_dir.$cvsdir_prefix . "/" . $group->getUnixName();
\r
132 $svn_dir = $chroot_dir.$svndir_prefix . "/" . $group->getUnixName();
\r
134 $q["name"] = _('Download project directory');
\r
135 $q["path"] = "$upload_dir";
\r
136 $q["quota_label"] = _('Without quota control');
\r
137 $q["size"] = get_dir_size ("$upload_dir");
\r
138 $quota_tot_other += $q["size"];
\r
139 $quotas_disk[] = $q;
\r
141 $q["name"] = _('Home project directory');
\r
142 $q["path"] = "$group_dir"; $q["size"] = get_dir_size ("$group_dir");
\r
143 $q["quota_label"] = _('With ftp and home quota control');
\r
144 $quota_tot_1 += $q["size"];
\r
145 $quotas_disk[] = $q;
\r
147 $q["name"] = _('Ftp project directory');
\r
148 $q["path"] = "$ftp_dir"; $q["size"] = get_dir_size ("$ftp_dir");
\r
149 $q["quota_label"] = _('With ftp and home quota control');
\r
150 $quota_tot_1 += $q["size"];
\r
151 $quotas_disk[] = $q;
\r
153 $q["name"] = _('CVS project directory');
\r
154 $q["path"] = "$cvs_dir"; $q["size"] = get_dir_size ("$cvs_dir");
\r
155 $q["quota_label"] = _('With cvs and svn quota control');
\r
156 $quota_tot_scm += $q["size"];
\r
157 $quotas_disk[] = $q;
\r
159 $q["name"] = _('Subversion project directory');
\r
160 $q["path"] = "$svn_dir"; $q["size"] = get_dir_size ("$svn_dir");
\r
161 $q["quota_label"] = _('With cvs and svn quota control');
\r
162 $quota_tot_scm += $q["size"];
\r
163 $quotas_disk[] = $q;
\r
165 //echo "chroot = $chroot_dir <br />";
\r
166 //echo "ftp = $ftp_dir <br />";
\r
167 // echo "group = $group_dir <br />";
\r
168 // echo "svn = $svn_dir <br />";
\r
169 // echo "cvs = $cvs_dir <br />";
\r
175 // print_debug(print_r($quotas, true));
\r
178 <table width="500px" cellpadding="2" cellspacing="0" border="0">
\r
179 <tr style="font-weight:bold">
\r
180 <td colspan="3" style="border-top:thick solid #808080" align="center"><?php echo _('Database'); ?></td>
\r
182 <tr style="font-weight:bold">
\r
183 <td style="border-top:thin solid #808080"><?php echo _('quota type'); ?></td>
\r
184 <td style="border-top:thin solid #808080" align="right"><?php echo _('quantity'); ?></td>
\r
185 <td style="border-top:thin solid #808080" align="right"><?php echo _('size'); ?></td>
\r
189 foreach ($quotas as $q)
\r
191 if ($q["size"] != "")
\r
193 $sizetot += $q["size"];
\r
196 <td style="border-top:thin solid #808080"><?php echo $q["name"]; ?></td>
\r
197 <td style="border-top:thin solid #808080" align="right"><?php echo $q["nb"]; ?></td>
\r
198 <td style="border-top:thin solid #808080" align="right"><?php echo add_numbers_separator(convert_bytes_to_mega($q["size"]))." "._('Mb'); ?></td>
\r
204 <tr style="font-weight:bold">
\r
205 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080">
\r
206 <?php echo _('Total'); ?>
\r
208 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080"> </td>
\r
209 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080" align="right">
\r
210 <?php echo add_numbers_separator(convert_bytes_to_mega($sizetot))." "._('Mb'); ?>
\r
216 <table width="500px" cellpadding="2" cellspacing="0" border="0">
\r
217 <tr style="font-weight:bold">
\r
218 <td colspan="3" style="border-top:thick solid #808080" align="center">
\r
219 <?php echo _('Disk space'); ?>
\r
222 <tr style="font-weight:bold">
\r
223 <td style="border-top:thin solid #808080">
\r
224 <?php echo _('quota type'); ?>
\r
226 <td style="border-top:thin solid #808080" align="right"> </td>
\r
227 <td style="border-top:thin solid #808080" align="right">
\r
228 <?php echo _('size'); ?>
\r
233 foreach ($quotas_disk as $q)
\r
235 if ($q["size"] != "")
\r
237 $sizetot += $q["size"];
\r
240 <td style="border-top:thin solid #808080"><?php echo $q["name"]; ?></td>
\r
241 <td style="border-top:thin solid #808080" align="right">
\r
242 <?php echo $q["quota_label"]; ?>
\r
244 <td style="border-top:thin solid #808080" align="right">
\r
245 <?php echo add_numbers_separator(convert_bytes_to_mega($q["size"]))." "._('Mb'); ?>
\r
252 <tr style="font-weight:bold">
\r
253 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><?php echo _('Total'); ?></td>
\r
254 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080"> </td>
\r
255 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080" align="right">
\r
256 <?php echo add_numbers_separator(convert_bytes_to_mega($sizetot))." "._('Mb'); ?>
\r
266 $color1 = "#ffffff";
\r
267 $color2 = "#ffffff";
\r
270 $qs = $quota_soft * 1024 * 1024;
\r
271 if (($quota_tot_1+0) > ($qs+0) && ($qs+0) > 0)
\r
273 $color1 = "#FFDCDC";
\r
274 $msg1 = _('Quota exceeded');
\r
276 if (($quota_tot_scm+0) > ($qs+0) && ($qs+0) > 0)
\r
278 $color2 = "#FFDCDC";
\r
279 $msg2 = _('Quota exceeded');
\r
283 <table width="500px" cellpadding="2" cellspacing="0" border="0">
\r
284 <tr style="font-weight:bold">
\r
285 <td colspan="4" style="border-top:thick solid #808080" align="center"><?php echo _('Quota disk management'); ?></td>
\r
287 <tr style="font-weight:bold">
\r
288 <td style="border-top:thin solid #808080">
\r
289 <?php echo _('Quota settings'); ?>
\r
291 <td style="border-top:thin solid #808080;font-weight:bold" align="right">
\r
294 <td style="border-top:thin solid #808080" align="right">
\r
295 <?php echo _('Quota soft'); ?>
\r
297 <td style="border-top:thin solid #808080" align="right">
\r
298 <?php echo _('Quota hard'); ?>
\r
301 <tr style="background:<?php echo $color1; ?>">
\r
302 <td style="border-top:thin solid #808080">
\r
303 <?php echo _('Home, Ftp'); ?>
\r
305 <td style="border-top:thin solid #808080;font-weight:bold;color:red" align="right">
\r
306 <?php echo $msg1; ?>
\r
308 <td style="border-top:thin solid #808080" align="right">
\r
310 if ($quota_soft == 0)
\r
316 echo "$quota_soft";
\r
321 <td style="border-top:thin solid #808080" align="right">
\r
323 if ($quota_hard == 0)
\r
329 echo "$quota_hard";
\r
335 <tr style="background:<?php echo $color2; ?>">
\r
336 <td style="border-top:thin solid #808080">
\r
337 <?php echo _('Cvs, Svn'); ?>
\r
339 <td style="border-top:thin solid #808080;font-weight:bold;color:red" align="right">
\r
340 <?php echo $msg2; ?>
\r
342 <td style="border-top:thin solid #808080" align="right">
\r
344 if ($quota_soft == 0)
\r
350 echo "$quota_soft";
\r
355 <td style="border-top:thin solid #808080" align="right">
\r
357 if ($quota_hard == 0)
\r
363 echo "$quota_hard";
\r
369 <tr style="font-weight:bold">
\r
370 <td colspan="4" style="border-top:thick solid #808080" align="center"> </td>
\r
375 <?php project_admin_footer(array()); ?>
\r
378 function print_debug ($text)
\r
380 echo "<pre>$text</pre>";
\r
383 function convert_bytes_to_mega ($mega)
\r
385 $b = round($mega / (1024*1024), 0);
\r
389 function add_numbers_separator ($val, $sep=' ')
\r
392 $size = strrev($size);
\r
393 $size = wordwrap($size, 3, $sep, 1);
\r
394 $size = strrev($size);
\r
398 function get_dir_size ($dir)
\r
401 $cmd = "/usr/bin/du -bs $dir";
\r
402 $res = shell_exec ($cmd);
\r
403 $a = explode("\t", $res);
\r
404 if (isset($a[1])) $size = $a[0];
\r