00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 define('ACL_READ' ,1 );
00053 define('ACL_WRITE' ,2 );
00054 define('ACL_PROP' ,4 );
00055 define('ACL_DELETE' ,8 );
00056 define('ACL_RELEASE' ,16 );
00057 define('ACL_PUBLISH' ,32 );
00058 define('ACL_CREATE_FOLDER',64 );
00059 define('ACL_CREATE_FILE' ,128 );
00060 define('ACL_CREATE_LINK' ,256 );
00061 define('ACL_CREATE_PAGE' ,512 );
00062 define('ACL_GRANT' ,1024);
00063 define('ACL_TRANSMIT' ,2048);
00064
00075 class Acl
00076 {
00081 var $aclid;
00082
00087 var $objectid = 0;
00088
00094 var $userid = 0;
00095
00101 var $groupid = 0;
00102
00107 var $languageid = 0;
00108
00113 var $languagename = '';
00114
00120 var $isDefault = false;
00121
00126 var $username = '';
00127
00132 var $groupname = '';
00133
00138 var $read = true;
00139
00144 var $write = false;
00145
00150 var $prop = false;
00151
00156 var $delete = false;
00157
00162 var $release = false;
00163
00168 var $publish = false;
00169
00174 var $create_folder = false;
00175
00180 var $create_file = false;
00181
00186 var $create_link = false;
00187
00192 var $create_page = false;
00193
00198 var $grant = false;
00199
00204 var $transmit = false;
00205
00206
00211 function Acl( $aclid = 0 )
00212 {
00213 if ( $aclid != 0 )
00214 $this->aclid = $aclid;
00215 }
00216
00217
00221 function load()
00222 {
00223 $db = db_connection();
00224
00225 $sql = new Sql( 'SELECT {t_acl}.*,{t_user}.name as username,{t_group}.name as groupname,{t_language}.name as languagename'.
00226 ' FROM {t_acl} '.
00227 ' LEFT JOIN {t_user} ON {t_user}.id = {t_acl}.userid '.
00228 ' LEFT JOIN {t_group} ON {t_group}.id = {t_acl}.groupid '.
00229 ' LEFT JOIN {t_language} ON {t_language}.id = {t_acl}.languageid '.
00230 ' WHERE {t_acl}.id={aclid}' );
00231
00232 $sql->setInt('aclid',$this->aclid);
00233
00234 $row = $db->getRow( $sql->query );
00235
00236 $this->setDatabaseRow( $row );
00237
00238 if ( intval($this->languageid)==0 )
00239 $this->languagename = lang('GLOBAL_ALL_LANGUAGES');
00240 else $this->languagename = $row['languagename'];
00241 $this->username = $row['username' ];
00242 $this->groupname = $row['groupname' ];
00243 }
00244
00245
00249 function loadRaw()
00250 {
00251 $db = db_connection();
00252
00253 $sql = new Sql( 'SELECT * '.
00254 ' FROM {t_acl} '.
00255 ' WHERE {t_acl}.id={aclid}' );
00256
00257 $sql->setInt('aclid',$this->aclid);
00258
00259 $row = $db->getRow( $sql->query );
00260
00261 $this->setDatabaseRow( $row );
00262 }
00263
00264
00270 function setDatabaseRow( $row )
00271 {
00272 $this->aclid = $row['id'];
00273
00274 $this->write = ( $row['is_write' ] == '1' );
00275 $this->prop = ( $row['is_prop' ] == '1' );
00276 $this->delete = ( $row['is_delete' ] == '1' );
00277 $this->release = ( $row['is_release' ] == '1' );
00278 $this->publish = ( $row['is_publish' ] == '1' );
00279 $this->create_folder = ( $row['is_create_folder'] == '1' );
00280 $this->create_file = ( $row['is_create_file' ] == '1' );
00281 $this->create_page = ( $row['is_create_page' ] == '1' );
00282 $this->create_link = ( $row['is_create_link' ] == '1' );
00283 $this->grant = ( $row['is_grant' ] == '1' );
00284 $this->transmit = ( $row['is_transmit' ] == '1' );
00285
00286 $this->objectid = intval($row['objectid' ]);
00287 $this->languageid = intval($row['languageid']);
00288 $this->userid = intval($row['userid' ]);
00289 $this->groupid = intval($row['groupid' ]);
00290 }
00291
00292 function getProperties()
00293 {
00294 return Array( 'read' => true,
00295 'write' => $this->write,
00296 'prop' => $this->prop,
00297 'create_folder'=> $this->create_folder,
00298 'create_file' => $this->create_file,
00299 'create_link' => $this->create_link,
00300 'create_page' => $this->create_page,
00301 'delete' => $this->delete,
00302 'release' => $this->release,
00303 'publish' => $this->publish,
00304 'grant' => $this->grant,
00305 'transmit' => $this->transmit,
00306 'is_default' => $this->isDefault,
00307 'userid' => $this->userid,
00308 'username' => $this->username,
00309 'groupid' => $this->groupid,
00310 'groupname' => $this->groupname,
00311 'languageid' => $this->languageid,
00312 'languagename' => $this->languagename,
00313 'objectid' => $this->objectid );
00314
00315 }
00316
00317
00318 function getAvailableRights()
00319 {
00320 return array( 'read',
00321 'write',
00322 'prop',
00323 'create_folder',
00324 'create_file',
00325 'create_link',
00326 'create_page',
00327 'delete',
00328 'release',
00329 'publish',
00330 'grant',
00331 'transmit' );
00332
00333 }
00334
00335
00339 function getMask()
00340 {
00341
00342 $this->mask = ACL_READ;
00343 $this->mask += ACL_WRITE *intval($this->write );
00344 $this->mask += ACL_PROP *intval($this->prop );
00345 $this->mask += ACL_DELETE *intval($this->delete );
00346 $this->mask += ACL_RELEASE *intval($this->release );
00347 $this->mask += ACL_PUBLISH *intval($this->publish );
00348 $this->mask += ACL_CREATE_FOLDER *intval($this->create_folder);
00349 $this->mask += ACL_CREATE_FILE *intval($this->create_file );
00350 $this->mask += ACL_CREATE_LINK *intval($this->create_link );
00351 $this->mask += ACL_CREATE_PAGE *intval($this->create_page );
00352 $this->mask += ACL_GRANT *intval($this->grant );
00353 $this->mask += ACL_TRANSMIT *intval($this->transmit );
00354 Logger::trace('mask of acl'.$this->aclid.': '.$this->mask );
00355 return $this->mask;
00356 }
00357
00358
00359 function getTrueProperties()
00360 {
00361 $erg = array('read');
00362 if ( $this->write ) $erg[] = 'write';
00363 if ( $this->prop ) $erg[] = 'prop';
00364 if ( $this->create_folder ) $erg[] = 'create_folder';
00365 if ( $this->create_file ) $erg[] = 'create_file';
00366 if ( $this->create_link ) $erg[] = 'create_link';
00367 if ( $this->create_page ) $erg[] = 'create_page';
00368 if ( $this->delete ) $erg[] = 'delete';
00369 if ( $this->release ) $erg[] = 'release';
00370 if ( $this->publish ) $erg[] = 'publish';
00371 if ( $this->grant ) $erg[] = 'grant';
00372 if ( $this->transmit ) $erg[] = 'transmit';
00373
00374 return $erg;
00375 }
00376
00377
00378 function delete()
00379 {
00380 $db = db_connection();
00381
00382 $sql = new Sql( 'DELETE FROM {t_acl} '.
00383 ' WHERE id = {aclid} '.
00384 ' AND objectid= {objectid}' );
00385
00386 $sql->setInt('aclid' ,$this->aclid );
00387 $sql->setInt('objectid',$this->objectid);
00388
00389 $db->query( $sql->query );
00390
00391 $this->aclid = 0;
00392 }
00393
00394
00395 function add()
00396 {
00397 if ( $this->delete )
00398 $this->prop = true;
00399
00400 $db = db_connection();
00401
00402 $sql = new Sql('SELECT MAX(id) FROM {t_acl}');
00403 $this->aclid = intval($db->getOne($sql->query))+1;
00404
00405 $sql = new Sql( 'INSERT INTO {t_acl} '.
00406 ' (id,userid,groupid,objectid,is_write,is_prop,is_create_folder,is_create_file,is_create_link,is_create_page,is_delete,is_release,is_publish,is_grant,is_transmit,languageid)'.
00407 ' VALUES( {aclid},{userid},{groupid},{objectid},{write},{prop},{create_folder},{create_file},{create_link},{create_page},{delete},{release},{publish},{grant},{transmit},{languageid} )' );
00408
00409 $sql->setInt('aclid' ,$this->aclid );
00410 $sql->setInt('objectid',$this->objectid);
00411
00412 if ( intval($this->groupid) == 0 )
00413 $sql->setNull('groupid');
00414 else
00415 $sql->setInt ('groupid',$this->groupid);
00416
00417 if ( intval($this->userid) == 0 )
00418 $sql->setNull('userid');
00419 else
00420 $sql->setInt ('userid',$this->userid);
00421
00422 $sql->setBoolean('is_default' ,$this->isDefault );
00423 $sql->setBoolean('prop' ,$this->prop );
00424 $sql->setBoolean('write' ,$this->write );
00425 $sql->setBoolean('delete' ,$this->delete );
00426 $sql->setBoolean('release' ,$this->release );
00427 $sql->setBoolean('publish' ,$this->publish );
00428 $sql->setBoolean('grant' ,$this->grant );
00429 $sql->setBoolean('transmit' ,$this->transmit );
00430 $sql->setBoolean('create_folder',$this->create_folder );
00431 $sql->setBoolean('create_file' ,$this->create_file );
00432 $sql->setBoolean('create_link' ,$this->create_link );
00433 $sql->setBoolean('create_page' ,$this->create_page );
00434
00435 if ( intval($this->languageid) == 0 )
00436 $sql->setNull('languageid');
00437 else $sql->setInt ('languageid',$this->languageid);
00438
00439 $db->query( $sql->query );
00440 }
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465 }