/**
  * Main class methode
  * @return mixt null or error object in case of error;
  * @access public
  */
 function Execute()
 {
     if ($this->validReplacement === false) {
         $ret = new tNG_error("FOLDER_DEL_SECURITY_ERROR", array(), array($this->fullFolder, $this->baseFolder));
         return $ret;
     }
     $this->fullFolder = KT_realpath($this->baseFolder . $this->folder);
     // security
     if (substr($this->fullFolder, 0, strlen($this->baseFolder)) != $this->baseFolder) {
         $ret = new tNG_error("FOLDER_DEL_SECURITY_ERROR", array(), array($this->fullFolder, $this->baseFolder));
         return $ret;
     }
     $ret = null;
     if (!file_exists($this->fullFolder)) {
         return $ret;
     }
     $folder = new KT_Folder();
     // delete thumbnails;
     $folder->deleteFolderNR($this->fullFolder);
     if ($folder->hasError()) {
         $arr = $folder->getError();
         $ret = new tNG_error("FOLDER_DEL_ERROR", array($arr[0]), array($arr[1]));
         return $ret;
     }
     return $ret;
 }
 /**
  * contruct the SQL and execute it. it is using as value for the field the primarey key value from the transaction;
  * return mix null or error object;
  * @access public
  */
 function Execute()
 {
     $pk_value = $this->tNG->getPrimaryKeyValue();
     $pk_type = $this->tNG->getColumnType($this->tNG->getPrimaryKey());
     $pk_value = KT_escapeForSql($pk_value, $pk_type);
     if (count($this->fileRenameRule) > 0 || count($this->folderRenameRule) > 0) {
         $sql = 'SELECT * FROM ' . $this->table . ' WHERE ' . KT_escapeFieldName($this->field) . " = " . $pk_value;
         $rs = $this->tNG->connection->Execute($sql);
         if ($rs === false) {
             return new tNG_error('DEL_DR_SQL_ERROR', array(), array($this->tNG->connection->ErrorMsg(), $sql));
         }
         if ($rs->RecordCount() == 0) {
             return null;
         }
     }
     // prepare to delete files
     if (count($this->fileRenameRule) > 0) {
         $fullFileName = array();
         $fullFileNameFolder = array();
         for ($i = 0; $i < count($this->fileRenameRule); $i++) {
             while (!$rs->EOF) {
                 $arr = array();
                 foreach ($rs->fields as $col => $value) {
                     $arr[$col] = $value;
                 }
                 $folder = $this->fileFolder[$i];
                 $fileName = KT_DynamicData($this->fileRenameRule[$i], $this->tNG, '', false, $arr);
                 // security
                 if (substr(KT_realpath($folder . $fileName), 0, strlen($folder)) != $folder) {
                     $baseFileName = dirname(KT_realpath($folder . $fileName, false));
                     $ret = new tNG_error("FOLDER_DEL_SECURITY_ERROR", array(), array($baseFileName, $folder));
                     return $ret;
                 }
                 $fullFileName[] = $fileName;
                 $fullFileNameFolder[] = $folder;
                 $rs->MoveNext();
             }
             $rs->MoveFirst();
         }
     }
     // prepare to delete related folders
     if (count($this->folderRenameRule) > 0) {
         $relatedFolder = array();
         for ($i = 0; $i < count($this->folderRenameRule); $i++) {
             while (!$rs->EOF) {
                 $arr = array();
                 foreach ($rs->fields as $col => $value) {
                     $arr[$col] = $value;
                 }
                 $folder = $this->folder[$i];
                 $f = KT_DynamicData($this->folderRenameRule[$i], $this->tNG, '', false, $arr);
                 // security
                 if (substr(KT_realpath($folder . $f), 0, strlen($folder)) != $folder) {
                     $baseFileName = dirname(KT_realpath($folder . $f, false));
                     $ret = new tNG_error("FOLDER_DEL_SECURITY_ERROR", array(), array($baseFileName, $folder));
                     return $ret;
                 }
                 $relatedFolder[] = $folder . $f;
                 $rs->MoveNext();
             }
             $rs->MoveFirst();
         }
     }
     // delete reocords
     $sql = "DELETE FROM " . $this->table . " WHERE " . KT_escapeFieldName($this->field) . " = " . $pk_value;
     $ret = $this->tNG->connection->Execute($sql);
     if ($ret === false) {
         return new tNG_error('DEL_DR_SQL_ERROR', array(), array($this->tNG->connection->ErrorMsg(), $sql));
     }
     // delete files
     if (count($this->fileRenameRule) > 0) {
         for ($i = 0; $i < count($fullFileName); $i++) {
             if (file_exists($fullFileNameFolder[$i] . $fullFileName[$i])) {
                 $delRet = @unlink($fullFileNameFolder[$i] . $fullFileName[$i]);
                 $path_info = KT_pathinfo($fullFileNameFolder[$i] . $fullFileName[$i]);
                 $this->deleteThumbnails($path_info['dirname'] . '/thumbnails/', $path_info['basename']);
             }
         }
     }
     // delete related folder
     if (count($this->folderRenameRule) > 0) {
         for ($i = 0; $i < count($relatedFolder); $i++) {
             $folder = new KT_Folder();
             // delete thumbnails
             $folder->deleteFolderNR($relatedFolder[$i]);
         }
     }
     return null;
 }