rabin 6 tahun lalu
induk
melakukan
03b081f987
5 mengubah file dengan 168 tambahan dan 7 penghapusan
  1. 31 2
      database/level.php
  2. 100 0
      database/level_type.php
  3. 1 0
      database/user.php
  4. 25 0
      database/user_level.php
  5. 11 5
      lib/Core.php

+ 31 - 2
database/level.php

@@ -11,6 +11,17 @@ $config = function()
     return $array;
 };
 
+$type_id = function()
+{
+    $array = array();
+    $info = Dever::db('score/level_type')->state();
+    if($info)
+    {
+        $array += $info;
+    }
+    return $array;
+};
+
 return array
 (
     # 表名
@@ -20,6 +31,7 @@ return array
     # 后台菜单排序
     'order' => 8,
     'check' => 'level',
+    'desc' => '等级根据积分来升级,积分通过用户行为来生成,如果本项目有多个用户等级,如有声望等级、金币等级、普通用户等级、VIP用户等级,请设置等级类别,否则不需要设置',
     # 数据结构
     'struct' => array
     (
@@ -46,6 +58,19 @@ return array
             'search'    => 'fulltext',
             'list'      => true,
         ),
+
+        'level_type_id'       => array
+        (
+            'type'      => 'int-11',
+            'name'      => '等级类别',
+            'default'   => '1',
+            'desc'      => '等级类别',
+            'match'     => 'is_numeric',
+            'update'    => 'select',
+            'option'    => $type_id,
+            'search'    => 'select',
+            'list'        => true,
+        ),
         
         'score'       => array
         (
@@ -82,7 +107,7 @@ return array
         'level'       => array
         (
             'type'      => 'int-11',
-            'name'      => '等级数字-请直接输入等级数字,每次升级按照该数字进行匹配,如果设置为1,则为lv1,不允许重复,用户升级',
+            'name'      => '等级数字-请直接输入等级数字,每次升级按照该数字进行匹配,如果设置为1,则为lv1,不允许重复',
             'default'   => '1',
             'desc'      => '等级数字',
             'match'     => 'option',
@@ -116,7 +141,11 @@ return array
 
     'manage' => array
     (
-
+        # 自定义快捷新增和编辑
+        'button' => array
+        (
+            '等级类别' => array('list', 'level_type&project=score&oper_parent=level&oper_project=score'),
+        ),
     ),
 
     'request' => array

+ 100 - 0
database/level_type.php

@@ -0,0 +1,100 @@
+<?php
+
+return array
+(
+	# 表名
+	'name' => 'level_type',
+	# 显示给用户看的名称
+	'lang' => '等级类别',
+	# 后台菜单排序
+	'order' => 1,
+	'menu' => false,
+	# 数据结构
+	'struct' => array
+	(
+		'id' 		=> array
+		(
+			'type' 		=> 'int-11',
+			'name' 		=> 'ID',
+			'default' 	=> '',
+			'desc' 		=> '',
+			'match' 	=> 'is_numeric',
+			'search'	=> 'order',
+			'list'		=> true,
+			'order'		=> 'desc',
+		),
+		
+		'name'		=> array
+		(
+			'type' 		=> 'varchar-32',
+			'name' 		=> '类别名称',
+			'default' 	=> '',
+			'desc' 		=> '类别名称',
+			'match' 	=> 'is_string',
+			'update'	=> 'text',
+			'search'	=> 'fulltext',
+			'list'		=> true,
+		),
+
+		'reorder'		=> array
+		(
+			'type' 		=> 'int-11',
+			'name' 		=> '排序-数值越大越靠前,排在前面的类别将优先显示,如设置了VIP等级和普通用户等级,VIP等级的排序比普通用户等级大,VIP等级将优先显示',
+			'default' 	=> '1',
+			'desc' 		=> '请输入排序',
+			'match' 	=> 'option',
+			'update'	=> 'text',
+			'search'	=> 'order',
+			'list'		=> true,
+			'order'		=> 'desc',
+			'edit'		=> true,
+		),
+
+		'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})',
+		),
+	),
+
+	# 默认值
+	'default' => array
+	(
+		'col' => 'name,state,cdate',
+		'value' => array
+		(
+			'"默认类别",1,' . time(),
+		),
+	),
+
+	'manage' => array
+	(
+		'insert' => false,
+		'edit' => false,
+
+		# 自定义快捷新增和编辑
+		'button' => array
+		(
+			'新增' => array('fast'),
+		),
+		# 快捷更新
+		'list_button' => array
+		(
+			'edit' => array('编辑'),
+		),
+	),
+);

+ 1 - 0
database/user.php

@@ -18,6 +18,7 @@ return array
 	'lang' => '用户积分列表',
 	'order' => 100,
 	'menu' => 'passport',
+	'menu' => false,
 	# 数据结构
 	'struct' => array
 	(

+ 25 - 0
database/user_level.php

@@ -16,6 +16,17 @@ $type = array
 	2 => '手动升级',
 );
 
+$type_id = function()
+{
+    $array = array();
+    $info = Dever::db('score/level_type')->state();
+    if($info)
+    {
+        $array += $info;
+    }
+    return $array;
+};
+
 return array
 (
 	# 表名
@@ -24,6 +35,7 @@ return array
 	'lang' => '用户积分等级',
 	'order' => 99,
 	'menu' => 'passport',
+	'menu' => false,
 	# 数据结构
 	'struct' => array
 	(
@@ -54,6 +66,19 @@ return array
 			'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',

+ 11 - 5
lib/Core.php

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