2003-12-27 11:21:00 +00:00
< ? php
/*
$Id $
This code is part of LDAP Account Manager ( http :// www . sourceforge . net / projects / lam )
Copyright ( C ) 2003 Tilo Lutz
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
2005-07-21 10:33:02 +00:00
/**
* Manages quotas for users and groups .
*
* @ package modules
*
* @ author Tilo Lutz
* @ author Roland Gruber
* @ author Michael Duergner
*/
/**
* Manages quotas for users and groups .
*
* @ package modules
*/
2004-06-08 18:54:37 +00:00
class quota extends baseModule {
2004-06-13 19:58:58 +00:00
2004-09-26 13:48:52 +00:00
/** this functin fills the error message array with messages
**/
function load_Messages () {
// error messages for input checks
2004-10-25 18:40:18 +00:00
$this -> messages [ 'softblock' ][ 0 ] = array ( 'ERROR' , _ ( 'Block soft quota' ), _ ( 'Block soft quota contains invalid characters. Only natural numbers are allowed.' ));
2005-07-19 12:21:10 +00:00
$this -> messages [ 'softblock' ][ 1 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' %s' , _ ( 'Block soft quota contains invalid characters. Only natural numbers are allowed.' ));
2004-10-25 18:40:18 +00:00
$this -> messages [ 'hardblock' ][ 0 ] = array ( 'ERROR' , _ ( 'Block hard quota' ), _ ( 'Block hard quota contains invalid characters. Only natural numbers are allowed.' ));
2005-07-19 12:21:10 +00:00
$this -> messages [ 'hardblock' ][ 1 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' %s' , _ ( 'Block hard quota contains invalid characters. Only natural numbers are allowed.' ));
2004-10-25 18:40:18 +00:00
$this -> messages [ 'softinode' ][ 0 ] = array ( 'ERROR' , _ ( 'Inode soft quota' ), _ ( 'Inode soft quota contains invalid characters. Only natural numbers are allowed.' ));
2005-07-19 12:21:10 +00:00
$this -> messages [ 'softinode' ][ 1 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' %s' , _ ( 'Inode soft quota contains invalid characters. Only natural numbers are allowed.' ));
2004-10-25 18:40:18 +00:00
$this -> messages [ 'hardinode' ][ 0 ] = array ( 'ERROR' , _ ( 'Inode hard quota' ), _ ( 'Inode hard quota contains invalid characters. Only natural numbers are allowed.' ));
2005-07-19 12:21:10 +00:00
$this -> messages [ 'hardinode' ][ 1 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' %s' , _ ( 'Inode hard quota contains invalid characters. Only natural numbers are allowed.' ));
2004-10-25 18:40:18 +00:00
$this -> messages [ 'block_cmp' ][ 0 ] = array ( 'ERROR' , _ ( 'Block quota' ), _ ( 'Block soft quota must be smaller than block hard quota.' ));
2005-07-19 12:21:10 +00:00
$this -> messages [ 'block_cmp' ][ 1 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' %s' , _ ( 'Block soft quota must be smaller than block hard quota.' ));
2004-10-25 18:40:18 +00:00
$this -> messages [ 'inode_cmp' ][ 0 ] = array ( 'ERROR' , _ ( 'Inode quota' ), _ ( 'Inode soft quota must be smaller than inode hard quota.' ));
2005-07-19 12:21:10 +00:00
$this -> messages [ 'inode_cmp' ][ 1 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' %s' , _ ( 'Inode soft quota must be smaller than inode hard quota.' ));
$this -> messages [ 'upload' ][ 0 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' %s' , _ ( 'Quota has wrong format!' ));
2004-09-26 13:48:52 +00:00
}
2004-06-13 19:58:58 +00:00
/**
* Returns meta data that is interpreted by parent class
*
* @ return array array with meta data
*/
function get_metaData () {
$return = array ();
// manages user and group accounts
$return [ " account_types " ] = array ( " user " , " group " );
2004-06-14 16:05:36 +00:00
// alias name
$return [ " alias " ] = _ ( 'Quota' );
2004-06-20 17:32:02 +00:00
if ( $this -> get_scope () == 'group' ) {
// module dependencies
$return [ 'dependencies' ] = array ( 'depends' => array ( 'posixGroup' ), 'conflicts' => array ());
}
if ( $this -> get_scope () == 'user' ) {
// module dependencies
$return [ 'dependencies' ] = array ( 'depends' => array ( 'posixAccount' ), 'conflicts' => array ());
}
2004-08-17 15:16:17 +00:00
// available PDF fields
2004-10-30 16:46:06 +00:00
$return [ 'PDF_fields' ] = array (
'quotas'
);
2004-10-02 17:41:42 +00:00
// help entries
$return [ 'help' ] = array (
2004-10-30 16:46:06 +00:00
" Mountpoint " => array (
" Headline " => _ ( " Mountpoint " ),
" Text " => _ ( " Mountpoint of device with enabled quotas. " )
),
" UsedBlocks " => array (
" Headline " => _ ( " Used blocks " ),
" Text " => _ ( " Used blocks. 1000 blocks are usually 1MB " )
),
" SoftBlockLimit " => array (
" Headline " => _ ( " Soft block limit " ),
" Text " => _ ( " Soft block limit. " ), " SeeAlso " => '<a href="http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Quota.html#ss4.4">' . 'Quota How-To</a>'
),
" HardBlockLimit " => array (
" Headline " => _ ( " Hard block limit " ),
" Text " => _ ( " Hard block limit " ) . '.' , " SeeAlso " => '<a href="http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Quota.html#ss4.5">' . 'Quota How-To</a>'
),
" GraceBlockPeriod " => array (
" Headline " => _ ( " Grace block period " ),
" Text " => _ ( " Grace block period. Most filesystems use a fixed maximum value of 7 days. " ), " SeeAlso " => '<a href="http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Quota.html#ss4.6">' . 'Quota How-To</a>'
),
" UsedInodes " => array (
" Headline " => _ ( " Used inodes " ),
" Text " => _ ( " Used inodes (files) " ) . '.'
),
" SoftInodeLimit " => array (
" Headline " => _ ( " Soft inode limit " ),
" Text " => _ ( " Soft inode (files) limit. " ), " SeeAlso " => '<a href="http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Quota.html#ss4.4">' . 'Quota How-To</a>'
),
" HardInodeLimit " => array (
" Headline " => _ ( " Hard inode limit " ),
" Text " => _ ( " Hard inode (files) limit " ) . '.' , " SeeAlso " => '<a href="http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Quota.html#ss4.5">' . 'Quota How-To</a>'
),
" GraceInodePeriod " => array (
" Headline " => _ ( " Grace inode period " ),
" Text " => _ ( " Grace inode (files) period. Most filesystems use a fixed maximum value of 7 days. " ), " SeeAlso " => '<a href="http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Quota.html#ss4.6">' . 'Quota How-To</a>'
2005-07-19 12:21:10 +00:00
),
" upload " => array (
" Headline " => _ ( " Quota " ),
" Text " => _ ( " Please enter the quota settings for this mount point. The syntax is: { soft block limit}, { hard block limit}, { soft inode limit}, { hard inode limit} " )
2004-10-30 16:46:06 +00:00
)
2004-10-02 17:41:42 +00:00
);
2004-06-13 19:58:58 +00:00
return $return ;
}
2003-12-27 11:21:00 +00:00
// Constructor
2004-06-08 18:54:37 +00:00
function init ( $base ) {
2004-09-01 20:53:06 +00:00
// call parent init
parent :: init ( $base );
2003-12-27 11:21:00 +00:00
// Get basic quotas for new account
2004-12-09 19:10:57 +00:00
$output_array = lamdaemon ( array ( " + quota get " . $_SESSION [ $this -> base ] -> type ));
2003-12-27 11:21:00 +00:00
// process quotas
if ( is_array ( $output_array )) {
$all_quota = explode ( ':' , $output_array [ 0 ]);
for ( $j = 0 ; $j < sizeof ( $all_quota ) - 1 ; $j ++ ) {
$single_quota = explode ( ',' , $all_quota [ $j ]);
// unset not existing quotas from account-object
// collect all existing mountpoints in array
$real_quotas [] = $single_quota [ 0 ];
for ( $k = 0 ; $k < sizeof ( $single_quota ); $k ++ )
$this -> quota [ $j ][ $k ] = $single_quota [ $k ];
if ( $this -> quota [ $j ][ 4 ] < time ()) $this -> quota [ $j ][ 4 ] = '' ;
else $this -> quota [ $j ][ 4 ] = strval ( intval (( $this -> quota [ $j ][ 4 ] - time ()) / 3600 )) . ' ' . _ ( 'hours' );
if ( $this -> quota [ $j ][ 8 ] < time ()) $this -> quota [ $j ][ 8 ] = '' ;
else $this -> quota [ $j ][ 8 ] = strval ( intval (( $this -> quota [ $j ][ 8 ] - time ()) / 3600 )) . ' ' . _ ( 'hours' );
}
$j = 0 ;
while ( isset ( $this -> quota [ $j ][ 0 ]))
// remove invalid quotas
if ( ! in_array ( $this -> quota [ $j ][ 0 ], $real_quotas )) unset ( $this -> quota [ $j ]);
else $j ++ ;
// Beautify array, repair index
if ( is_array ( $this -> quota )) $this -> quota = array_values ( $this -> quota );
}
}
// Variables
var $quota ;
function module_ready () {
if ( $_SESSION [ $this -> base ] -> type == 'user' && $_SESSION [ $this -> base ] -> module [ 'posixAccount' ] -> attributes [ 'uid' ][ 0 ] == '' ) return false ;
if ( $_SESSION [ $this -> base ] -> type == 'group' && $_SESSION [ $this -> base ] -> module [ 'posixGroup' ] -> attributes [ 'cn' ][ 0 ] == '' ) return false ;
return true ;
2005-09-13 17:20:07 +00:00
}
2003-12-27 11:21:00 +00:00
2004-02-09 18:11:01 +00:00
/* This functions return true
* if all needed settings are done
*/
function module_complete () {
if ( ! $this -> module_ready ()) return false ;
return true ;
2005-09-13 17:20:07 +00:00
}
2004-02-09 18:11:01 +00:00
2003-12-27 11:21:00 +00:00
/* This function loads all attributes into the object
* $attr is an array as it ' s retured from ldap_get_attributes
*/
function load_attributes ( $attr ) {
// Load name
if ( $_SESSION [ $this -> base ] -> type == 'user' ) $id = $attr [ 'uid' ][ 0 ];
if ( $_SESSION [ $this -> base ] -> type == 'group' ) $id = $attr [ 'cn' ][ 0 ];
// Get quotas
2004-12-09 19:10:57 +00:00
$output_array = lamdaemon ( array ( " $id quota get " . $_SESSION [ $this -> base ] -> type ));
2003-12-27 11:21:00 +00:00
// process quotas
if ( is_array ( $output_array )) {
$all_quota = explode ( ':' , $output_array [ 0 ]);
for ( $j = 0 ; $j < sizeof ( $all_quota ) - 1 ; $j ++ ) {
$single_quota = explode ( ',' , $all_quota [ $j ]);
// unset not existing quotas from account-object
// collect all existing mountpoints in array
$real_quotas [] = $single_quota [ 0 ];
for ( $k = 0 ; $k < sizeof ( $single_quota ); $k ++ )
$this -> quota [ $j ][ $k ] = $single_quota [ $k ];
if ( $this -> quota [ $j ][ 4 ] < time ()) $this -> quota [ $j ][ 4 ] = '' ;
else $this -> quota [ $j ][ 4 ] = strval ( intval (( $this -> quota [ $j ][ 4 ] - time ()) / 3600 )) . ' ' . _ ( 'hours' );
if ( $this -> quota [ $j ][ 8 ] < time ()) $this -> quota [ $j ][ 8 ] = '' ;
else $this -> quota [ $j ][ 8 ] = strval ( intval (( $this -> quota [ $j ][ 8 ] - time ()) / 3600 )) . ' ' . _ ( 'hours' );
}
$j = 0 ;
while ( isset ( $this -> quota [ $j ][ 0 ]))
// remove invalid quotas
if ( ! in_array ( $this -> quota [ $j ][ 0 ], $real_quotas )) unset ( $this -> quota [ $j ]);
else $j ++ ;
// Beautify array, repair index
if ( is_array ( $this -> quota )) $this -> quota = array_values ( $this -> quota );
}
return 0 ;
}
/* This function returns an array with 3 entries :
* array ( DN1 ( 'add' => array ( $attr ), 'remove' => array ( $attr ), 'modify' => array ( $attr )), DN2 .... )
* DN is the DN to change . It may be possible to change several DNs ,
* e . g . create a new user and add him to some groups via attribute memberUid
* add are attributes which have to be added to ldap entry
* remove are attributes which have to be removed from ldap entry
* modify are attributes which have to been modified in ldap entry
*/
function save_attributes () {
/* Check wich quotas have changed
* Because we can not send an array to lamdaemon . pl we have to put all
* values in a string . ':' sepraeates the first array , ',' the second
*
* $values -> quota [][] First array is an index for every chare with active quotas
* second array Contains values for every share :
* mountpoint , used blocks , soft block limit , hard block limit , grace block period , used inodes ,
* soft inode limit , hard inode limit , grace inode period
*/
$i = 0 ;
while ( $this -> quota [ $i ][ 0 ]) {
$quotastring = $quotastring . $this -> quota [ $i ][ 0 ] . ',' . $this -> quota [ $i ][ 2 ] . ',' . $this -> quota [ $i ][ 3 ]
. ',' . $this -> quota [ $i ][ 6 ] . ',' . $this -> quota [ $i ][ 7 ] . ':' ;
$i ++ ;
}
if ( $_SESSION [ $this -> base ] -> type == 'user' ) $id = $_SESSION [ $this -> base ] -> module [ 'posixAccount' ] -> attributes [ 'uid' ][ 0 ];
if ( $_SESSION [ $this -> base ] -> type == 'group' ) $id = $_SESSION [ $this -> base ] -> module [ 'posixGroup' ] -> attributes [ 'cn' ][ 0 ];
$return [ $_SESSION [ $this -> base ] -> dn ][ 'lamdaemon' ][ 'command' ][] = $id . " quota set " . $_SESSION [ $this -> base ] -> type . " $quotastring\n " ;
return $return ;
}
2003-12-30 15:36:30 +00:00
function delete_attributes ( $post ) {
2003-12-27 11:21:00 +00:00
$i = 0 ;
while ( $this -> quota [ $i ][ 0 ]) {
$quotastring = $quotastring . $this -> quota [ $i ][ 0 ] . ',0,0,0,0:' ;
$i ++ ;
}
if ( $_SESSION [ $this -> base ] -> type == 'user' ) $id = $_SESSION [ $this -> base ] -> module [ 'posixAccount' ] -> attributes [ 'uid' ][ 0 ];
if ( $_SESSION [ $this -> base ] -> type == 'group' ) $id = $_SESSION [ $this -> base ] -> module [ 'posixGroup' ] -> attributes [ 'cn' ][ 0 ];
2004-01-10 11:47:48 +00:00
$return [ $_SESSION [ $this -> base ] -> dn_orig ][ 'lamdaemon' ][ 'command' ][] = $id . " quota set " . $_SESSION [ $this -> base ] -> type . " $quotastring\n " ;
2003-12-27 11:21:00 +00:00
return $return ;
}
2005-09-07 12:58:34 +00:00
/**
* Processes user input of the primary module page .
* It checks if all input values are correct and updates the associated LDAP attributes .
*
* @ param array $post HTTP - POST values
* @ return array list of info / error messages
2003-12-27 11:21:00 +00:00
*/
2005-03-10 18:35:04 +00:00
function process_attributes ( & $post ) {
2003-12-30 15:36:30 +00:00
// Write all general values into $account_new
$i = 0 ;
// loop for every mointpoint with quotas
while ( $this -> quota [ $i ][ 0 ]) {
$this -> quota [ $i ][ 2 ] = $post [ $i . '_2' ];
$this -> quota [ $i ][ 3 ] = $post [ $i . '_3' ];
$this -> quota [ $i ][ 6 ] = $post [ $i . '_6' ];
$this -> quota [ $i ][ 7 ] = $post [ $i . '_7' ];
// Check if values are OK and set automatic values. if not error-variable will be set
2004-09-26 13:48:52 +00:00
if ( ! get_preg ( $this -> quota [ $i ][ 2 ], 'digit' ))
2004-10-16 19:51:36 +00:00
$triggered_messages [ $this -> quota [ $i ][ 2 ]][] = $this -> messages [ 'softblock' ][ 0 ];
2004-09-26 13:48:52 +00:00
if ( ! get_preg ( $this -> quota [ $i ][ 3 ], 'digit' ))
2004-10-16 19:51:36 +00:00
$triggered_messages [ $this -> quota [ $i ][ 3 ]][] = $this -> messages [ 'hardblock' ][ 0 ];
2004-09-26 13:48:52 +00:00
if ( ! get_preg ( $this -> quota [ $i ][ 6 ], 'digit' ))
2004-10-16 19:51:36 +00:00
$triggered_messages [ $this -> quota [ $i ][ 6 ]][] = $this -> messages [ 'softinode' ][ 0 ];
2004-09-26 13:48:52 +00:00
if ( ! get_preg ( $this -> quota [ $i ][ 7 ], 'digit' ))
2004-10-16 19:51:36 +00:00
$triggered_messages [ $this -> quota [ $i ][ 7 ]][] = $this -> messages [ 'hardinode' ][ 0 ];
2003-12-30 15:36:30 +00:00
if ( intval ( $this -> quota [ $i ][ 2 ]) > intval ( $this -> quota [ $i ][ 3 ]))
2004-10-16 19:51:36 +00:00
$triggered_messages [ $this -> quota [ $i ][ 2 ]][] = $this -> messages [ 'block_cmp' ][ 0 ];
2003-12-30 15:36:30 +00:00
if ( intval ( $this -> quota [ $i ][ 6 ]) > intval ( $this -> quota [ $i ][ 7 ]))
2004-10-16 19:51:36 +00:00
$triggered_messages [ $this -> quota [ $i ][ 6 ]][] = $this -> messages [ 'inode_cmp' ][ 0 ];
2003-12-30 15:36:30 +00:00
$i ++ ;
}
2004-10-16 19:51:36 +00:00
if ( count ( $triggered_messages ) != 0 ) {
$this -> triggered_messages = $triggered_messages ;
return $triggered_messages ;
}
else $this -> triggered_messages = array ();
2003-12-27 11:21:00 +00:00
}
/* This function will create the html - page
* to show a page with all attributes .
* It will output a complete html - table
*/
2005-02-16 21:00:19 +00:00
function display_html_attributes ( & $post ) {
2004-01-27 19:07:31 +00:00
$return [] = array ( 0 => array ( 'kind' => 'text' , 'text' => _ ( 'Mountpoint' ) ),
1 => array ( 'kind' => 'text' , 'text' => _ ( 'Used blocks' ) ),
2 => array ( 'kind' => 'text' , 'text' => _ ( 'Soft block limit' ) ),
3 => array ( 'kind' => 'text' , 'text' => _ ( 'Hard block limit' ) ),
4 => array ( 'kind' => 'text' , 'text' => _ ( 'Grace block period' ) ),
5 => array ( 'kind' => 'text' , 'text' => _ ( 'Used inodes' ) ),
6 => array ( 'kind' => 'text' , 'text' => _ ( 'Soft inode limit' ) ),
7 => array ( 'kind' => 'text' , 'text' => _ ( 'Hard inode limit' ) ),
8 => array ( 'kind' => 'text' , 'text' => _ ( 'Grace inode period' ) ));
$return [] = array ( 0 => array ( 'kind' => 'help' , 'value' => 'Mountpoint' ),
1 => array ( 'kind' => 'help' , 'value' => 'UsedBlocks' ),
2 => array ( 'kind' => 'help' , 'value' => 'SoftBlockLimit' ),
3 => array ( 'kind' => 'help' , 'value' => 'HardBlockLimit' ),
4 => array ( 'kind' => 'help' , 'value' => 'GraceBlockPeriod' ),
5 => array ( 'kind' => 'help' , 'value' => 'UsedInodes' ),
6 => array ( 'kind' => 'help' , 'value' => 'SoftInodeLimit' ),
7 => array ( 'kind' => 'help' , 'value' => 'HardInodeLimit' ),
8 => array ( 'kind' => 'help' , 'value' => 'GraceInodePeriod' ));
2003-12-27 11:21:00 +00:00
$i = 0 ;
// loop for every mointpoint with enabled quotas
while ( $this -> quota [ $i ][ 0 ]) {
2004-01-27 19:07:31 +00:00
$return [] = array ( 0 => array ( 'kind' => 'text' , 'text' => $this -> quota [ $i ][ 0 ] ),
1 => array ( 'kind' => 'text' , 'text' => $this -> quota [ $i ][ 1 ] ),
2 => array ( 'kind' => 'input' , 'name' => $i . '_2' , 'type' => 'text' , 'size' => '12' , 'maxlength' => '20' , 'value' => $this -> quota [ $i ][ 2 ]),
3 => array ( 'kind' => 'input' , 'name' => $i . '_3' , 'type' => 'text' , 'size' => '12' , 'maxlength' => '20' , 'value' => $this -> quota [ $i ][ 3 ]),
4 => array ( 'kind' => 'text' , 'text' => $this -> quota [ $i ][ 4 ] ),
5 => array ( 'kind' => 'text' , 'text' => $this -> quota [ $i ][ 5 ] ),
6 => array ( 'kind' => 'input' , 'name' => $i . '_6' , 'type' => 'text' , 'size' => '12' , 'maxlength' => '20' , 'value' => $this -> quota [ $i ][ 6 ]),
7 => array ( 'kind' => 'input' , 'name' => $i . '_7' , 'type' => 'text' , 'size' => '12' , 'maxlength' => '20' , 'value' => $this -> quota [ $i ][ 7 ]),
8 => array ( 'kind' => 'text' , 'text' => $this -> quota [ $i ][ 8 ] ));
2003-12-27 11:21:00 +00:00
$i ++ ;
}
2004-01-27 19:07:31 +00:00
return $return ;
2003-12-27 11:21:00 +00:00
}
2005-02-16 21:00:19 +00:00
function display_html_delete ( & $post ) {
2004-01-10 11:47:48 +00:00
return 0 ;
}
2004-09-19 08:34:14 +00:00
/**
* Returns a list of elements for the account profiles .
*
* @ return profile elements
*/
2004-04-03 14:47:33 +00:00
function get_profileOptions () {
2004-06-23 19:10:22 +00:00
// Get quotas
2004-12-09 19:10:57 +00:00
$quotas = lamdaemon ( array ( " + quota get " . $this -> get_scope ()));
2004-06-23 19:10:22 +00:00
$dirs = split ( " : " , $quotas [ 0 ]);
array_pop ( $dirs ); // remove empty element at the end
for ( $i = 0 ; $i < sizeof ( $dirs ); $i ++ ) {
$dirs [ $i ] = split ( " , " , $dirs [ $i ]);
$dirs [ $i ] = $dirs [ $i ][ 0 ];
}
2004-03-09 12:03:39 +00:00
$return = array ();
2004-06-23 19:10:22 +00:00
if ( sizeof ( $dirs ) < 1 ) return $return ; // stop if no quota directories were found
$return [] = array (
0 => array ( 'kind' => 'text' , 'text' => '<b>' . _ ( 'Mountpoint' ) . ' </b>' , 'align' => 'center' ),
1 => array ( 'kind' => 'text' , 'text' => '<b>' . _ ( 'Soft block limit' ) . ' </b>' , 'align' => 'center' ),
2 => array ( 'kind' => 'text' , 'text' => '<b>' . _ ( 'Hard block limit' ) . ' </b>' , 'align' => 'center' ),
3 => array ( 'kind' => 'text' , 'text' => '<b>' . _ ( 'Soft inode limit' ) . ' </b>' , 'align' => 'center' ),
4 => array ( 'kind' => 'text' , 'text' => '<b>' . _ ( 'Hard inode limit' ) . ' </b>' , 'align' => 'center' ),
);
$return [] = array (
2004-10-02 17:41:42 +00:00
0 => array ( 'kind' => 'help' , 'value' => 'Mountpoint' , 'align' => 'center' ),
1 => array ( 'kind' => 'help' , 'value' => 'SoftBlockLimit' , 'align' => 'center' ),
2 => array ( 'kind' => 'help' , 'value' => 'HardBlockLimit' , 'align' => 'center' ),
3 => array ( 'kind' => 'help' , 'value' => 'SoftInodeLimit' , 'align' => 'center' ),
4 => array ( 'kind' => 'help' , 'value' => 'HardInodeLimit' , 'align' => 'center' ),
2004-06-23 19:10:22 +00:00
);
for ( $i = 0 ; $i < sizeof ( $dirs ); $i ++ ) {
$return [] = array (
0 => array ( 'kind' => 'text' , 'text' => $dirs [ $i ], 'align' => 'left' ),
2005-01-22 10:50:10 +00:00
1 => array ( 'kind' => 'input' , 'type' => 'text' , 'align' => 'center' , 'size' => '12' , 'name' => " quota_softblock_ " . $dirs [ $i ]),
2 => array ( 'kind' => 'input' , 'type' => 'text' , 'align' => 'center' , 'size' => '12' , 'name' => " quota_hardblock_ " . $dirs [ $i ]),
3 => array ( 'kind' => 'input' , 'type' => 'text' , 'align' => 'center' , 'size' => '12' , 'name' => " quota_softinode_ " . $dirs [ $i ]),
4 => array ( 'kind' => 'input' , 'type' => 'text' , 'align' => 'center' , 'size' => '12' , 'name' => " quota_hardinode_ " . $dirs [ $i ]),
2004-06-23 19:10:22 +00:00
);
}
2004-03-09 12:03:39 +00:00
return $return ;
2003-12-27 11:21:00 +00:00
}
2004-09-19 08:34:14 +00:00
/**
* Checks input values of account profiles .
*
* @ param array $options a hash array ( name => value ) containing the options
* @ return array list of error messages ( array ( type , title , text )) to generate StatusMessages , if any
*/
2004-07-01 15:54:33 +00:00
function check_profileOptions ( $options ) {
2004-07-02 18:01:44 +00:00
$return = array ();
2005-01-22 10:50:10 +00:00
// Get quotas
$quotas = lamdaemon ( array ( " + quota get " . $this -> get_scope ()));
$dirs = split ( " : " , $quotas [ 0 ]);
array_pop ( $dirs ); // remove empty element at the end
for ( $i = 0 ; $i < sizeof ( $dirs ); $i ++ ) {
$dirs [ $i ] = split ( " , " , $dirs [ $i ]);
$dirs [ $i ] = $dirs [ $i ][ 0 ];
}
for ( $i = 0 ; $i < sizeof ( $dirs ); $i ++ ) {
if ( ! get_preg ( $options [ " quota_softblock_ " . $dirs [ $i ]][ 0 ], 'digit' )) $return [] = $this -> messages [ 'softblock' ][ 0 ];
if ( ! get_preg ( $options [ " quota_hardblock_ " . $dirs [ $i ]][ 0 ], 'digit' )) $return [] = $this -> messages [ 'hardblock' ][ 0 ];
if ( ! get_preg ( $options [ " quota_softinode_ " . $dirs [ $i ]][ 0 ], 'digit' )) $return [] = $this -> messages [ 'softinode' ][ 0 ];
if ( ! get_preg ( $options [ " quota_hardinode_ " . $dirs [ $i ]][ 0 ], 'digit' )) $return [] = $this -> messages [ 'hardinode' ][ 0 ];
if ( intval ( $options [ " quota_softblock_ " . $dirs [ $i ]][ 0 ]) >= $options [ " quota_hardblock_ $i " ][ 0 ]) $return [] = $this -> messages [ 'block_cmp' ][ 0 ];
if ( intval ( $options [ " quota_softinode_ " . $dirs [ $i ]][ 0 ]) >= $options [ " quota_hardinode_ $i " ][ 0 ]) $return [] = $this -> messages [ 'inode_cmp' ][ 0 ];
2004-07-02 18:01:44 +00:00
$i ++ ;
}
return $return ;
2004-03-14 17:33:05 +00:00
}
2004-05-24 21:39:57 +00:00
2005-01-22 10:50:10 +00:00
/**
* Loads the values of an account profile into internal variables .
*
* @ param array $profile hash array with profile values ( identifier => value )
*/
function load_profile ( $profile ) {
for ( $i = 0 ; $i < sizeof ( $this -> quota ); $i ++ ) {
$dir = $this -> quota [ $i ][ 0 ];
if ( isset ( $profile [ " quota_softblock_ " . $dir ])) $this -> quota [ $i ][ 2 ] = $profile [ " quota_softblock_ " . $dir ][ 0 ];
if ( isset ( $profile [ " quota_hardblock_ " . $dir ])) $this -> quota [ $i ][ 3 ] = $profile [ " quota_hardblock_ " . $dir ][ 0 ];
if ( isset ( $profile [ " quota_softinode_ " . $dir ])) $this -> quota [ $i ][ 6 ] = $profile [ " quota_softinode_ " . $dir ][ 0 ];
if ( isset ( $profile [ " quota_hardinode_ " . $dir ])) $this -> quota [ $i ][ 7 ] = $profile [ " quota_hardinode_ " . $dir ][ 0 ];
}
}
2005-07-16 12:43:48 +00:00
/** Returns the PDF entries for this module .
*
2004-08-17 15:16:17 +00:00
* @ see baseModule #get_pdfEntries
2005-07-16 12:43:48 +00:00
*
* @ return array list of possible PDF entries
2004-08-17 15:16:17 +00:00
*/
2004-06-03 14:26:48 +00:00
function get_pdfEntries ( $account_type = " user " ) {
2005-07-16 12:43:48 +00:00
if ( sizeof ( $this -> quota ) > 0 ) {
$quotas = array ();
2005-07-28 09:01:41 +00:00
$quotas [] = '<block><tr>' .
2005-07-16 12:43:48 +00:00
'<td width="20%"><b>' . _ ( 'Mountpoint' ) . '</b></td>' .
'<td width="20%"><b>' . _ ( 'Soft block' ) . '</b></td>' .
'<td width="20%"><b>' . _ ( 'Hard block' ) . '</b></td>' .
'<td width="20%"><b>' . _ ( 'Soft inode' ) . '</b></td>' .
2005-07-28 09:01:41 +00:00
'<td width="20%"><b>' . _ ( 'Hard inode' ) . '</b></td></tr></block>' ;
2005-07-16 12:43:48 +00:00
for ( $i = 0 ; $i < sizeof ( $this -> quota ); $i ++ ) {
2005-07-28 09:01:41 +00:00
$quotas [] = '<block><tr>' .
2005-07-16 12:43:48 +00:00
'<td width="20%" align=\"L\">' . $this -> quota [ $i ][ 0 ] . '</td>' .
'<td width="20%" align=\"L\">' . $this -> quota [ $i ][ 2 ] . '</td>' .
'<td width="20%" align=\"L\">' . $this -> quota [ $i ][ 3 ] . '</td>' .
'<td width="20%" align=\"L\">' . $this -> quota [ $i ][ 6 ] . '</td>' .
2005-07-28 09:01:41 +00:00
'<td width="20%" align=\"L\">' . $this -> quota [ $i ][ 7 ] . '</td></tr></block>' ;
2005-07-16 12:43:48 +00:00
}
return array (
'quota_quotas' => $quotas );
}
2005-09-19 18:43:10 +00:00
else {
return array ();
}
2004-05-24 21:39:57 +00:00
}
2004-03-14 17:33:05 +00:00
2005-07-19 12:21:10 +00:00
/**
* Returns an array containing all input columns for the file upload .
*
* Syntax :
* < br > array (
* < br > string : name , // fixed non-translated name which is used as column name (should be of format: <module name>_<column name>)
* < br > string : description , // short descriptive name
* < br > string : help , // help ID
* < br > string : example , // example value
* < br > boolean : required // true, if user must set a value for this column
* < br > )
*
* @ return array column list
*/
function get_uploadColumns () {
$return = array ();
// Get quotas
$quotas = lamdaemon ( array ( " + quota get " . $this -> get_scope ()));
$dirs = split ( " : " , $quotas [ 0 ]);
array_pop ( $dirs ); // remove empty element at the end
for ( $i = 0 ; $i < sizeof ( $dirs ); $i ++ ) {
$dirs [ $i ] = split ( " , " , $dirs [ $i ]);
$dirs [ $i ] = $dirs [ $i ][ 0 ];
}
for ( $i = 0 ; $i < sizeof ( $dirs ); $i ++ ) {
$return [] = array (
'name' => 'quota_' . $dirs [ $i ],
'description' => _ ( 'Quota for:' ) . ' ' . $dirs [ $i ],
'help' => 'upload' ,
'example' => '2000,2500,3000,3500' );
}
return $return ;
}
/**
* In this function the LDAP account is built up .
*
* @ param array $rawAccounts list of hash arrays ( name => value ) from user input
* @ param array $partialAccounts list of hash arrays ( name => value ) which are later added to LDAP
* @ param array $ids list of IDs for column position ( e . g . " posixAccount_uid " => 5 )
* @ return array list of error messages if any
*/
function build_uploadAccounts ( $rawAccounts , $ids , & $partialAccounts ) {
// Quota changes no LDAP attributes, all actions are done in doUploadPostActions()
return array ();
}
/**
* This function executes one post upload action .
*
* @ param array $data array containing one account in each element
* @ param array $ids array ( < column_name > => < column number > )
* @ param array $failed list of accounts which were not created successfully
* @ param array $temp variable to store temporary data between two post actions
* @ return array current status
* < br > array (
* < br > 'status' => 'finished' | 'inProgress'
* < br > 'progress' => 0. . 100
* < br > 'errors' => array ( < array of parameters for StatusMessage > )
* < br > )
*/
function doUploadPostActions ( $data , $ids , $failed , & $temp ) {
$errors = array ();
// first call, get list of user names and quota values
if ( ! isset ( $temp [ 'counter' ])) {
$temp [ 'counter' ] = 0 ;
// create list of quota columns
$temp [ 'quotas' ] = array ();
$columns = array_keys ( $ids );
for ( $i = 0 ; $i < sizeof ( $columns ); $i ++ ) {
if ( strpos ( $columns [ $i ], 'quota_' ) === 0 ) {
$temp [ 'quotas' ][] = substr ( $columns [ $i ], 6 );
}
}
// select user/group name depending on current scope
$temp [ 'accounts' ] = array ();
$col = 'invalid' ;
if ( $this -> get_scope () == 'user' ) $col = $ids [ 'posixAccount_userName' ];
elseif ( $this -> get_scope () == 'group' ) $col = $ids [ 'posixGroup_cn' ];
// create list of account names and their quota values
for ( $i = 0 ; $i < sizeof ( $data ); $i ++ ) {
if ( in_array ( $i , $failed )) continue ; // ignore failed accounts
$name = $data [ $i ][ $col ];
for ( $m = 0 ; $m < sizeof ( $temp [ 'quotas' ]); $m ++ ) {
if ( $data [ $i ][ $ids [ 'quota_' . $temp [ 'quotas' ][ $m ]]] != '' ) {
$parts = explode ( ',' , $data [ $i ][ $ids [ 'quota_' . $temp [ 'quotas' ][ $m ]]]);
// check syntax
if ( sizeof ( $parts ) != 4 ) {
$errMsg = $this -> messages [ 'upload' ][ 0 ];
array_push ( $errMsg , array ( $i , 'quota_' . $temp [ 'quotas' ][ $m ]));
$errors [] = $errMsg ;
continue ;
}
if ( ! get_preg ( $parts [ 0 ], 'digit' )) {
$errMsg = $this -> messages [ 'softblock' ][ 1 ];
array_push ( $errMsg , array ( $i , 'quota_' . $temp [ 'quotas' ][ $m ]));
$errors [] = $errMsg ;
continue ;
}
if ( ! get_preg ( $parts [ 1 ], 'digit' )) {
$errMsg = $this -> messages [ 'hardblock' ][ 1 ];
array_push ( $errMsg , array ( $i , 'quota_' . $temp [ 'quotas' ][ $m ]));
$errors [] = $errMsg ;
continue ;
}
if ( ! get_preg ( $parts [ 2 ], 'digit' )) {
$errMsg = $this -> messages [ 'softinode' ][ 1 ];
array_push ( $errMsg , array ( $i , 'quota_' . $temp [ 'quotas' ][ $m ]));
$errors [] = $errMsg ;
continue ;
}
if ( ! get_preg ( $parts [ 3 ], 'digit' )) {
$errMsg = $this -> messages [ 'hardinode' ][ 1 ];
array_push ( $errMsg , array ( $i , 'quota_' . $temp [ 'quotas' ][ $m ]));
$errors [] = $errMsg ;
continue ;
}
if ( $parts [ 0 ] >= $parts [ 1 ]) {
$errMsg = $this -> messages [ 'block_cmp' ][ 1 ];
array_push ( $errMsg , array ( $i , 'quota_' . $temp [ 'quotas' ][ $m ]));
$errors [] = $errMsg ;
continue ;
}
if ( $parts [ 2 ] >= $parts [ 3 ]) {
$errMsg = $this -> messages [ 'inode_cmp' ][ 1 ];
array_push ( $errMsg , array ( $i , 'quota_' . $temp [ 'quotas' ][ $m ]));
$errors [] = $errMsg ;
continue ;
}
// save quota settings
$temp [ 'accounts' ][ $name ][ $temp [ 'quotas' ][ $m ]] = $parts ;
}
}
}
return array ( 'status' => 'inProgress' , 'progress' => 5 , 'errors' => $errors );
}
// quotas are ready to set
elseif ( $temp [ 'counter' ] < sizeof ( $temp [ 'accounts' ])) {
$names = array_keys ( $temp [ 'accounts' ]);
$name = $names [ $temp [ 'counter' ]];
$mountPoints = array_keys ( $temp [ 'accounts' ][ $name ]);
// set quota
$quotaString = $name . " quota set " . $this -> scope . " " ;
for ( $m = 0 ; $m < sizeof ( $mountPoints ); $m ++ ) {
$partString = $mountPoints [ $m ] . ',' . implode ( ',' , $temp [ 'accounts' ][ $name ][ $mountPoints [ $m ]]) . ':' ;
$quotaString .= $partString ;
}
$quotaString .= " \n " ;
$result = lamdaemon ( array ( $quotaString ));
if ( is_array ( $result )) {
$errors [] = array ( 'ERROR' , implode ( '<br>' , $result ), '' );
}
// set counters to next account/mount point
$temp [ 'counter' ] ++ ;
return array (
'status' => 'inProgress' ,
'progress' => 5 + ( 95 * ( $temp [ 'counter' ] / sizeof ( $temp [ 'accounts' ]))),
'errors' => $errors );
}
return array ( 'status' => 'finished' );
}
2004-03-09 12:03:39 +00:00
}
2003-12-30 15:36:30 +00:00
?>