00001 <?php
00002
00012 abstract class Snap2 extends SObject {
00014 const ROOT_DIR_ID = 1;
00016 const DELETED_DIR_ID = 2;
00017
00018 private static $ROOT_DIR = null;
00019 private static $DELETED_DIR = null;
00020
00021 private static $USE_CACHE;
00022 private static $USE_APC;
00023
00024 private static $LDAP = null;
00025 private static $CURRENT_UID = false;
00026
00027 public static $IS_INIT = false;
00028 public static $IS_ADMIN = false;
00029
00030 public static $MEDIA_PATH;
00031
00038 public static function init() {
00039 $SERVER = SConfig::getDefault('snap2.server');
00040 $USER = SConfig::getDefault('snap2.user');
00041 $db_user = SConfig::getDefault("snap2.$SERVER.$USER.dbuser");
00042 $db_pass = SConfig::getDefault("snap2.$SERVER.$USER.dbpass");
00043 $db_host = SConfig::getDefault("snap2.$SERVER.dbhost");
00044 $db_name = SConfig::getDefault("snap2.$SERVER.dbname");
00045
00046 self::$USE_CACHE = SConfig::getDefault('snap2.useCache');
00047 self::$USE_APC = SConfig::getDefault('snap2.useApc');
00048
00049 if(!SnapDBI::connect($db_user, $db_pass, $db_host, $db_name)) {
00050 self::$IS_INIT = null;
00051 self::setStaticError('Failed to connect to database!');
00052 return false;
00053 }
00054
00055 SnapCache::init(self::$USE_CACHE, self::$USE_APC);
00056
00057 self::$MEDIA_PATH = SConfig::getDefault("snap2.$SERVER.mediaPath");
00058
00059 include(dirname(__FILE__) . '/../content/contentModules.php5');
00060
00061 self::$IS_INIT = true;
00062
00063 if($USER == 'admin')
00064 self::$IS_ADMIN = true;
00065
00066 return true;
00067 }
00068
00078 public static function reinit($user = false, $server = false) {
00079 SnapDBI::disconnect();
00080
00081 $SERVER = $server ? $server : SConfig::getDefault('snap2.server');
00082 $USER = $user ? $user : SConfig::getDefault('snap2.user');
00083 $db_user = SConfig::getDefault("snap2.$SERVER.$USER.dbuser");
00084 $db_pass = SConfig::getDefault("snap2.$SERVER.$USER.dbpass");
00085 $db_host = SConfig::getDefault("snap2.$SERVER.dbhost");
00086 $db_name = SConfig::getDefault("snap2.$SERVER.dbname");
00087
00088 self::$USE_CACHE = SConfig::getDefault('snap2.useCache');
00089 self::$USE_APC = SConfig::getDefault('snap2.useApc');
00090
00091 if(!SnapDBI::connect($db_user, $db_pass, $db_host, $db_name)) {
00092 self::$IS_INIT = null;
00093 self::setStaticError('Failed to connect to database!');
00094 return false;
00095 }
00096
00097
00098 self::$MEDIA_PATH = SConfig::getDefault("snap2.$SERVER.mediaPath");
00099
00100 if(!self::$IS_INIT) {
00101 SnapCache::init(self::$USE_CACHE, self::$USE_APC);
00102 include(dirname(__FILE__) . '/../content/contentModules.php5');
00103 self::$IS_INIT = true;
00104 }
00105
00106 if($USER == 'admin')
00107 self::$IS_ADMIN = true;
00108
00109 return true;
00110 }
00111
00119 public static function isAdmin() {
00120 return self::$IS_ADMIN;
00121 }
00122
00130 public static function checkInit() {
00131 if(self::$IS_INIT === true)
00132 return true;
00133
00134 if(self::$IS_INIT === null) {
00135 self::setStaticError('Snap2 is not initialized!');
00136 return false;
00137 }
00138
00139 return self::init();
00140 }
00141
00151 public static function setEnableCache($enable, $clear = false) {
00152 self::$USE_CACHE = $enable;
00153 SnapCache::setEnableCache($enable, $clear);
00154 }
00155
00166 public static function setEnableAPC($enable) {
00167 self::$USE_APC = $enable;
00168 SnapCache::setEnableAPC($enable);
00169 }
00170
00181 public static function getLDAP() {
00182 if(self::$LDAP == null) {
00183 if(!isset($GLOBALS['SWAT'])) {
00184 self::setStaticError('No SWAT object to get auth module from!');
00185 self::$CURRENT_UID = null;
00186 return false;
00187 }
00188 global $SWAT;
00189 $guser = $SWAT->getGlobalUser();
00190 if(!$guser) {
00191 self::setStaticError('No global user in SWAT!');
00192 self::$CURRENT_UID = null;
00193 return false;
00194 }
00195 self::$LDAP = $guser->getAuthModule('ldap');
00196 }
00197
00198 return (self::$LDAP ? self::$LDAP : false);
00199 }
00200
00205 public static function getCurrentUser() {
00206 if(self::$CURRENT_UID === false) {
00207 self::getLDAP();
00208 if(!self::$LDAP) {
00209 self::setStaticError('No Ldap auth module!');
00210 self::$CURRENT_UID = null;
00211 return false;
00212 }
00213 self::$CURRENT_UID = self::$LDAP->getUID();
00214 }
00215
00216 return (self::$CURRENT_UID !== null ? self::$CURRENT_UID : false);
00217 }
00218
00219 public static function getMediaURLBase() {
00220 if(self::$MEDIA_PATH{0} != '/')
00221 return '/' . self::$MEDIA_PATH;
00222 else
00223 return self::$MEDIA_PATH;
00224 }
00225
00226 public static function getMediaPathBase() {
00227 if(substr(self::$MEDIA_PATH, 0, 1) == '~' || substr(self::$MEDIA_PATH, 0, 2) == '/~')
00228 return preg_replace('!^/?~([^/]*)/(.*)$!', '/home/$1/public_html/$2', self::$MEDIA_PATH);
00229 else
00230 return $_SERVER['DOCUMENT_ROOT'] . '/' . self::$MEDIA_PATH;
00231 }
00232
00239 public static function getRootDirectory() {
00240 if(self::$ROOT_DIR == null) {
00241 self::$ROOT_DIR = SnapDirectory::retrieve(1);
00242 }
00243 return self::$ROOT_DIR;
00244 }
00245
00252 public static function getDeletedDirectory() {
00253 if(self::$DELETED_DIR == null) {
00254 self::$DELETED_DIR = SnapDirectory::retrieve(2);
00255 }
00256 return self::$DELETED_DIR;
00257 }
00258
00268 public static function lookup($path) {
00269 if(substr($path, -1) == '/')
00270 return SnapDirectory::lookup($path);
00271 else if(strpos($path, '@') !== false)
00272 return SnapVersion::lookup($path);
00273 else
00274 return SnapResource::lookup($path);
00275 }
00276
00285 public static function pathParts($path) {
00286 if(!preg_match('!^(//|/DELETED/)$|^(/|/DELETED)(/[a-zA-Z0-9_\-\$]+)+(/|@([0-9]+|active|dev|live))?$!', $path))
00287 return false;
00288
00289 if($path == '//')
00290 return array('type' => 'Directory', 'dirname' => '', 'basename' => '', 'dirparts' => array(''));
00291 else if($path == '/DELETED/')
00292 return array('type' => 'Directory', 'dirname' => '', 'basename' => 'DELETED', 'dirparts' => array('DELETED'));
00293
00294 if(substr($path, -1) == '/')
00295 $lastPart = 'dir';
00296 else
00297 $lastPart = 'nodir';
00298 $baseParts = explode('/', $path);
00299
00300 $ret = array('type' => '', 'dirname' => '/', 'basename' => '', 'dirparts' => array());
00301 $upTo = ($lastPart == 'dir' ? count($baseParts) - 2 : count($baseParts) - 1);
00302 for($i = 1; $i < $upTo; $i++) {
00303 $ret['dirname'] .= $baseParts[$i] . '/';
00304 $ret['dirparts'][] = $baseParts[$i];
00305 }
00306
00307 if($lastPart == 'dir') {
00308 $ret['dirparts'][] = $baseParts[$upTo];
00309 $ret['basename'] = $baseParts[$upTo];
00310 $ret['type'] = 'Directory';
00311 }
00312 else {
00313 $ret['basename'] = $baseParts[$upTo];
00314 if(strpos($path, '@') !== false) {
00315 $info = explode('@', $baseParts[$upTo]);
00316 $ret['resource'] = $info[0];
00317 $ret['version'] = $info[1];
00318 $ret['type'] = 'Version';
00319 }
00320 else
00321 $ret['type'] = 'Resource';
00322 }
00323
00324 return $ret;
00325 }
00326
00335 public static function dirname($path) {
00336 $res = self::pathParts($path);
00337 if($res)
00338 return $res['dirname'];
00339 else
00340 return false;
00341 }
00342
00351 public static function basename($path) {
00352 $res = self::pathParts($path);
00353 if($res)
00354 return $res['basename'];
00355 else
00356 return false;
00357 }
00358
00367 public static function pathType($path) {
00368 $res = self::pathParts($path);
00369 if($res)
00370 return $res['type'];
00371 else
00372 return false;
00373 }
00374
00376 public static function consistencyCheck() {
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388 }
00389 }
00390
00391 ?>