Пример #1
0
 public function actionDeleteRecord()
 {
     $idObject = HU::post('idObject', null);
     $idInstance = HU::post('idInstance', null);
     try {
         if (!Yii::app()->authManager->checkObject(DaDbAuthManager::OPERATION_DELETE, Yii::app()->user->id, $idObject, $params = array('idInstance' => $idInstance))) {
             throw new Exception('Доступ на удаление ограничен.');
         }
         $object = DaObject::getById($idObject);
         if ($object == null) {
             throw new Exception('Некорректные параметры запроса (не найден объект=' . $idObject . ').');
         }
         $model = $object->getModel()->findByIdInstance($idInstance);
         if ($model == null) {
             throw new Exception('Некорректные параметры запроса (не найден экземпляр=' . $idInstance . ').');
         }
         if ($model->delete()) {
             HU::log_da("Удален (" . $object->getName() . ") id=" . $idInstance);
             echo CJSON::encode(array('message' => 'Данные успешно удалены.', 'idInstance' => $idInstance));
         } else {
             $c = $model->getCountChild();
             if ($c > 0) {
                 throw new Exception("Информация не удалена, т.к. присутствуют дочерние экземпляры (" . $c . ")");
             } else {
                 $dependentData = $model->getDependentData(true);
                 if (count($dependentData) > 0) {
                     // экземпляр не был удален. Выводим информацию о зависимых данных
                     $msg = "Информация не удалена, т.к. раздел участвует в других объектах:";
                     foreach ($dependentData as $idObj => $count) {
                         $obj = DaObject::getById($idObj);
                         $msg .= "\\n" . $obj->getName() . " (количество экземпляров: " . $count . ")";
                     }
                     throw new Exception($msg);
                 }
             }
         }
     } catch (Exception $e) {
         echo CJSON::encode(array('error' => $e->getMessage(), 'idInstance' => $idInstance));
     }
 }
Пример #2
0
 /**
  * Рекурсивное удаление файлов и папок
  *
  * @param string  Путь к директории, которую надо удалить
  * @param boolean Удалять ли директорию $dir в конце
  * @param boolean Вести лог при работе функции
  * @return boolean
  */
 public static function removeDirectoryRecursive($dir, $removeSelf = true, $log = false, $errorEnable = true, $excludeFiles = array())
 {
     if ($dir == null) {
         return false;
     }
     // если кто-то вызовет метод с пустым значением, то метод затерет все данные на диске
     $dir = self::addSlashPath($dir);
     if (strpos(self::normalizePath($dir), self::normalizePath(realpath(Yii::getPathOfAlias('webroot')))) === false) {
         // и ещё защита, чтоб случано не удалили файлы, которые расположены выше корня сайта
         return false;
     }
     if (!($handle = opendir($dir))) {
         if ($log) {
             HU::log_da('Не удалось открыть дирикторию (' . $dir . ')');
         }
         return false;
     }
     while ($entry = readdir($handle)) {
         if ($entry == ".." || $entry == ".") {
             continue;
         }
         if (is_dir($dir . $entry)) {
             self::removeDirectoryRecursive($dir . $entry, true, $log);
         } else {
             if (in_array($entry, $excludeFiles) || in_array($dir . $entry, $excludeFiles)) {
                 continue;
             }
             if (!unlink($dir . $entry)) {
                 if ($log) {
                     HU::log_da('Не удалось удалить файл (' . $dir . $entry . ')');
                 }
             }
         }
     }
     closedir($handle);
     if ($removeSelf) {
         if ($errorEnable && !rmdir($dir) || !$errorEnable && !@rmdir($dir)) {
             if ($log) {
                 HU::log_da('Не удалось удалить дирикторию (' . $dir . ')');
             }
             return false;
         }
     }
     return true;
 }