diff --git a/assets/css/gdk.css b/assets/css/gdk.css
index 6e6c4df..e6c2a42 100644
--- a/assets/css/gdk.css
+++ b/assets/css/gdk.css
@@ -11,5 +11,5 @@ body.compensate-for-scrollbar{overflow:hidden}.fancybox-active{height:auto}.fanc
/*! Hint.css - v1.3.6 - 2015-10-31 http://kushagragour.in/lab/hint/ Copyright (c) 2015 Kushagra Gour; Licensed MIT */
.hint--bottom:after,.hint--top:after{margin-left:-18px}.hint,[data-hint]{position:relative;display:inline-block}.hint:after,.hint:before,[data-hint]:after,[data-hint]:before{position:absolute;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);visibility:hidden;opacity:0;z-index:1000000;pointer-events:none;-webkit-transition:.3s ease;-moz-transition:.3s ease;transition:.3s ease;-webkit-transition-delay:0ms;-moz-transition-delay:0ms;transition-delay:0ms}.hint--always:after,.hint--always:before,.hint:focus:after,.hint:focus:before,.hint:hover:after,.hint:hover:before,[data-hint]:focus:after,[data-hint]:focus:before,[data-hint]:hover:after,[data-hint]:hover:before{opacity:1;visibility:visible}.hint:hover:after,.hint:hover:before,[data-hint]:hover:after,[data-hint]:hover:before{-webkit-transition-delay:100ms;-moz-transition-delay:100ms;transition-delay:100ms}.hint:before,[data-hint]:before{content:'';position:absolute;background:0 0;border:6px solid transparent;z-index:1000001}.hint:after,[data-hint]:after{content:attr(data-hint);background:#383838;color:#fff;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;text-shadow:0 -1px 0 #000;box-shadow:4px 4px 8px rgba(0,0,0,.3)}[data-hint='']:after,[data-hint='']:before{display:none!important}.hint--top:before{border-top-color:#383838;margin-bottom:-12px}.hint--bottom:before{border-bottom-color:#383838;margin-top:-12px}.hint--top:after,.hint--top:before{bottom:100%;left:50%}.hint--top:focus:after,.hint--top:focus:before,.hint--top:hover:after,.hint--top:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.hint--bottom:after,.hint--bottom:before{top:100%;left:50%}.hint--bottom:focus:after,.hint--bottom:focus:before,.hint--bottom:hover:after,.hint--bottom:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.hint--right:before{border-right-color:#383838;margin-left:-12px;margin-bottom:-6px}.hint--right:after{margin-bottom:-14px}.hint--right:after,.hint--right:before{left:100%;bottom:50%}.hint--right:focus:after,.hint--right:focus:before,.hint--right:hover:after,.hint--right:hover:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translateX(8px)}.hint--left:before{border-left-color:#383838;margin-right:-12px;margin-bottom:-6px}.hint--left:after{margin-bottom:-14px}.hint--left:after,.hint--left:before{right:100%;bottom:50%}.hint--left:focus:after,.hint--left:focus:before,.hint--left:hover:after,.hint--left:hover:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translateX(-8px)}.hint--error:after{background-color:#b34e4d;text-shadow:0 -1px 0 #592726}.hint--error.hint--top:before{border-top-color:#b34e4d}.hint--error.hint--bottom:before{border-bottom-color:#b34e4d}.hint--error.hint--left:before{border-left-color:#b34e4d}.hint--error.hint--right:before{border-right-color:#b34e4d}.hint--warning:after{background-color:#c09854;text-shadow:0 -1px 0 #6c5328}.hint--warning.hint--top:before{border-top-color:#c09854}.hint--warning.hint--bottom:before{border-bottom-color:#c09854}.hint--warning.hint--left:before{border-left-color:#c09854}.hint--warning.hint--right:before{border-right-color:#c09854}.hint--info:after{background-color:#3986ac;text-shadow:0 -1px 0 #193b4d}.hint--info.hint--top:before{border-top-color:#3986ac}.hint--info.hint--bottom:before{border-bottom-color:#3986ac}.hint--info.hint--left:before{border-left-color:#3986ac}.hint--info.hint--right:before{border-right-color:#3986ac}.hint--success:after{background-color:#458746;text-shadow:0 -1px 0 #1a321a}.hint--success.hint--top:before{border-top-color:#458746}.hint--success.hint--bottom:before{border-bottom-color:#458746}.hint--success.hint--left:before{border-left-color:#458746}.hint--success.hint--right:before{border-right-color:#458746}.hint--always.hint--top:after,.hint--always.hint--top:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.hint--always.hint--bottom:after,.hint--always.hint--bottom:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.hint--always.hint--left:after,.hint--always.hint--left:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translateX(-8px)}.hint--always.hint--right:after,.hint--always.hint--right:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translateX(8px)}.hint--rounded:after{border-radius:4px}.hint--no-animate:after,.hint--no-animate:before{-webkit-transition-duration:0ms;-moz-transition-duration:0ms;transition-duration:0ms}.hint--bounce:after,.hint--bounce:before{-webkit-transition:opacity .3s ease,visibility .3s ease,-webkit-transform .3s cubic-bezier(.71,1.7,.77,1.24);-moz-transition:opacity .3s ease,visibility .3s ease,-moz-transform .3s cubic-bezier(.71,1.7,.77,1.24);transition:opacity .3s ease,visibility .3s ease,transform .3s cubic-bezier(.71,1.7,.77,1.24)}
-/* 其他样式*/
-::selection{background-color:#d73a42;color:#fff}::-moz-selection{background-color:#d73a42;color:#fff}::-webkit-selection{background-color:#d73a42;color:#fff}
\ No newline at end of file
+/* 鼠标选中样式*/::selection{background-color:#d73a42;color:#fff}::-moz-selection{background-color:#d73a42;color:#fff}::-webkit-selection{background-color:#d73a42;color:#fff}
+/*短代码表格样式*/.gdk-table th{background:#7a57d1;border:1px solid #fff;color:#fff;font-weight:700;font-size:1.2pc}.gdk-table tr:nth-child(odd){background:#f4ebf7}.gdk-table td,.gdk-table th{vertical-align:middle}.gdk-table td{border:1px solid #e8daee}
\ No newline at end of file
diff --git a/class/class_load.php b/class/class_load.php
index 9de87b0..fb4ad41 100644
--- a/class/class_load.php
+++ b/class/class_load.php
@@ -1,7 +1,12 @@
get_columns();
+ $hidden = $this->get_hidden_columns();
+ $sortable = $this->get_sortable_columns();
+ $data = $this->table_data();
+ usort( $data, [ &$this, 'sort_data' ] );
+ $perPage = 30;//每页30个数据
+ $currentPage = $this->get_pagenum();
+ $totalItems = count( $data );
+ $this->set_pagination_args( [
+ 'total_items' => $totalItems,
+ 'per_page' => $perPage
+ ] );
+
+ $data = array_slice( $data, (($currentPage - 1) * $perPage), $perPage );
+
+ $this->_column_headers = [
+ $columns,
+ $hidden,
+ $sortable
+ ];
+ $this->items = $data;
+ }
+
+ /**
+ * Override the parent columns method.
+ * Defines the columns to use in your listing table
+ *
+ * @return Array
+ */
+ public function get_columns() {
+ $columns = [
+ 'point_id' => 'ID',
+ 'user_id' => '用户ID',
+ 'points' => '金币',
+ 'description' => '描述',
+ 'datetime' => '日期&时间',
+ 'status' => '状态',
+ 'actions' => '操作'
+ ];
+
+ return $columns;
+ }
+
+ /**
+ * Define which columns are hidden
+ *
+ * @return Array
+ */
+ public function get_hidden_columns() {
+ return [];
+ }
+
+ /**
+ * Define the sortable columns
+ *
+ * @return Array
+ */
+ public function get_sortable_columns() {
+ return [
+ 'point_id' => [
+ 'point_id',
+ false
+ ],
+ 'user_id' => [
+ 'user_id',
+ false
+ ],
+ 'points' => [
+ 'points',
+ false
+ ],
+ 'description' => [
+ 'description',
+ false
+ ],
+ 'datetime' => [
+ 'datetime',
+ false
+ ],
+ 'status' => [
+ 'status',
+ false
+ ]
+ ];
+ }
+
+ /**
+ * Get the table data
+ *
+ * @return Array
+ */
+ private function table_data() {
+ $data = [];
+ $data = Points::get_points( null, null, null, ARRAY_A );
+ return $data;
+ }
+
+ /**
+ * Define what data to show on each column of the table
+ *
+ * @param Array $item
+ * Data
+ * @param String $column_name
+ * - Current column name
+ *
+ * @return Mixed
+ */
+ public function column_default( $item, $column_name ) {
+ switch ( $column_name ) {
+ case 'point_id' :
+ case 'user_id' :
+ case 'description' :
+ case 'points' :
+ case 'datetime' :
+ case 'status' :
+ return $item[$column_name];
+ break;
+ case 'actions':
+ $actions = [
+ 'edit' => sprintf('编辑',$_REQUEST['page'],'edit',$item['point_id']),
+ 'delete' => sprintf('删除',$_REQUEST['page'],'delete',$item['point_id']),
+ ];
+
+ //Return the title contents
+ return sprintf('%1$s%2$s',$item[$column_name]??"",
+ $this->row_actions($actions, true)
+ );
+ break;
+ default :
+ return print_r( $item, true );
+ }
+ }
+
+ /**
+ * Allows you to sort the data by the variables set in the $_GET
+ *
+ * @return Mixed
+ */
+ private function sort_data( $a, $b ) {
+ // Set defaults
+ $orderby = 'point_id';
+ $order = 'desc';
+
+ // If orderby is set, use this as the sort column
+ if ( !empty( $_GET['orderby'] ) ) {
+ $orderby = $_GET['orderby'];
+ }
+
+ // If order is set use this as the order
+ if ( !empty( $_GET['order'] ) ) {
+ $order = $_GET['order'];
+ }
+
+ $result = strnatcmp( $a[$orderby], $b[$orderby] );
+
+ if ( $order === 'asc' ) {
+ return $result;
+ }
+
+ return -$result;
+ }
+}
+
+
+/**
+ * Points Admin class
+ */
+class Points_Admin {
+
+ public static function init () {
+ add_action( 'admin_notices', [ __CLASS__, 'admin_notices' ] );
+ add_action( 'admin_menu', [ __CLASS__, 'admin_menu' ], 'manage_options' );
+ }
+
+ public static function admin_notices() {
+ if ( !empty( self::$notices ) ) {
+ foreach ( self::$notices as $notice ) {
+ echo $notice;
+ }
+ }
+ }
+
+ /**
+ * Adds the admin section.
+ */
+ public static function admin_menu() {
+ $admin_page = add_menu_page('金币','金币','manage_options','points',[ __CLASS__, 'points_menu'],'dashicons-awards');
+ }
+
+ public static function points_menu() {
+ $alert = "";
+ if(isset( $_POST['psearch'] )){
+ $sdata = trim($_POST['psearch']);
+ if(preg_match('/E20/', $sdata)){//order id
+ global $wpdb;
+ $point_id = $wpdb->get_row("SELECT point_id FROM " . Points_Database::points_get_table( "users" ) . " WHERE description = '{$sdata}'", ARRAY_A )['point_id'];
+ $points = Points::get_point( $point_id );
+ }elseif(filter_var($sdata, FILTER_VALIDATE_EMAIL)){//email
+ $user = get_user_by( 'email', $sdata );
+ $points = Points::get_points_by_user( $user->ID );
+ $k[] = '
用户ID:'.$user->ID.' 总金币为:'.Points::get_user_total_points( $user->ID ).'
';
+ }else{//userid
+ $points = Points::get_points_by_user( $sdata );
+ $k[] = '用户ID:'.$sdata.' 总金币为:'.Points::get_user_total_points( $sdata ).'
';
+ }
+ if(is_array($points)){
+ foreach ( $points as $point ) {
+ $k[] = '金币:'.$point->points.' 描述:'.$point->description.' 日期:'.$point->datetime.'
';
+ }
+ }else{
+ $k[] = '金币:'.$points->points.' 描述:'.$points->description.' 日期:'.$points->datetime.'
';
+ }
+ $alert = implode(" ", $k);
+ }
+
+ if ( isset( $_POST['save'] ) && isset( $_POST['action'] ) ) {
+ if ( $_POST['action'] == "edit" ) {
+ $point_id = isset($_POST['point_id'])?intval( $_POST['point_id'] ) : null;
+ $points = Points::get_point( $point_id );
+ $data = array();
+ if ( isset( $_POST['user_mail'] ) ) {
+ $data['user_mail'] = $_POST['user_mail'];
+ }
+ if ( isset( $_POST['user_id'] ) ) {
+ $data['user_id'] = $_POST['user_id'];
+ }
+ if ( isset( $_POST['datetime'] ) ) {
+ $data['datetime'] = $_POST['datetime'];
+ }
+ if ( isset( $_POST['description'] ) ) {
+ $data['description'] = $_POST['description'];
+ }
+ if ( isset( $_POST['status'] ) ) {
+ $data['status'] = $_POST['status'];
+ }
+ if ( isset( $_POST['points'] ) ) {
+ $data['points'] = $_POST['points'];
+ }
+
+ if ( $points ) { // 编辑金币
+ Points::update_points($point_id, $data);
+ } else { // 增加金币
+ if ( isset( $_POST['user_mail'] ) ) {//如果输入邮箱的话
+ $usermail = $data['user_mail'];
+ $user = get_user_by( 'email', $usermail );
+ $userid = $user->ID;
+ $username = $user->display_name;
+ }
+ if ( isset( $_POST['user_id'] ) ) {//如果输入用户ID的话
+ $user = get_user_by( 'id', $data['user_id'] );
+ $usermail = $user->user_email;
+ $userid = $data['user_id'];
+ $username = $user->display_name;
+ }
+ Points::set_points($_POST['points'], $userid, $data);
+ $message = '金币金额调整通知
尊敬的'.$username.',您好!
您的金币金额被管理员调整,请查收!
您的金币详细情况 |
---|
用户名 | '.$username.' |
调整金币 | '.$_POST['points'].' |
金币总额 | '.Points::get_user_total_points($userid, 'accepted' ).' |
如果您的金币金额有异常,请您在第一时间和我们取得联系哦,联系邮箱:'.get_bloginfo('admin_email').'
';
+ $headers = "Content-Type:text/html;charset=UTF-8\n";
+ wp_mail( $usermail , 'Hi,'.$username.',金币账户金额增加通知!', $message ,$headers);
+ }
+ }
+ $alert= "金币已更新";
+ }
+ if ( isset( $_GET["action"] ) ) {
+ $action = $_GET["action"];
+ if ( $action !== null ) {
+ switch ( $action ) {
+ case 'edit' :
+ if ( isset( $_GET['point_id'] ) && ( $_GET['point_id'] !== null ) ) {
+ return self::points_admin_points_edit( intval( $_GET['point_id'] ) );
+ } else {
+ return self::points_admin_points_edit();
+ }
+ break;
+ case 'delete' :
+ if ( $_GET['point_id'] !== null ) {
+ if ( current_user_can( 'administrator' ) ) {
+ Points::remove_points( $_GET['point_id'] );
+ global $wpdb;
+ $wcu_sql = "DELETE FROM " . Points_Database::points_get_table( "users" ) . " WHERE status = 'removed'";
+ $wpdb->query($wcu_sql);
+ $alert= "金币已删除";
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ if ($alert != "") {
+ echo '' . $alert . '
';
+ }
+
+ $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
+ $cancel_url = remove_query_arg( 'point_id', remove_query_arg( 'action', $current_url ) );
+ $current_url = remove_query_arg( 'point_id', $current_url );
+ $current_url = remove_query_arg( 'action', $current_url );
+ $exampleListTable = new Points_List_Table();
+ $exampleListTable->prepare_items();
+ ?>
+
+
金币管理
+
+ 添加金币
+
+
+ tbody#the-list tr:hover{background:rgba(132,219,162,.61)}';$exampleListTable->display(); ?>
+
+ user_id;
+ $num_points = $points->points;
+ $description = $points->description;
+ $datetime = $points->datetime;
+ $status = $points->status;
+ }
+ } else {
+ $user_id = "";
+ $num_points = 0;
+ $description = "ADD";
+ $datetime = "";
+ $status = 'accepted';
+ }
+
+ if ( empty( $point_id ) ) {
+ $pointsclass = 'newpoint';
+ } else {
+ $pointsclass = 'editpoint';
+ }
+ $output .= '';
+ $output .= '
';
+ if ( empty( $point_id ) ) {
+ $output .= '新金币';
+ } else {
+ $output .= '编辑金币';
+ }
+ $output .= '
';
+ $output .= '
';
+ $output .= '
';
+ echo $output;
+ }
+}
\ No newline at end of file
diff --git a/class/points/class-points-shortcodes.php b/class/points/class-points-shortcodes.php
new file mode 100644
index 0000000..2d65527
--- /dev/null
+++ b/class/points/class-points-shortcodes.php
@@ -0,0 +1,174 @@
+ 10,
+ 'order_by' => 'points',
+ 'order' => 'DESC'
+ ],
+ $atts
+ );
+ extract( $options );
+ $output = "";
+ $pointsusers = Points::get_users();
+ if ( sizeof( $pointsusers )>0 ) {
+ foreach ( $pointsusers as $pointsuser ) {
+ $total = Points::get_user_total_points( $pointsuser );
+ $output .='';
+ $output .= '';
+ $output .= get_user_meta ( $pointsuser, 'nickname', true );
+ $output .= ':';
+ $output .= '';
+ $output .= " ". $total . " 金币";
+ $output .= '';
+ $output .= '
';
+ }
+ } else {
+ $output .= 'No users
';
+ }
+ return $output;
+ }
+ public static function points_user_points ( $atts, $content = null ) {
+ $output = "";
+ $options = shortcode_atts(['id' => ""],
+ $atts
+ );
+ extract( $options );
+ if ( $id == "" ) {
+ $id = get_current_user_id();
+ }
+ if ( $id !== 0 ) {
+ $points = Points::get_user_total_points( $id, 'accepted' );
+ $output .= $points;
+ }
+ return $output;
+ }
+
+ /*付费可见短代码开始*/
+
+public static function pay($atts, $content = null) {
+ global $wpdb;
+ $user_id = get_current_user_id();
+ $description = get_the_ID();
+ $result = $wpdb->get_row("SELECT description FROM " . Points_Database::points_get_table("users") . " WHERE user_id=" . $user_id . " AND description=" . $description . " AND status='accepted' LIMIT 0, 3;", ARRAY_A )['description']; //验证是否支付
+ extract(shortcode_atts(['point' => "10"], $atts));
+ $notice = '';
+ $pay_content = get_post_meta($description, 'pay_content', true);
+ if (!empty($pay_content) && $pay_content != $content) {
+ update_post_meta($description, 'pay_content', $content, true);
+ } else {
+ add_post_meta($description, 'pay_content', $content, true);
+ }
+ if (is_user_logged_in()) {
+ if ($result == $description || current_user_can('administrator')) {
+ $notice.= '';
+ $notice.= $content;
+ $notice.= '
';
+ } else {
+ if (Points::get_user_total_points($user_id, 'accepted') < $point) {
+ $notice.= '';
+ $notice.= '
本段内容需要支付 ' . $point . '金币查看
';
+ $notice.= '
您当前拥有 ' . Points::get_user_total_points($user_id, 'accepted') . ' 金币,您的金币不足,请充值
';
+ $notice.= '
立即充值
';
+ $notice.= '
';
+ } else {
+ $notice.= '';
+ $notice.= '
本段内容需要付费查看,您当前拥有 ' . Points::get_user_total_points($user_id, 'accepted') . ' 金币
';
+ $notice.= '
点击购买
';
+ $notice.= '
';
+ $notice.= '';
+ echo '';
+ }
+ }
+ } else {
+ global $wp;
+ $current_url = home_url(add_query_arg([] , $wp->request));
+ $login_uri = '点击登录';
+ $notice.= '';
+ $notice.= '
查看本段内容需要支付 ' . $point . ' 金币
';
+ $notice.= '
您尚未登录,请 ' . $login_uri . ' 或者 立即注册
';
+ $notice.= '
';
+ }
+ return $notice;
+}
+ /*付费可见短代码结束*/
+ /**
+ * Shortcode. 显示用户的金币细节
+ */
+ public static function points_user_points_details ( $atts, $content = null ) {
+ $options = shortcode_atts(
+ [
+ 'user_id' => '',
+ 'order_by' => 'point_id',
+ 'order' => 'DESC',
+ 'description' => true
+ ],
+ $atts
+ );
+ extract( $options );
+ date_default_timezone_set('Asia/Shanghai');
+ if ( is_string( $description ) && ( ( $description == '0' ) || ( strtolower( $description ) == 'false' ) ) ) {
+ $description = false;
+ }
+
+ $desc_th = '';
+ if ( $description ) {
+ $desc_th = '描述 | ';
+ }
+ global $wp_query;
+ $curauth = $wp_query->get_queried_object();
+ $user_id = $curauth->ID;
+ $points = Points::get_points_by_user( $user_id );
+ $output = '' .
+ '' .
+ '日期时间' .
+ ' | 金币 | ' .
+ '类别 | ' .
+ '状态 | ' .
+ $desc_th .
+ '
';
+ if ( $user_id !== 0 ) {
+ if ( sizeof( $points ) > 0 ) {
+ foreach ( $points as $point ) {
+ $desc_td = '';
+ if ( $description ) {
+ $desc_td = '' . $point->description . ' | ';
+ }
+ if($point->points > 0){ $leibie = '充值';}elseif($point->points < 0){$leibie = '消费';}
+ $output .= '' .
+ '' . $point->datetime . ' | ' .
+ '' . $point->points . ' | ' .
+ '' . $leibie . ' | ' .
+ '' . $point->status . ' | ' .
+ $desc_td .
+ '
';
+ }
+ }
+ }
+
+ $output .= '
';
+
+
+ return $output;
+ }
+}
+Points_Shortcodes::init();
\ No newline at end of file
diff --git a/class/points/class-points.php b/class/points/class-points.php
new file mode 100644
index 0000000..762dea8
--- /dev/null
+++ b/class/points/class-points.php
@@ -0,0 +1,228 @@
+prefix . self::$prefix . "users";
+ break;
+ }
+ return $result;
+ }
+}
+
+
+/**
+ * Points class
+ */
+class Points {
+
+ public static function get_points_by_user ( $user_id, $limit = null, $order_by = null, $order = null, $output = OBJECT, $offset = 0 ) {
+ global $wpdb;
+
+ $limit_str = '';
+ if ( isset( $limit ) && ( $limit !== null ) ) {
+ $limit_str = ' LIMIT ' . $offset . ' ,' . $limit;
+ }
+ $order_by_str = "";
+ if ( isset( $order_by ) && ( $order_by !== null ) ) {
+ $order_by_str = " ORDER BY " . $order_by;
+ }
+ $order_str = "";
+ if ( isset( $order ) && ( $order !== null ) ) {
+ $order_str = " " . $order;
+ }
+
+ $result = $wpdb->get_results('SELECT * FROM ' . Points_Database::points_get_table( 'users' ) . " WHERE user_id = '$user_id'" . $order_by_str . $order_str . $limit_str, $output );
+
+ return $result;
+ }
+
+ public static function get_user_total_points ( $user_id, $status = null ) {
+ global $wpdb;
+
+ $result = 0;
+
+ $where_status = '';
+ if ( $status !== null ) {
+ $where_status = " AND status = '" . $status . "'";
+ }
+ $points = $wpdb->get_row("SELECT SUM(points) as total FROM " . Points_Database::points_get_table( "users" ) . " WHERE user_id = '$user_id' " . $where_status);
+
+ if ( $points && ( $points->total !== NULL ) ) {
+ $result = $points->total;
+ }
+ return $result;
+ }
+
+ public static function get_users_total_points ( $limit = null, $order_by = null, $order = null, $status = null ) {
+ global $wpdb;
+
+ $where_status = '';
+ if ( $status !== null ) {
+ $where_status = " WHERE status = '" . $status . "'";
+ }
+ $points = $wpdb->get_results("SELECT SUM(points) as total, user_id FROM " . Points_Database::points_get_table( "users" ) . $where_status . " GROUP BY user_id");
+
+ return $points;
+ }
+
+ /**
+ * Get users id who have some points
+ * @param $user_id
+ * @return array
+ */
+ public static function get_users() {
+ global $wpdb;
+
+ $users_id = $wpdb->get_results("SELECT user_id FROM " . Points_Database::points_get_table( "users" ) . " GROUP BY user_id");
+
+ $result = array();
+ if ( sizeof( $users_id ) > 0 ) {
+ foreach ( $users_id as $user_id ) {
+ $result[] = $user_id->user_id;
+ }
+ }
+ return $result;
+ }
+
+ public static function set_points ( $points, $user_id, $info = array() ) {
+ global $wpdb;
+
+ $values = array( 'points' => $points );
+
+ if ( isset( $info['datetime'] ) && ( $info['datetime'] !== "" ) ) {
+ $values['datetime'] = $info['datetime'];
+ } else {
+ $values['datetime'] = date('Y-m-d H:i:s', time() );
+ }
+ if ( isset( $info['description'] ) ) {
+ $values['description'] = $info['description'];
+ }
+ if ( isset( $info['status'] ) ) {
+ $values['status'] = $info['status'];
+ }
+ if ( isset( $info['type'] ) ) {
+ $values['type'] = $info['type'];
+ }
+ if ( isset( $info['data'] ) ) {
+ $values['data'] = $info['data']; // yet serialized
+ }
+ if ( isset( $info['ip'] ) ) {
+ $values['ip'] = $info['ip'];
+ }
+ if ( isset( $info['ipv6'] ) ) {
+ $values['ipv6'] = $info['ipv6'];
+ }
+ $values['user_id'] = $user_id;
+
+ $rows_affected = $wpdb->insert( Points_Database::points_get_table("users"), $values );
+
+ return $rows_affected;
+ }
+
+ /**
+ * Get a points list.
+ * @param int $limit
+ * @param string $order_by
+ * @param string $order
+ * @return Ambigous >
+ */
+ public static function get_points ( $limit = null, $order_by = null, $order = null, $output = OBJECT ) {
+ global $wpdb;
+
+ $where_str = " WHERE status != 'removed'";
+
+ $limit_str = "";
+ if ( isset( $limit ) && ( $limit !== null ) ) {
+ $limit_str = " LIMIT 0 ," . $limit;
+ }
+ $order_by_str = "";
+ if ( isset( $order_by ) && ( $order_by !== null ) ) {
+ $order_by_str = " ORDER BY " . $order_by;
+ }
+ $order_str = "";
+ if ( isset( $order ) && ( $order !== null ) ) {
+ $order_str = " " . $order;
+ }
+
+ $result = $wpdb->get_results("SELECT * FROM " . Points_Database::points_get_table( "users" ) . $where_str . $order_by_str . $order_str . $limit_str, $output );
+
+ return $result;
+ }
+
+ public static function get_point ( $point_id = null ) {
+ global $wpdb;
+
+ $result = null;
+
+ if ( isset( $point_id ) && ( $point_id !== null ) ) {
+
+ $points_id_str = " WHERE point_id = " . (int)$point_id;
+ $result = $wpdb->get_row("SELECT * FROM " . Points_Database::points_get_table( "users" ) . $points_id_str );
+ }
+
+ return $result;
+ }
+
+ public static function remove_points( $point_id ) {
+ global $wpdb;
+
+ $values = array();
+ $values['status'] = 'removed';
+
+ $rows_affected = $wpdb->update( Points_Database::points_get_table("users"), $values , array( 'point_id' => $point_id ) );
+
+ if ( !$rows_affected ) {
+ $rows_affected = null;
+ }
+ return $rows_affected;
+ }
+
+ public static function update_points( $point_id, $info = array() ) {
+ global $wpdb;
+
+ $values = array();
+
+ if ( isset( $info['user_id'] ) ) {
+ $values['user_id'] = $info['user_id'];
+ }
+ if ( isset( $info['datetime'] ) ) {
+ $values['datetime'] = $info['datetime'];
+ }
+ if ( isset( $info['description'] ) ) {
+ $values['description'] = $info['description'];
+ }
+ if ( isset( $info['status'] ) ) {
+ $values['status'] = $info['status'];
+ }
+ if ( isset( $info['points'] ) ) {
+ $values['points'] = $info['points'];
+ }
+ if ( isset( $info['type'] ) ) {
+ $values['type'] = $info['type'];
+ }
+ if ( isset( $info['data'] ) ) {
+ $values['data'] = $info['data']; // yet serialized
+ }
+ if ( isset( $info['ip'] ) ) {
+ $values['ip'] = $info['ip'];
+ }
+ if ( isset( $info['ipv6'] ) ) {
+ $values['ipv6'] = $info['ipv6'];
+ }
+
+ $rows_affected = $wpdb->update( Points_Database::points_get_table("users"), $values , array( 'point_id' => $point_id ) );
+
+ if ( !$rows_affected ) { // insert
+ $rows_affected = null;
+ }
+ return $rows_affected;
+ }
+}
diff --git a/class/points/points.php b/class/points/points.php
new file mode 100644
index 0000000..8cc778c
--- /dev/null
+++ b/class/points/points.php
@@ -0,0 +1,59 @@
+charset ) ) {
+ $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
+ }
+ if ( ! empty( $wpdb->collate ) ) {
+ $charset_collate .= " COLLATE $wpdb->collate";
+ }
+
+ // create tables
+ $points_users_table = Points_Database::points_get_table("users");
+ if ( $wpdb->get_var( "SHOW TABLES LIKE '$points_users_table'" ) != $points_users_table ) {
+ $queries[] = "CREATE TABLE $points_users_table (
+ point_id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+ user_id BIGINT(20) UNSIGNED NOT NULL,
+ points BIGINT(20) DEFAULT 0,
+ datetime datetime NOT NULL,
+ description varchar(5000),
+ ref_id BIGINT(20) DEFAULT null,
+ ip int(10) unsigned default NULL,
+ ipv6 decimal(39,0) unsigned default NULL,
+ data longtext default NULL,
+ status varchar(10) NOT NULL DEFAULT 'accepted',
+ type varchar(32) NULL,
+ PRIMARY KEY (point_id)
+ ) $charset_collate;";
+ }
+ if ( !empty( $queries ) ) {
+ require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
+ dbDelta( $queries );
+ }
+ }
+}
+Points_Class::init();
\ No newline at end of file
diff --git a/framework/options-config.php b/framework/options-config.php
index 774194d..3f0c120 100644
--- a/framework/options-config.php
+++ b/framework/options-config.php
@@ -302,7 +302,7 @@ $gdk_options = [
],
[
'name' => '关键词,IP,邮箱屏蔽',
- 'desc' => '开启 【启用后,在WordPress-设置-讨论-黑名单中添加想要屏蔽的关键词,邮箱,网址,IP地址,每行一个】如图设置',
+ 'desc' => '开启 【启用后,在WordPress-设置-讨论-黑名单中添加想要屏蔽的关键词,邮箱,网址,IP地址,每行一个】点击查看如图设置',
'id' => 'git_spam_keywords',
'type' => 'checkbox'
],
@@ -317,82 +317,69 @@ $gdk_options = [
'desc' => '开启 【启用后,屏蔽含有过长网址(超过50个字符)的评论,当然如果你已经选择了上面的选项的话,就不用选择了】',
'id' => 'git_spam_long',
'type' => 'checkbox'
- ],
- [
- 'name' => '文章版权声明',
- 'desc' => '此处输入的文字将出现在每篇文章最底部,你可以使用:{{title}}表示文章标题,{{link}}表示文章链接',
- 'id' => 'git_copyright_b',
- 'type' => 'textarea',
- 'std' => '极客公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:{{title}}'
- ]
- ],
- '支付设置' => [
- [
- 'title' => '统一支付设置',
- 'type' => 'title'
- ],
- [
- 'name' => '金币和RMB兑换关系',
- 'desc' => '请输入兑换关系,比如1RMB=10金币,请慎重选择,一旦设置好后面不能修改的',
- 'id' => 'git_payjs_rate',
- 'type' => 'number',
- 'std' => 10
- ],
- [
- 'name' => '选择一个支付方式',
- 'desc' => '两种方案选择其中一种,必须选择一个哦',
- 'id' => 'git_payjs',
- 'type' => 'radio',
- 'options' => [
- '0' => '禁用',
- '1' => '开启'
- ],
- 'std' => '1'
- ],
- [
- 'title' => 'PayJs支付设置 注册PayJs 【微信官方,微信正规渠道,强烈推荐】',
- 'type' => 'title'
- ],
- [
- 'name' => 'PayJs商户号',
- 'desc' => '',
- 'id' => 'git_payjs_id',
- 'type' => 'text',
- 'std' => 2333333333
- ],
- [
- 'name' => 'PayJs密钥',
- 'desc' => '',
- 'id' => 'git_payjs_secret',
- 'type' => 'text',
- 'std' => 444444444
]
],
'高级设置' => [
[
- 'name' => 'jQuery来源设置',
- 'desc' => '选择一个适合自己的jQuery公共库来源',
- 'id' => 'git_jq',
+ 'title' => '统一支付设置',
+ 'type' => 'title'
+ ],
+ [
+ 'name' => '网站支付功能',
+ 'desc' => '开启网站支付功能需要HTTPS支持,需要开通Payjs使用,点击注册Payjs',
+ 'id' => 'gdk_payjs',
'type' => 'radio',
'options' => [
- '1' => '远程jQuery库【底部加载,速度快,兼容差】',
- '0' => '本地jQuery库【头部加载,速度慢,兼容好】'
+ '0' => '禁用',
+ '1' => '开启'
+ ],
+ 'std' => '0'
+ ],
+ [
+ 'name' => '金币和RMB兑换关系',
+ 'desc' => '请输入兑换关系,默认1RMB=10金币,请慎重选择,一旦设置好后面不能修改的,本选项仅对会员金币支付生效,游客免登陆支持不受影响',
+ 'id' => 'gdk_rate',
+ 'type' => 'number',
+ 'std' => 10
+ ],
+ [
+ 'name' => 'PayJs商户号',
+ 'desc' => '',
+ 'id' => 'gdk_payjs_id',
+ 'type' => 'text',
+ 'std' => 2333333333
+ ],
+ [
+ 'name' => 'PayJs密钥',
+ 'desc' => '',
+ 'id' => 'gdk_payjs_key',
+ 'type' => 'text',
+ 'std' => 444444444
+ ],
+ [
+ 'name' => 'jQuery加载位置设置',
+ 'desc' => '选择一个适合自己网站的jQuery加载位置,默认是底部加载',
+ 'id' => 'gdk_jq',
+ 'type' => 'radio',
+ 'options' => [
+ '1' => '底部加载,速度快',
+ '0' => '头部加载,兼容好'
],
'std' => '1'
],
[
- 'name' => 'HTML代码压缩',
- 'desc' => '启用 【开启后,将压缩网页HTML代码,可读性会降低,但是性能略有提升】',
- 'id' => 'git_compress',
- 'type' => 'checkbox'
- ],
+ 'name' => 'HTML代码压缩',
+ 'desc' => '启用 【开启后,将压缩网页HTML代码,可读性会降低,但是性能略有提升】',
+ 'id' => 'gdk_compress',
+ 'type' => 'checkbox'
+ ],
+ [
+ 'name' => '图片懒加载',
+ 'desc' => '启用 【开启后,网站图片将进行懒加载】',
+ 'id' => 'gdk_lazyload',
+ 'type' => 'checkbox'
+ ],
[
- 'name' => '图片懒加载',
- 'desc' => '启用 【开启后,网站图片将进行懒加载】',
- 'id' => 'git_lazyload',
- 'type' => 'checkbox'
- ],
- [
'name' => '侧边栏缓存',
'desc' => '启用 【开启后,将会自动缓存小工具,如果想禁止缓存某个小工具,可以去小工具页面排除】',
'id' => 'git_sidebar_cache',
diff --git a/framework/plugin-options.php b/framework/plugin-options.php
index 3112ad6..6c6be01 100644
--- a/framework/plugin-options.php
+++ b/framework/plugin-options.php
@@ -361,8 +361,9 @@ depend('gdk_lock_login','#row-gdk_failed_login_limit,#row-gdk_lockout_duration')
depend('gdk_smtp','#row-gdk_smtp_username,#row-gdk_smtp_host,#row-gdk_smtp_port,#row-gdk_smtp_mail,#row-gdk_smtp_password');
depend('gdk_baidu_push','#row-gdk_baidu_api');
depend('gdk_tag_link','#row-gdk_tag_num');
-depend('gdk_cdn','#row-gdk_cdn_host,#row-gdk_cdn_ext,#row-gdk_cdn_dir,#row-gdk_cdn_style,#row-git_cdn_water');
+depend('gdk_cdn','#row-gdk_cdn_host,#row-gdk_cdn_ext,#row-gdk_cdn_dir,#row-gdk_cdn_style,#row-gdk_cdn_water');
depend('gdk_h5notice','#row-git_notification_title,#row-git_notification_days,#row-git_notification_cookie,#row-git_notification_icon,#row-git_notification_link,#row-git_notification_body');
+depend('gdk_payjs','#row-gdk_rate,#row-git_payjs_rate,#row-gdk_payjs_id,#row-gdk_payjs_key');
});
diff --git a/functions/optimization.php b/functions/optimization.php
index 3efc37d..642a10b 100644
--- a/functions/optimization.php
+++ b/functions/optimization.php
@@ -44,6 +44,7 @@ add_action('login_head', 'gdk_wps_login_error');
add_filter('pre_option_link_manager_enabled', '__return_true');
add_filter('show_admin_bar', '__return_false');
+add_filter('run_wptexturize', '__return_false');
//移除 WP_Head 无关紧要的代码
if(gdk_option('gdk_diasble_head_useless')){
diff --git a/functions/shortcode.php b/functions/shortcode.php
index b7f3a56..71cb74f 100644
--- a/functions/shortcode.php
+++ b/functions/shortcode.php
@@ -261,6 +261,43 @@ function git_list_shortcode_handler($atts, $content = '') {
add_shortcode('list', 'git_list_shortcode_handler');
+//表格短代码
+function table_shortcode_handler( $atts, $content='' ) {
+ extract( shortcode_atts( ['width' => '100%'], $atts ) );
+ $output = '';
+ $content = trim($content);
+ $trs = explode("\r\n", $content);
+ $ths = explode(" ", $trs[0]);//表头数组
+ $output .= '';
+ //var_dump($ths);
+ foreach($ths as $th){
+ $output .= ''.$th.' | ';
+ }
+ $output .= '
';
+ $output .= '';
+ unset($trs[0]);
+ foreach($trs as $tr){
+ $tr = trim($tr);
+ if($tr){
+ $tds = explode(" ", $tr);
+ $output .= '';
+ foreach($tds as $td){
+ $td = trim($td);
+ if($td){
+ $output .= ''.$td.' | ';
+ }
+ }
+ $output .= '
';
+ }
+ }
+ $output .= '';
+ $width = ' width="'.$width.'"';
+ $output = '';
+
+ return $output;
+}
+add_shortcode( 'table', 'table_shortcode_handler' );
+
//WordPress 段代码按钮集合
function gdk_shortcode_list() {
$wpshortcodes = [
diff --git a/gdk_route.php b/gdk_route.php
index 471682d..ef7f206 100644
--- a/gdk_route.php
+++ b/gdk_route.php
@@ -26,7 +26,7 @@ define('GDK_BASE_URL', plugin_dir_url( __FILE__ ) );//插件目录url
define('GDK_ROOT_PATH', plugin_dir_path( __FILE__ ) );//插件目录路径
//加载各种资源
-include('class/class_load.php');//加载各种类
include('framework/frame_load.php');//加载后台框架
+include('class/class_load.php');//加载各种类
include('functions/func_load.php');//加载函数
include('assets/assets_load.php');//加载静态资源