/** * 彻底删除文件 * 根据{id}递归删除自目录 * 根据{id}找出文件的{version_id},把文件引用数减1 * 根據{id}删除fileMeta * 根据{id}删除file * @param $fileIds * @param $force * @return boolean */ public function deletedFile($fileIds, $force = false) { if ($fileIds === '' && strlen($fileIds) <= 0) { return 0; } $ids = ''; $arr = array(); $data = $this->findAll("id in(" . $fileIds . ")"); $list = array(); $device_id = Yii::app()->session["deviceId"]; foreach ($data as $key => $value) { // // 递归删除所有子文件 // $moreData = $this->findAll("user_id=:type1 and file_path like :type2", array('type1' => $value['user_id'], 'type2' => $value['file_path'] . "%")); foreach ($moreData as $k => $v) { if ($v['is_deleted'] == 0 || $v['is_deleted'] == -1) { $user_id = $v['user_id']; $path = $v['file_path']; $context = $path; $event_uuid = MiniUtil::getEventRandomString(46); $action = 1; // 修改文件 $share_filter = MSharesFilter::init(); $share_filter->handlerCheckByFile($user_id, $v); if ($v['file_type'] == 0) { // // 如果是文件,需要创建版本 // $user = Yii::app()->session['user']; $device = UserDevice::model()->findByUserIdAndType($user['id'], CConst::DEVICE_WEB); $deviceName = $device["user_device_name"]; $this->_saveFileMeta($path, $v['version_id'], $user['id'], $user['name'], CConst::DELETE, $deviceName, $v['file_size']); } MiniEvent::getInstance()->createEvent($user_id, $device_id, $action, $path, $context, $event_uuid, $share_filter->type); $share_filter->handlerAction($action, $device_id, $path, $context); // // 删除共享目录 // if ($v['file_type'] == 2 || $v['file_type'] == 3) { $handler = new ShareManager(); $handler->_userId = $share_filter->operator; $handler->_id = $v['id']; try { $handler->invoke(ShareManager::CANCEL_SHARED); } catch (Exception $e) { } } } $id = $v['id']; if (in_array($id, $arr)) { // 排除重复 continue; } if ($v['file_type'] == 0) { array_push($list, $v['version_id']); } if (strlen($ids) > 0) { $ids = $ids . ","; } array_push($arr, $id); $ids = $ids . $id; } } // // 更新文件版本引用次数 // $version = new FileVersion(); $version->updateRefCountByIds($list); //删除共享文件信息 MiniLink::getInstance()->unlink($ids); FileStar::model()->deleteAll('id in (:ids)', array(':ids' => $ids)); //后台管理员台实现逻辑 $value = $this->deleteAll("id in(" . $ids . ")"); return $value; }
/** * * 删除用户相关信息 * @userIds 用户列表{1,2,3,4,5}这样的格式 */ public function deleteUsers($userIds) { if ($userIds != '' && strlen($userIds) > 0) { $ids = explode(',', $userIds); $userFile = new UserFile(); foreach ($ids as $id) { // 删除用户共享文件 $userFile->deleteSharedFolders($id); //删除所有标签信息 Tag::model()->deleteUserAllTag($id); //删除我的最爱文件 FileStar::model()->deleteUserAllStar($id); } //删除用户的文件信息 $userFile->deleteUserFile($userIds); //删除用户的群组部门关系 MiniUserGroupRelation::getInstance()->deleteUserRelation($userIds); //删除用户的事件信息 MiniEvent::getInstance()->deleteByIds($userIds); //删除用户Meta以及用户自己 foreach ($ids as $id) { //删除用户自身 MiniUser::getInstance()->deleteUser($id); } } }
/** * * 删除我的最爱 * @param int $slave * @param string $path */ private function handlerDeleteMyFavorate($slave, $path) { $conditions = 'user_id = :user_id and file_id in ( SELECT id FROM ' . UserFile::model()->tableName() . ' WHERE file_path like :file_path)'; FileStar::model()->deleteAll($conditions, array(':user_id' => $slave, ':file_path' => $path . '/%')); }
/** * 删除回收站所有记录, 但保留源数据 * @since 1.0.0 * by Kindac */ private function handleSuperClean() { $this->fromIds = $this->getTrashList(); if (empty($this->fromIds)) { $this->handleResult(TRUE, 0, Yii::t('api_message', 'action_success')); Yii::app()->end(); } $files = UserFile::model()->getFilesByIds($this->fromIds, 1); // $files = UserFile::model()->findAllByAttributes(array("user_id" => $this->_userId, "is_deleted" => 1)); $ids = array(); foreach ($files as $file) { array_push($ids, $file["id"]); // // 将文件的版本引用次数减1 // if ($file['file_type'] == 0) { MiniVersion::getInstance()->updateRefCount($file['version_id'], FALSE); } } $ids = join(",", $ids); // 我的最爱和分享都删除 $value = 0; if (!empty($ids)) { FileStar::model()->deleteAll('id in (' . $ids . ')'); MiniLink::getInstance()->unlink($ids); $value = UserFile::model()->updateAll(array("is_deleted" => -1), "id in ({$ids})"); } if ($value >= 0) { $this->handleResult(TRUE, 0, Yii::t('api_message', 'action_success')); } }