Revision 1949
Added by darkviper about 12 years ago
| AccessFile.php | ||
|---|---|---|
| 131 | 131 |
|
| 132 | 132 |
/** |
| 133 | 133 |
* Rename an existing Accessfile |
| 134 |
* @param string the new filename without path and without extension
|
|
| 134 |
* @param string $sNewName the new filename without path and without extension
|
|
| 135 | 135 |
* @return boolean |
| 136 | 136 |
* @throws AccessFileInvalidFilenameException |
| 137 | 137 |
* @throws AccessFileAlreadyExistsException |
| ... | ... | |
| 140 | 140 |
public function rename($sNewName) |
| 141 | 141 |
{
|
| 142 | 142 |
// sanitize new filename |
| 143 |
if (!preg_match('/[^\.\\\/]*/si', $sNewName)) {
|
|
| 144 |
throw new AccessFileInvalidFilenameException('invalid filename [' . $sNewName . ']');
|
|
| 143 |
if (!preg_match('/[^\.\\ \/]*/si', $sNewName)) {
|
|
| 144 |
throw new AccessFileInvalidFilenameException('invalid filename [' . str_replace($this->_oReg->AppPath, '', $sNewName) . ']');
|
|
| 145 | 145 |
} |
| 146 | 146 |
// prepare old/new file-/dirname |
| 147 |
$sOldFilename = $this->_sFileName; |
|
| 147 |
$sOldFilename = $this->_sFileName;
|
|
| 148 | 148 |
$sOldSubDirname = dirname($sOldFilename) . '/'; |
| 149 |
$sBaseDirname = dirname($sOldSubDirname) . '/'; |
|
| 149 | 150 |
$sPattern = '/^(' . preg_quote($sOldSubDirname, '/') . ')([^\/\.]+?)(\.[a-z0-9]+)$/siU';
|
| 150 | 151 |
$sNewFilename = preg_replace($sPattern, '\1' . $sNewName . '\3', $sOldFilename); |
| 151 | 152 |
$sNewSubDirname = dirname($sNewFilename) . '/'; |
| 152 | 153 |
if (file_exists($sNewFilename) || file_exists($sNewSubDirname)) {
|
| 153 |
// check if new filename already exists
|
|
| 154 |
throw new AccessFileAlreadyExistsException('new file/dirname already exists [' . $sNewName . ']');
|
|
| 154 |
// if new filename or directory already exists
|
|
| 155 |
throw new AccessFileAlreadyExistsException('new file/dirname already exists [' . str_replace($this->_oReg->AppPath, '', $sNewName) . ']');
|
|
| 155 | 156 |
} |
| 156 |
// try to rename a depending subdirectory
|
|
| 157 |
$bSubdirRenamed = false;
|
|
| 158 |
$bRetval = true;
|
|
| 159 |
if (file_exists($sOldSubDirname))
|
|
| 160 |
{
|
|
| 161 |
// old subdir exists but is it writeable?
|
|
| 162 |
if (($bRetval = is_writable($sOldSubDirname)))
|
|
| 157 |
if(!is_writeable($sOldFilename)) {
|
|
| 158 |
throw new AccessFileRenameException('unable to rename file or file not exists [' . str_replace($this->_oReg->AppPath, '', $sOldFilename) . ']');
|
|
| 159 |
}
|
|
| 160 |
$bSubdirRenamed = false; // set default value
|
|
| 161 |
if(file_exists($sOldSubDirname))
|
|
| 162 |
{ //
|
|
| 163 |
if(is_writeable($sOldSubDirname))
|
|
| 163 | 164 |
{
|
| 164 |
if (rename($sOldSubDirname, $sNewSubDirname)) {
|
|
| 165 |
$bRetval = $bSubdirRenamed = true;
|
|
| 165 |
if(!( $bSubdirRenamed = rename($sOldSubDirname, $sNewSubDirname))) {
|
|
| 166 |
throw new AccessFileRenameException('unable to rename directory [' . str_replace($this->_oReg->AppPath, '', $sOldSubDirname) . ']');
|
|
| 166 | 167 |
} |
| 168 |
} else {
|
|
| 169 |
throw new AccessFileRenameException('directory is not writeable [' . str_replace($this->_oReg->AppPath, '', $sOldSubDirname) . ']');
|
|
| 167 | 170 |
} |
| 168 | 171 |
} |
| 169 |
if (!$bRetval) {
|
|
| 170 |
// if old subdir exists and renaming failed |
|
| 171 |
throw new AccessFileRenameException('unable to rename directory [' . $sOldSubDirname . ']');
|
|
| 172 |
// try to rename accessfile |
|
| 173 |
if(!rename($sOldFilename, $sNewFilename)) {
|
|
| 174 |
if($bSubdirRenamed) { rename($sNewSubDirname, $sOldSubDirname); }
|
|
| 175 |
throw new AccessFileRenameException('unable to rename file [' . str_replace($this->_oReg->AppPath, '', $sOldFilename) . ']');
|
|
| 172 | 176 |
} |
| 173 |
if (($bRetval = is_writeable($this->_sFileName))) {
|
|
| 174 |
// try to rename accessfile |
|
| 175 |
$bRetval = rename($sOldFilename, $sNewFilename); |
|
| 176 |
} |
|
| 177 |
if (!$bRetval) |
|
| 178 |
{
|
|
| 179 |
if ($bSubdirRenamed) {
|
|
| 180 |
// on error undo renaming of subdir |
|
| 181 |
rename($sNewSubDirname, $sOldSubDirname); |
|
| 182 |
} |
|
| 183 |
throw new AccessFileRenameException('unable to rename file [' . $sOldFilename . ']');
|
|
| 184 |
} |
|
| 177 |
return true; |
|
| 185 | 178 |
} |
| 186 | 179 |
|
| 187 | 180 |
/** |
| ... | ... | |
| 337 | 330 |
{
|
| 338 | 331 |
$sFileContent |
| 339 | 332 |
= '<?php' . "\n" |
| 340 |
. '// *** This file is generated by ' . $this->_oReg->AppName
|
|
| 341 |
. ' Ver.' . $this->_oReg->AppVersion |
|
| 342 |
. ($this->_oReg->AppServicePack != '' ? $this->_oReg->AppServicePack : '') |
|
| 333 |
. '// *** This file was created automatically by ' ."\n"
|
|
| 334 |
. '// *** ' . $this->_oReg->AppName . ' Ver.' . $this->_oReg->AppVersion
|
|
| 335 |
. ($this->_oReg->AppServicePack != '' ? ' '.$this->_oReg->AppServicePack : '')
|
|
| 343 | 336 |
. ' Rev.' . $this->_oReg->AppRevision . "\n" |
| 344 |
. '// *** Creation date: ' . date('c') . "\n"
|
|
| 345 |
. '// *** Do not modify this file manually' . "\n" |
|
| 346 |
. '// *** This file will be rebuild from time to time!!' . "\n" |
|
| 347 |
. '// *** Then all manual changes will get lost!! ' . "\n" |
|
| 348 |
. '// *************************************************' . "\n"; |
|
| 337 |
. '// *** on ' . date('c') . "\n"
|
|
| 338 |
. '//' . "\n" |
|
| 339 |
. '// *** Warning *************************************' . "\n" |
|
| 340 |
. '// *** Please do not manually change this file!' . "\n" |
|
| 341 |
. '// *** It will be recreated from time to time and' . "\n" |
|
| 342 |
. '// *** then all manual changes will get lost!!' . "\n" |
|
| 343 |
. '// *************************************************' . "\n" |
|
| 344 |
. '//' . "\n"; |
|
| 349 | 345 |
foreach ($this->_aVars as $sKey => $sVar) {
|
| 350 | 346 |
$sFileContent .= "\t" . '$' . $sKey . ' = ' . $sVar . ';' . "\n"; |
| 351 | 347 |
} |
| 352 | 348 |
foreach ($this->_aConsts as $sKey => $sVar) {
|
| 353 |
$sFileContent .= "\t" . 'define(\'' . $sKey . '\', ' . $sVar . '); // *deprecated command*' . "\n";
|
|
| 349 |
$sFileContent .= "\t" . 'define(\'' . $sKey . '\', ' . $sVar . '); // ** deprecated command **' . "\n";
|
|
| 354 | 350 |
} |
| 355 | 351 |
$sFileContent |
| 356 |
.= "\t" . 'require(\'' . $sIndexFile . '\');' . "\n" |
|
| 352 |
.="\t" . 'require(\'' . $sIndexFile . '\');' . "\n" |
|
| 353 |
. "\t" . 'exit(0);' . "\n" |
|
| 357 | 354 |
. '// *************************************************' . "\n" |
| 358 | 355 |
. '// end of file' . "\n"; |
| 359 | 356 |
|
| ... | ... | |
| 381 | 378 |
class AccessFileException extends Exception { }
|
| 382 | 379 |
class AccessFileConstForbiddenException extends AccessFileException { }
|
| 383 | 380 |
class AccessFileInvalidFilePathException extends AccessFileException { }
|
| 381 |
class AccessFileInvalidFilenameException extends AccessFileException { }
|
|
| 384 | 382 |
class AccessFileAlreadyExistsException extends AccessFileException { }
|
| 385 | 383 |
class AccessFileNotWriteableException extends AccessFileException { }
|
| 386 | 384 |
class AccessFileIsInvalidFilenameException extends AccessFileException { }
|
| 387 | 385 |
class AccessFileIsNoAccessfileException extends AccessFileException { }
|
| 388 | 386 |
class AccessFileInvalidStructureException extends AccessFileException { }
|
| 387 |
class AccessFileRenameException extends AccessFileException { }
|
|
Also available in: Unified diff
updated for some corrections in class AccessFile