| 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 { }
|
updated for some corrections in class AccessFile