/** * 获得用户的 ACL 数据 * * @param QDB_ActiveRecord_Abstract $obj * @param string $acldata_props * * @return array */ function getAclData(QDB_ActiveRecord_Abstract $obj, $acldata_props = null) { if (is_null($acldata_props)) { $acldata_props = $this->_settings['acldata_props']; } $acldata_props = Q::normalize($acldata_props); $data = array(); foreach ($acldata_props as $pn) { $data[$pn] = $obj->{$pn}; } $data['id'] = $obj->id(); return $data; }
/** * 获得用户的 ACL 数据 * * ACL 数据一般包含用户 ID 和用户名,通常用于配合 QACL 实现基于角色的访问控制。 * * 用法: * @code php * $data = $member->aclData(); * dump($data); * @endcode * * 要返回的数据由 acl_data_props 设置来指定。不过不管指定了哪些属性,aclData() * 的返回结果中总是为包含名为 id 的键。该键的值是用户对象的 ID。 * * 也可以在获得 ACL 数据时通过 $props 参数指定要返回的属性值: * @code php * $data = $member->aclData('email, addr'); * @endcode * * @param QDB_ActiveRecord_Abstract $member 用户对象 * @param string $props 要返回的属性值 * * @return array 包含指定属性值的数组 */ function aclDataDyn(QDB_ActiveRecord_Abstract $member, $props = null) { if (!$props) { $props = $this->_settings['acl_data_props']; } $props = Q::normalize($props); $data = array(); foreach ($props as $pn) { $data[$pn] = $member[$pn]; } $data['id'] = $member->id(); return $data; }
/** * 执行上传文件 * * @param QDB_ActiveRecord_Abstract $obj */ function _exec_upload(QDB_ActiveRecord_Abstract $obj) { if (empty($this->_settings['upload_config'])) { return; } $uploader = new Helper_Uploader(); $error = array(); foreach ($this->_settings['upload_config'] as $file_id => $config) { //必需 $post_key = isset($config['post_key']) ? $config['post_key'] : $file_id; if (!$uploader->existsFile($post_key)) { if (isset($config['required']) && $config['required']) { if ($obj->id() && !empty($obj->{$file_id})) { $obj->willChanged($file_id); } else { $error[$post_key]['required'] = $config['errmsgs']['required']; } } continue; } $file = $uploader->file($post_key); $filename = $file->filename(); $extname = $file->extname(); // 验证文件类型 if (isset($config['allowed_filetypes']) && $config['allowed_filetypes']) { if (!$file->isValid($config['allowed_filetypes'])) { $error[$post_key]['allowed_filetypes'] = $config['errmsgs']['allowed_filetypes']; continue; } } else { if ($file->isValid('.php')) { $error[$post_key]['allowed_filetypes'] = "PHP 文件是不允许上传的."; continue; } } //验证文件大小 if (isset($config['max_size']) && $config['max_size'] > 0) { if ($file->filesize() > $config['max_size'] * 1024) { $error[$post_key]['max_size'] = $config['errmsgs']['max_size']; continue; } } // 验证图片尺寸 if (isset($config['image_dimension']) && $config['image_dimension']) { list($width, $height, $type, $attr) = getimagesize($file->filepath()); if (!$width || !$height) { continue; } list($dim_width, $dim_height) = explode('*', $config['image_dimension']); if (isset($dim_width) && $dim_width > 0 && $dim_width != $width || isset($dim_height) && $dim_height > 0 && $dim_height != $height) { $error[$post_key]['image_dimension'] = $config['errmsgs']['image_dimension']; continue; } } $dir = rtrim($config['upload_dir'], '/\\') . DS; $date = date('Y-m'); $dest_dir = $dir . $date; Helper_Filesys::mkdirs($dest_dir); $md5 = md5($filename . '-' . microtime(true)); $_prop_filename = ''; //如果上图片 if (isset($config['is_image']) && $config['is_image'] || isset($config['large']) || isset($config['thumb'])) { $pic_filename = $md5 . '.jpg'; $image = Helper_Image::createFromFile($file->filepath(), $file->extname()); // 生成大图 if (isset($config['large'])) { list($w, $h) = explode('*', $config['large']); $image->crop($w, $h); } $image->saveAsJpeg($dest_dir . DS . $pic_filename); $_prop_filename = "{$date}/{$pic_filename}"; // 生成缩略图 if (isset($config['thumb'])) { $thumb_filename = $md5 . '-thumb.jpg'; list($w, $h) = explode('*', $config['thumb']); $image->crop($w, $h); $image->saveAsJpeg($dest_dir . DS . $thumb_filename); } // 销毁图片资源并删除上传文件 $image->destroy(); $file->unlink(); } else { $file_name = $md5 . '.' . $extname; $file->move($dest_dir . DS . $file_name); $_prop_filename = "{$date}/{$file_name}"; } //如果是更新,删除原有的 if ($obj->id() && !empty($obj->{$file_id})) { $this->_delete_upload_file($obj, $file_id); } //向属性负值 $obj->{$file_id} = $_prop_filename; } if (!empty($error)) { throw new QDB_ActiveRecord_ValidateFailedException($error, $obj); } }