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