/** * Delete a directory in database, but not in filesystem * @param string $tablename * @return boolean Returns TRUE on success or FALSE on failure. */ public function deleteOnlyDb($tablename = '') { if ($this->getId() <= 0) { throw sf_exception('error', 'directory_is_not_loaded'); return FALSE; } // check perm if ($this->hasPerm('delete') == FALSE) { throw sf_exception('error', 'permission_denied'); return FALSE; } //first delete sub files and directories try { // delete files of directory $filecol = sf_api('MODEL', 'FileSqlCollection'); $filecol->setIdclient($this->getField('idclient')); $filecol->setIdlang($this->getField('idlang')); $filecol->setFreefilter('area', $this->getField('area')); $filecol->setFreefilter('iddirectory', $this->getId()); $filecol->generate(); if ($filecol->getCount() > 0) { $iter = $filecol->getItemsAsIterator(); while ($iter->valid()) { $file = $iter->current(); //echo "delete file ".$file->getField('filename')."<br />"; $file->delete(); $iter->next(); } } unset($filecol); // delete subdirectories $dircol = sf_api('MODEL', 'DirectorySqlCollection'); $dircol->setIdclient($this->getField('idclient')); $dircol->setIdlang($this->getField('idlang')); $dircol->setFreefilter('area', $this->getField('area')); $dircol->setFreefilter('parentid', $this->getId()); $dircol->generate(); if ($dircol->getCount() > 0) { $iter = $dircol->getItemsAsIterator(); while ($iter->valid()) { $directory = $iter->current(); //echo "delete directory ".$directory->getField('dirname')."<br />"; $directory->delete(); $iter->next(); } } unset($dircol); } catch (Exception $e) { // TODO collect the recursive exeptions and create a new one in the top item //echo $e->getMessage()."<br />"; } // delete sql item if (parent::delete($tablename) == FALSE) { throw sf_exception('error', 'delete_directory_from_db_failed', array('dirname' => $fields['dirname'])); return FALSE; } // delete rights if ($this->deleteAllPerms() == FALSE) { throw sf_exception('warning', 'delete_rights_failed', array('dirname' => $this->getField('dirname'))); return FALSE; } return TRUE; }
/** * Delete a file in database, but not in filesystem * @param string $tablename * @return boolean Returns TRUE on success or FALSE on failure. */ public function deleteOnlyDb($tablename = '') { if ($this->getId() <= 0) { throw sf_exception('error', 'file_is_not_loaded'); return FALSE; } // check perm with source directory as parent_id if ($this->hasPerm('delete') == FALSE) { throw sf_exception('error', 'permission_denied'); return FALSE; } // delete sql item if (parent::delete($tablename) == FALSE) { throw sf_exception('error', 'delete_file_from_db_failed', array('filename' => $this->getField('filename'))); return FALSE; } // delete rights if ($this->deleteAllPerms() == FALSE) { throw sf_exception('warning', 'delete_rights_failed', array('filename' => $this->getField('filename'))); return FALSE; } return TRUE; }