rabin il y a 6 ans
Parent
commit
a3048023c6
5 fichiers modifiés avec 317 ajouts et 16 suppressions
  1. 215 0
      database/level_log.php
  2. 21 0
      database/level_type.php
  3. 5 11
      database/user_level.php
  4. 8 5
      lib/Core.php
  5. 68 0
      lib/Level.php

+ 215 - 0
database/level_log.php

@@ -0,0 +1,215 @@
+<?php
+
+$level = function()
+{
+	$array = array();
+	$info = Dever::db('score/level')->state();
+	if($info)
+	{
+		$array += $info;
+	}
+	return $array;
+};
+
+$type_id = function()
+{
+    $array = array();
+    $info = Dever::db('score/level_type')->state();
+    if($info)
+    {
+        $array += $info;
+    }
+    return $array;
+};
+
+
+$status = array
+(
+    1 => '收入',
+    2 => '支出',
+);
+
+# 手动升级时,如果需要用户手动来触发升级则需要本表
+return array
+(
+	# 表名
+	'name' => 'level_log',
+	# 显示给用户看的名称
+	'lang' => '用户等级请求日志',
+	'order' => 10,
+	'menu' => false,
+	# 数据结构
+	'struct' => array
+	(
+		'id' 		=> array
+		(
+			'type' 		=> 'int-11',
+			'name' 		=> 'ID',
+			'default' 	=> '',
+			'desc' 		=> '',
+			'match' 	=> 'is_numeric',
+		),
+
+		'uid'		=> array
+		(
+			'type' 		=> 'int-11',
+			'name' 		=> '用户名',
+			'default' 	=> '0',
+			'desc' 		=> '请选择用户',
+			'match' 	=> 'is_numeric',
+			//'update'	=> 'select',
+			//'search'	=> 'select',
+			'search'    => array
+            (
+                'api' => 'passport/user-all',
+                'col' => 'username',
+                'result' => 'id',
+            ),
+			'list'		=> '{uid} > 0 ? Dever::load("passport/user-one#username", {uid}) : "匿名用户"',
+		),
+
+		'level_type_id'       => array
+        (
+            'type'      => 'int-11',
+            'name'      => '等级类别',
+            'default'   => '1',
+            'desc'      => '等级类别',
+            'match'     => 'is_numeric',
+            'update'    => 'select',
+            'option'    => $type_id,
+            'search'    => 'select',
+            'list'        => true,
+        ),
+
+		'level_id'		=> array
+		(
+			'type' 		=> 'int-11',
+			'name' 		=> '等级名称',
+			'default' 	=> '1',
+			'desc' 		=> '等级名称',
+			'match' 	=> 'is_numeric',
+			'update'	=> 'select',
+			'option'	=> $level,
+			'search'	=> 'select',
+			'list'		=> true,
+			'edit'		=> true,
+		),
+
+		'status'        => array
+        (
+            'type'      => 'tinyint-1',
+            'name'      => '收入支出状态',
+            'default'   => '1',
+            'desc'      => '收入支出状态',
+            'match'     => 'is_numeric',
+            'update'    => 'select',
+            'option'    => $status,
+            //'search'  => 'select',
+            'list'      => true,
+            //'edit'        => true,
+        ),
+
+		'num'		=> array
+		(
+			'type' 		=> 'varchar-80',
+			'name' 		=> '增加积分数-如果为负数,则是减少积分',
+			'default' 	=> '',
+			'desc' 		=> '增加积分数',
+			'match' 	=> 'option',
+			'update'	=> 'textarea',
+			'list'		=> true,
+		),
+
+		'total'		=> array
+		(
+			'type' 		=> 'varchar-80',
+			'name' 		=> '总积分数',
+			'default' 	=> '',
+			'desc' 		=> '总积分数',
+			'match' 	=> 'option',
+			'update'	=> 'textarea',
+			'list'		=> true,
+		),
+
+		'desc'     => array
+        (
+            'type'      => 'varchar-300',
+            'name'      => '描述',
+            'default'   => '',
+            'desc'      => '描述',
+            'match'     => 'option',
+            'update'    => 'textarea',
+        ),
+
+        'state'		=> array
+		(
+			'type' 		=> 'tinyint-1',
+			'name' 		=> '状态',
+			'default' 	=> '1',
+			'desc' 		=> '请选择状态',
+			'match' 	=> 'is_numeric',
+		),
+
+		'cdate'		=> array
+		(
+			'type' 		=> 'int-11',
+			'name' 		=> '录入时间',
+			'match' 	=> array('is_numeric', time()),
+			'desc' 		=> '',
+			# 只有insert时才生效
+			'insert'	=> true,
+			'list'      => 'date("Y-m-d H:i:s", {cdate})',
+		),
+	),
+
+	'manage' => array
+	(
+		'delete' => false,
+		'edit' => false,
+		'insert' => false,
+
+		# 列表
+		'list_button' => array
+		(
+			//'list' => array('行为日志', '"action_log&search_option_action_id={action_id}&search_option_uid={uid}&oper_parent=user_log"'),
+		),
+	),
+
+	# request 请求接口定义
+	'request' => array
+	(
+		'getNew' => array
+		(
+			# 匹配的正则或函数 选填项
+			'option' => array
+			(
+				'config_id' => 'yes',
+				'action_id' => 'yes',
+				'uid' => 'yes',
+				'status' => 'yes',
+				'state' => 1,
+			),
+			'type' => 'one',
+			'order' => array('cdate' => 'desc'),
+			'col' => '*',
+		),
+
+		'getNewTotal' => array
+		(
+			# 匹配的正则或函数 选填项
+			'option' => array
+			(
+				'config_id' => 'yes',
+				'action_id' => 'yes',
+				'uid' => 'yes',
+				'status' => 'yes',
+				'state' => 1,
+				'start' => array('yes-cdate', '>='),
+				'end' => array('yes-cdate', '<='),
+			),
+			'type' => 'count',
+			'order' => array('cdate' => 'desc'),
+			'col' => 'count(1) as total',
+		),
+	)
+);

+ 21 - 0
database/level_type.php

@@ -1,5 +1,12 @@
 <?php
 
+
+$type = array
+(
+	1 => '自动升级',
+	2 => '手动升级',
+);
+
 return array
 (
 	# 表名
@@ -36,6 +43,20 @@ return array
 			'list'		=> true,
 		),
 
+		'type'		=> array
+		(
+			'type' 		=> 'int-11',
+			'name' 		=> '升级方式',
+			'default' 	=> '1',
+			'desc' 		=> '升级方式',
+			'match' 	=> 'is_numeric',
+			'update'	=> 'select',
+			'option'	=> $type,
+			'search'	=> 'select',
+			'list'		=> true,
+			'edit'		=> true,
+		),
+
 		'reorder'		=> array
 		(
 			'type' 		=> 'int-11',

+ 5 - 11
database/user_level.php

@@ -10,12 +10,6 @@ $level = function()
 	return $array;
 };
 
-$type = array
-(
-	1 => '自动升级',
-	2 => '手动升级',
-);
-
 $type_id = function()
 {
     $array = array();
@@ -100,11 +94,11 @@ return array
 			'default' 	=> '1',
 			'desc' 		=> '升级方式',
 			'match' 	=> 'is_numeric',
-			'update'	=> 'select',
-			'option'	=> $type,
-			'search'	=> 'select',
-			'list'		=> true,
-			'edit'		=> true,
+			//'update'	=> 'select',
+			//'option'	=> $type,
+			//'search'	=> 'select',
+			//'list'		=> true,
+			//'edit'		=> true,
 		),
 
 		'info'      => array

+ 8 - 5
lib/Core.php

@@ -120,7 +120,7 @@ class Core
 		$level_type = Dever::db('score/level_type')->state();
 		if ($level_type) {
 			foreach ($level_type as $k => $v) {
-				$this->setLevel($uid, $v['id']);
+				$this->setLevel($uid, $v);
 			}
 		}
 
@@ -213,8 +213,11 @@ class Core
 	 *
 	 * @return mixed
 	 */
-	public function setLevel($uid, $type_id = 1)
+	public function setLevel($uid, $level_type)
 	{
+		if ($level_type['type'] == 2) {
+			return;
+		}
 		# 获取当前用户的等级
 		$where['uid'] = $uid;
 		$where['level_type_id'] = $type_id;
@@ -228,7 +231,7 @@ class Core
 			$level = 1;
 		}
 
-		$config = Dever::db('score/level')->one(array('level' => $level, 'level_type_id' => $type_id, 'state' => 1));
+		$config = Dever::db('score/level')->one(array('level' => $level, 'level_type_id' => $level_type['id'], 'state' => 1));
 
 		if ($config) {
 			# 是否能升级
@@ -252,9 +255,9 @@ class Core
 			if ($yes) {
 				# 可以升级
 				if ($user_level) {
-					Dever::db('score/user_level')->update(array('where_id' => $user_level['id'], 'level_id' => $yes, 'level_type_id' => $type_id));
+					Dever::db('score/user_level')->update(array('where_id' => $user_level['id'], 'level_id' => $yes, 'level_type_id' => $level_type['id']));
 				} else {
-					Dever::db('score/user_level')->insert(array('uid' => $uid,'level_id' => $yes, 'type' => 1, 'level_type_id' => $type_id));
+					Dever::db('score/user_level')->insert(array('uid' => $uid,'level_id' => $yes, 'type' => 1, 'level_type_id' => $level_type['id']));
 				}
 			}
 		}

+ 68 - 0
lib/Level.php

@@ -0,0 +1,68 @@
+<?php
+
+namespace Score\Lib;
+
+use Dever;
+
+class Level
+{
+	# 获取当前用户的等级信息
+	public function get($uid, $level_type_id = 1, $prefix = 'vip')
+	{
+		$result = $this->config($prefix);
+		$userLevel = Dever::db('score/user_level')->one(array('uid' => $uid, 'level_type_id' => $level_type_id));
+		
+		if ($userLevel) {
+			$level = Dever::db('score/level')->one($userLevel['level_id']);
+			$next_level = Dever::db('score/level')->one(array('level_type_id' => $level_type_id, 'level' => $level['level'] + 1));
+
+			$result['current']['id'] = $level['id'];
+			$result['current']['name'] = $level['name'];
+			$result['current']['level'] = $level['level'];
+			$result['current']['key'] .= $level['level'];
+
+			if ($next_level) {
+				$result['next']['id'] = $next_level['id'];
+				$result['next']['name'] = $next_level['name'];
+				$result['next']['level'] = $next_level['level'];
+				$result['next']['key'] .= $next_level['level'];
+			}
+		}
+
+		return $result;
+	}
+
+	private function config($prefix)
+	{
+		$result = array
+		(
+			# 当前等级
+			'current' => array
+			(
+				# id
+				'id' => '',
+				# 名称
+				'name' => '',
+				# 等级数字
+				'level' => '',
+				# 唯一key
+				'key' => $prefix,
+			),
+
+			# 下一级
+			'next' => array
+			(
+				# id
+				'id' => '',
+				# 名称
+				'name' => '',
+				# 等级数字
+				'level' => '',
+				# 唯一key
+				'key' => $prefix,
+			),
+		);
+
+		return $result;
+	}
+}