示例#1
0
 /**
  * 获得用户的 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;
 }
示例#2
0
 /**
  * 获得用户的 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;
 }
示例#3
0
 /**
  * 执行上传文件
  *
  * @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);
     }
 }