diff --git a/app/Http/Admin/Views/setting/im.volt b/app/Http/Admin/Views/setting/im.volt
index 6da90545..82ef7a8d 100644
--- a/app/Http/Admin/Views/setting/im.volt
+++ b/app/Http/Admin/Views/setting/im.volt
@@ -4,9 +4,8 @@
- - 基本信息
+ - 基本设置
- 在线客服
- - 聊天机器人
@@ -15,9 +14,6 @@
{{ partial('setting/im_cs') }}
-
- {{ partial('setting/im_robot') }}
-
diff --git a/app/Http/Admin/Views/setting/im_robot.volt b/app/Http/Admin/Views/setting/im_robot.volt
deleted file mode 100644
index 3625709c..00000000
--- a/app/Http/Admin/Views/setting/im_robot.volt
+++ /dev/null
@@ -1,34 +0,0 @@
-
\ No newline at end of file
diff --git a/app/Http/Desktop/Controllers/UserController.php b/app/Http/Desktop/Controllers/UserController.php
index 9b66284d..4ea12c97 100644
--- a/app/Http/Desktop/Controllers/UserController.php
+++ b/app/Http/Desktop/Controllers/UserController.php
@@ -24,7 +24,7 @@ class UserController extends Controller
$user = $service->handle($id);
- $this->seo->prependTitle("{$user['name']}的个人主页");
+ $this->seo->prependTitle([$user['name'], '个人主页']);
$this->view->setVar('user', $user);
}
diff --git a/app/Http/Desktop/Views/chapter/live.volt b/app/Http/Desktop/Views/chapter/live.volt
index 46bfd4b4..7d9851a4 100644
--- a/app/Http/Desktop/Views/chapter/live.volt
+++ b/app/Http/Desktop/Views/chapter/live.volt
@@ -2,7 +2,7 @@
{% block content %}
- {% set chapter_full_url = full_url({'for':'desktop.chapter.show','id':chapter.id}) %}
+ {% set full_chapter_url = full_url({'for':'desktop.chapter.show','id':chapter.id}) %}
{% set course_url = url({'for':'desktop.course.show','id':chapter.course.id}) %}
{% set learning_url = url({'for':'desktop.chapter.learning','id':chapter.id}) %}
{% set live_chats_url = url({'for':'desktop.live.chats','id':chapter.id}) %}
@@ -10,7 +10,7 @@
{% set send_msg_url = url({'for':'desktop.live.send_msg','id':chapter.id}) %}
{% set bind_user_url = url({'for':'desktop.live.bind_user','id':chapter.id}) %}
{% set like_url = url({'for':'desktop.chapter.like','id':chapter.id}) %}
- {% set qrcode_url = url({'for':'desktop.qrcode'},{'text':chapter_full_url}) %}
+ {% set qrcode_url = url({'for':'desktop.qrcode'},{'text':full_chapter_url}) %}
@@ -62,7 +62,7 @@
-
+
diff --git a/app/Http/Desktop/Views/chapter/read.volt b/app/Http/Desktop/Views/chapter/read.volt
index ee403386..7158df0a 100644
--- a/app/Http/Desktop/Views/chapter/read.volt
+++ b/app/Http/Desktop/Views/chapter/read.volt
@@ -2,12 +2,12 @@
{% block content %}
- {% set chapter_full_url = full_url({'for':'desktop.chapter.show','id':chapter.id}) %}
+ {% set full_chapter_url = full_url({'for':'desktop.chapter.show','id':chapter.id}) %}
{% set course_url = url({'for':'desktop.course.show','id':chapter.course.id}) %}
{% set learning_url = url({'for':'desktop.chapter.learning','id':chapter.id}) %}
{% set like_url = url({'for':'desktop.chapter.like','id':chapter.id}) %}
{% set consult_url = url({'for':'desktop.consult.add'},{'chapter_id':chapter.id}) %}
- {% set qrcode_url = url({'for':'desktop.qrcode'},{'text':chapter_full_url}) %}
+ {% set qrcode_url = url({'for':'desktop.qrcode'},{'text':full_chapter_url}) %}
@@ -43,7 +43,7 @@
-
+
diff --git a/app/Http/Desktop/Views/chapter/vod.volt b/app/Http/Desktop/Views/chapter/vod.volt
index 56f3dc47..d837c02f 100644
--- a/app/Http/Desktop/Views/chapter/vod.volt
+++ b/app/Http/Desktop/Views/chapter/vod.volt
@@ -2,11 +2,11 @@
{% block content %}
- {% set chapter_full_url = full_url({'for':'desktop.chapter.show','id':chapter.id}) %}
+ {% set full_chapter_url = full_url({'for':'desktop.chapter.show','id':chapter.id}) %}
{% set course_url = url({'for':'desktop.course.show','id':chapter.course.id}) %}
{% set learning_url = url({'for':'desktop.chapter.learning','id':chapter.id}) %}
{% set like_url = url({'for':'desktop.chapter.like','id':chapter.id}) %}
- {% set qrcode_url = url({'for':'desktop.qrcode'},{'text':chapter_full_url}) %}
+ {% set qrcode_url = url({'for':'desktop.qrcode'},{'text':full_chapter_url}) %}
{% set consult_url = url({'for':'desktop.consult.add'},{'chapter_id':chapter.id}) %}
{% set liked_class = chapter.me.liked ? 'active' : '' %}
@@ -48,7 +48,7 @@
-
+
diff --git a/app/Http/Desktop/Views/macros/user.volt b/app/Http/Desktop/Views/macros/user.volt
index 90a9df36..44da804c 100644
--- a/app/Http/Desktop/Views/macros/user.volt
+++ b/app/Http/Desktop/Views/macros/user.volt
@@ -2,4 +2,12 @@
{% if value == 1 %}
宾
{% endif %}
+{%- endmacro %}
+
+{%- macro gender_info(value) %}
+ {% if value == 1 %}
+
+ {% elseif value == 2 %}
+
+ {% endif %}
{%- endmacro %}
\ No newline at end of file
diff --git a/app/Http/Desktop/Views/user/show.volt b/app/Http/Desktop/Views/user/show.volt
index af8acdd6..9a6b107f 100644
--- a/app/Http/Desktop/Views/user/show.volt
+++ b/app/Http/Desktop/Views/user/show.volt
@@ -3,15 +3,32 @@
{% block content %}
{{ partial('macros/course') }}
+ {{ partial('macros/user') }}
- {% set vip_flag = user.vip ? '' : '' %}
+ {% set full_user_url = full_url({'for':'desktop.user.show','id':user.id}) %}
+ {% set qrcode_url = url({'for':'desktop.qrcode'},{'text':full_user_url}) %}
+
+
+ {{ vip_info(user.vip) }}
-
{{ user.name }} {{ vip_flag }}
+
{{ user.name }}{{ gender_info(user.gender) }}
{{ user.location }}
{{ date('Y-m-d H:i',user.active_time) }}
@@ -59,11 +76,19 @@
+
+
+
+
+
+
+
{% endblock %}
{% block include_js %}
{{ js_include('desktop/js/user.show.js') }}
+ {{ js_include('desktop/js/user.share.js') }}
{{ js_include('desktop/js/im.apply.js') }}
{% endblock %}
\ No newline at end of file
diff --git a/app/Library/Collection.php b/app/Library/Collection.php
deleted file mode 100644
index dfb16ed2..00000000
--- a/app/Library/Collection.php
+++ /dev/null
@@ -1,524 +0,0 @@
-
-// +----------------------------------------------------------------------
-
-namespace App\Library;
-
-use ArrayAccess;
-use ArrayIterator;
-use Countable;
-use IteratorAggregate;
-use JsonSerializable;
-
-class Collection implements ArrayAccess, Countable, IteratorAggregate, JsonSerializable
-{
-
- protected $items = [];
-
- public function __construct($items = [])
- {
- $this->items = $this->convertToArray($items);
- }
-
- public static function make($items = [])
- {
- return new static($items);
- }
-
- public function isEmpty()
- {
- return empty($this->items);
- }
-
- public function toArray()
- {
- return array_map(function ($value) {
- return ($value instanceof self) ? $value->toArray() : $value;
- }, $this->items);
- }
-
- public function all()
- {
- return $this->items;
- }
-
- /**
- * 合并数组
- *
- * @param mixed $items
- * @return static
- */
- public function merge($items)
- {
- return new static(array_merge($this->items, $this->convertToArray($items)));
- }
-
- /**
- * 交换数组中的键和值
- *
- * @return static
- */
- public function flip()
- {
- return new static(array_flip($this->items));
- }
-
- /**
- * 按指定键整理数据
- *
- * @param mixed $items 数据
- * @param string $indexKey 键名
- * @return array
- */
- public function dictionary($items = null, &$indexKey = null)
- {
- if ($items instanceof self) {
- $items = $items->all();
- }
-
- $items = is_null($items) ? $this->items : $items;
-
- if (isset($indexKey) && is_string($indexKey)) {
- return array_column($items, null, $indexKey);
- }
-
- return $items;
- }
-
- /**
- * 比较数组,返回差集
- *
- * @param mixed $items 数据
- * @param string $indexKey 指定比较的键名
- * @return static
- */
- public function diff($items, $indexKey = null)
- {
- if ($this->isEmpty() || is_scalar($this->items[0])) {
- return new static(array_diff($this->items, $this->convertToArray($items)));
- }
-
- $diff = [];
-
- $dictionary = $this->dictionary($items, $indexKey);
-
- if (is_string($indexKey)) {
- foreach ($this->items as $item) {
- if (!isset($dictionary[$item[$indexKey]])) {
- $diff[] = $item;
- }
- }
- }
-
- return new static($diff);
- }
-
- /**
- * 比较数组,返回交集
- *
- * @param mixed $items 数据
- * @param string $indexKey 指定比较的键名
- * @return static
- */
- public function intersect($items, $indexKey = null)
- {
- if ($this->isEmpty() || is_scalar($this->items[0])) {
- return new static(array_diff($this->items, $this->convertToArray($items)));
- }
-
- $intersect = [];
-
- $dictionary = $this->dictionary($items, $indexKey);
-
- if (is_string($indexKey)) {
- foreach ($this->items as $item) {
- if (isset($dictionary[$item[$indexKey]])) {
- $intersect[] = $item;
- }
- }
- }
-
- return new static($intersect);
- }
-
- /**
- * 返回数组中所有的键名
- *
- * @return array
- */
- public function keys()
- {
- $current = current($this->items);
-
- if (is_scalar($current)) {
- $array = $this->items;
- } elseif (is_array($current)) {
- $array = $current;
- } else {
- $array = $current->toArray();
- }
-
- return array_keys($array);
- }
-
- /**
- * 删除数组的最后一个元素(出栈)
- *
- * @return mixed
- */
- public function pop()
- {
- return array_pop($this->items);
- }
-
- /**
- * 通过使用用户自定义函数,以字符串返回数组
- *
- * @param callable $callback
- * @param mixed $initial
- * @return mixed
- */
- public function reduce(callable $callback, $initial = null)
- {
- return array_reduce($this->items, $callback, $initial);
- }
-
- /**
- * 以相反的顺序返回数组。
- *
- * @return static
- */
- public function reverse()
- {
- return new static(array_reverse($this->items));
- }
-
- /**
- * 删除数组中首个元素,并返回被删除元素的值
- *
- * @return mixed
- */
- public function shift()
- {
- return array_shift($this->items);
- }
-
- /**
- * 在数组结尾插入一个元素
- *
- * @param mixed $value
- * @param mixed $key
- * @return void
- */
- public function push($value, $key = null)
- {
- if (is_null($key)) {
- $this->items[] = $value;
- } else {
- $this->items[$key] = $value;
- }
- }
-
- /**
- * 把一个数组分割为新的数组块.
- *
- * @param int $size
- * @param bool $preserveKeys
- * @return static
- */
- public function chunk($size, $preserveKeys = false)
- {
- $chunks = [];
-
- foreach (array_chunk($this->items, $size, $preserveKeys) as $chunk) {
- $chunks[] = new static($chunk);
- }
-
- return new static($chunks);
- }
-
- /**
- * 在数组开头插入一个元素
- *
- * @param mixed $value
- * @param mixed $key
- * @return void
- */
- public function unshift($value, $key = null)
- {
- if (is_null($key)) {
- array_unshift($this->items, $value);
- } else {
- $this->items = [$key => $value] + $this->items;
- }
- }
-
- /**
- * 给每个元素执行个回调
- *
- * @param callable $callback
- * @return $this
- */
- public function each(callable $callback)
- {
- foreach ($this->items as $key => $item) {
- $result = $callback($item, $key);
- if (false === $result) {
- break;
- } elseif (!is_object($item)) {
- $this->items[$key] = $result;
- }
- }
-
- return $this;
- }
-
- /**
- * 用回调函数处理数组中的元素
- *
- * @param callable|null $callback
- * @return static
- */
- public function map(callable $callback)
- {
- return new static(array_map($callback, $this->items));
- }
-
- /**
- * 用回调函数过滤数组中的元素
- *
- * @param callable|null $callback
- * @return static
- */
- public function filter(callable $callback = null)
- {
- if ($callback) {
- return new static(array_filter($this->items, $callback));
- }
-
- return new static(array_filter($this->items));
- }
-
- /**
- * 根据字段条件过滤数组中的元素
- *
- * @param string $field 字段名
- * @param mixed $operator 操作符
- * @param mixed $value 数据
- * @return static
- */
- public function where($field, $operator, $value = null)
- {
- if (is_null($value)) {
- $value = $operator;
- $operator = '=';
- }
-
- return $this->filter(function ($data) use ($field, $operator, $value) {
-
- if (strpos($field, '.')) {
- list($field, $relation) = explode('.', $field);
- $result = isset($data[$field][$relation]) ? $data[$field][$relation] : null;
- } else {
- $result = isset($data[$field]) ? $data[$field] : null;
- }
-
- switch ($operator) {
- case '===':
- return $result === $value;
- case '!==':
- return $result !== $value;
- case '!=':
- case '<>':
- return $result != $value;
- case '>':
- return $result > $value;
- case '>=':
- return $result >= $value;
- case '<':
- return $result < $value;
- case '<=':
- return $result <= $value;
- case 'like':
- return is_string($result) && false !== strpos($result, $value);
- case 'not_like':
- return is_string($result) && false === strpos($result, $value);
- case 'in':
- return is_scalar($result) && in_array($result, $value, true);
- case 'not_in':
- return is_scalar($result) && !in_array($result, $value, true);
- case 'between':
- list($min, $max) = is_string($value) ? explode(',', $value) : $value;
- return is_scalar($result) && $result >= $min && $result <= $max;
- case 'not_between':
- list($min, $max) = is_string($value) ? explode(',', $value) : $value;
- return is_scalar($result) && $result > $max || $result < $min;
- case '==':
- case '=':
- default:
- return $result == $value;
- }
- });
- }
-
- /**
- * 返回数据中指定的一列
- *
- * @param mixed $columnKey 键名
- * @param mixed $indexKey 作为索引值的列
- * @return array
- */
- public function column($columnKey, $indexKey = null)
- {
- return array_column($this->items, $columnKey, $indexKey);
- }
-
- /**
- * 对数组排序
- *
- * @access public
- * @param callable|null $callback
- * @return static
- */
- public function sort(callable $callback = null)
- {
- $items = $this->items;
-
- $callback = $callback ?: function ($a, $b) {
- return $a == $b ? 0 : (($a < $b) ? -1 : 1);
- };
-
- uasort($items, $callback);
-
- return new static($items);
- }
-
- /**
- * 指定字段排序
- *
- * @param string $field 排序字段
- * @param string $order 排序
- * @param bool $intSort 是否为数字排序
- * @return $this
- */
- public function order($field, $order = null, $intSort = true)
- {
- return $this->sort(function ($a, $b) use ($field, $order, $intSort) {
-
- $fieldA = isset($a[$field]) ? $a[$field] : null;
- $fieldB = isset($b[$field]) ? $b[$field] : null;
-
- if ($intSort) {
- return 'desc' == strtolower($order) ? $fieldB >= $fieldA : $fieldA >= $fieldB;
- } else {
- return 'desc' == strtolower($order) ? strcmp($fieldB, $fieldA) : strcmp($fieldA, $fieldB);
- }
- });
- }
-
- /**
- * 将数组打乱
- *
- * @return static
- */
- public function shuffle()
- {
- $items = $this->items;
-
- shuffle($items);
-
- return new static($items);
- }
-
- /**
- * 截取数组
- *
- * @param int $offset
- * @param int $length
- * @param bool $preserveKeys
- * @return static
- */
- public function slice($offset, $length = null, $preserveKeys = false)
- {
- return new static(array_slice($this->items, $offset, $length, $preserveKeys));
- }
-
- public function offsetExists($offset)
- {
- return array_key_exists($offset, $this->items);
- }
-
- public function offsetGet($offset)
- {
- return $this->items[$offset];
- }
-
- public function offsetSet($offset, $value)
- {
- if (is_null($offset)) {
- $this->items[] = $value;
- } else {
- $this->items[$offset] = $value;
- }
- }
-
- public function offsetUnset($offset)
- {
- unset($this->items[$offset]);
- }
-
- public function count()
- {
- return count($this->items);
- }
-
- public function getIterator()
- {
- return new ArrayIterator($this->items);
- }
-
- public function jsonSerialize()
- {
- return $this->toArray();
- }
-
- /**
- * 转换当前数据集为JSON字符串
- *
- * @param integer $options json参数
- * @return string
- */
- public function toJson($options = JSON_UNESCAPED_UNICODE)
- {
- return json_encode($this->toArray(), $options);
- }
-
- public function __toString()
- {
- return $this->toJson();
- }
-
- /**
- * 转换成数组
- *
- * @param mixed $items
- * @return array
- */
- protected function convertToArray($items)
- {
- if ($items instanceof self) {
- return $items->all();
- }
-
- return (array)$items;
- }
-
-}
diff --git a/app/Models/AccessToken.php b/app/Models/AccessToken.php
deleted file mode 100644
index f3ff5b05..00000000
--- a/app/Models/AccessToken.php
+++ /dev/null
@@ -1,72 +0,0 @@
-id = $this->getRandId($this->user_id);
-
- $this->create_time = time();
- }
-
- public function beforeUpdate()
- {
- $this->update_time = time();
- }
-
- protected function getRandId($userId, $prefix = 'AT')
- {
- return md5("{$prefix}-{$userId}" . time() . rand(1000, 9999));
- }
-
-}
diff --git a/app/Models/Area.php b/app/Models/Area.php
index 03684821..9eeb2d70 100644
--- a/app/Models/Area.php
+++ b/app/Models/Area.php
@@ -8,9 +8,9 @@ class Area extends Model
/**
* 区域类型
*/
- const TYPE_PROVINCE = 'province';
- const TYPE_CITY = 'city';
- const TYPE_COUNTY = 'county';
+ const TYPE_PROVINCE = 1; // 省
+ const TYPE_CITY = 2; // 市
+ const TYPE_COUNTY = 3; // 区
/**
* 主键
@@ -22,7 +22,7 @@ class Area extends Model
/**
* 类型
*
- * @var string
+ * @var int
*/
public $type;
diff --git a/app/Models/Chapter.php b/app/Models/Chapter.php
index a75fc5d7..a08670d3 100644
--- a/app/Models/Chapter.php
+++ b/app/Models/Chapter.php
@@ -111,6 +111,20 @@ class Chapter extends Model
*/
public $attrs;
+ /**
+ * 发布标识
+ *
+ * @var int
+ */
+ public $published;
+
+ /**
+ * 删除标识
+ *
+ * @var int
+ */
+ public $deleted;
+
/**
* 课时数
*
@@ -139,20 +153,6 @@ class Chapter extends Model
*/
public $like_count;
- /**
- * 发布标识
- *
- * @var int
- */
- public $published;
-
- /**
- * 删除标识
- *
- * @var int
- */
- public $deleted;
-
/**
* 创建时间
*
diff --git a/app/Models/Consult.php b/app/Models/Consult.php
index 389ec65b..25f1beba 100644
--- a/app/Models/Consult.php
+++ b/app/Models/Consult.php
@@ -56,13 +56,6 @@ class Consult extends Model
*/
public $answer;
- /**
- * 赞成数
- *
- * @var int
- */
- public $like_count;
-
/**
* 优先级
*
@@ -91,6 +84,13 @@ class Consult extends Model
*/
public $deleted;
+ /**
+ * 赞成数
+ *
+ * @var int
+ */
+ public $like_count;
+
/**
* 回复时间
*
diff --git a/app/Models/Course.php b/app/Models/Course.php
index b33d77d1..dc51a1df 100644
--- a/app/Models/Course.php
+++ b/app/Models/Course.php
@@ -165,6 +165,20 @@ class Course extends Model
*/
public $attrs;
+ /**
+ * 发布标识
+ *
+ * @var int
+ */
+ public $published;
+
+ /**
+ * 删除标识
+ *
+ * @var int
+ */
+ public $deleted;
+
/**
* 学员数
*
@@ -207,20 +221,6 @@ class Course extends Model
*/
public $favorite_count;
- /**
- * 发布标识
- *
- * @var int
- */
- public $published;
-
- /**
- * 删除标识
- *
- * @var int
- */
- public $deleted;
-
/**
* 创建时间
*
diff --git a/app/Models/Learning.php b/app/Models/Learning.php
index 6197defe..5652141e 100644
--- a/app/Models/Learning.php
+++ b/app/Models/Learning.php
@@ -69,6 +69,13 @@ class Learning extends Model
*/
public $position;
+ /**
+ * 删除标识
+ *
+ * @var int
+ */
+ public $deleted;
+
/**
* 客户端类型
*
@@ -83,13 +90,6 @@ class Learning extends Model
*/
public $client_ip;
- /**
- * 删除标识
- *
- * @var int
- */
- public $deleted;
-
/**
* 活跃时间
*
diff --git a/app/Models/Order.php b/app/Models/Order.php
index 6dbb8fda..6d01adaa 100644
--- a/app/Models/Order.php
+++ b/app/Models/Order.php
@@ -166,8 +166,6 @@ class Order extends Model
if (is_array($this->item_info)) {
$this->item_info = kg_json_encode($this->item_info);
- } else {
- $this->item_info = ''; // text类型不会自动填充默认值
}
}
diff --git a/app/Models/RefreshToken.php b/app/Models/RefreshToken.php
deleted file mode 100644
index a7929abc..00000000
--- a/app/Models/RefreshToken.php
+++ /dev/null
@@ -1,72 +0,0 @@
-id = $this->getRandId($this->user_id);
-
- $this->create_time = time();
- }
-
- public function beforeUpdate()
- {
- $this->update_time = time();
- }
-
- protected function getRandId($userId, $prefix = 'RT')
- {
- return md5("{$prefix}-{$userId}" . time() . rand(1000, 9999));
- }
-
-}
diff --git a/app/Models/Review.php b/app/Models/Review.php
index 807791f8..46b0562b 100644
--- a/app/Models/Review.php
+++ b/app/Models/Review.php
@@ -70,13 +70,6 @@ class Review extends Model
*/
public $rating3;
- /**
- * 点赞数量
- *
- * @var int
- */
- public $like_count;
-
/**
* 匿名标识
*
@@ -98,6 +91,13 @@ class Review extends Model
*/
public $deleted;
+ /**
+ * 点赞数量
+ *
+ * @var int
+ */
+ public $like_count;
+
/**
* 创建时间
*
diff --git a/app/Models/Task.php b/app/Models/Task.php
index 7127542e..71381a77 100644
--- a/app/Models/Task.php
+++ b/app/Models/Task.php
@@ -102,8 +102,6 @@ class Task extends Model
if (!empty($this->item_info)) {
$this->item_info = kg_json_encode($this->item_info);
- } else {
- $this->item_info = ''; // text类型不会自动填充默认值
}
}
diff --git a/app/Repos/AccessToken.php b/app/Repos/AccessToken.php
deleted file mode 100644
index 307cf7e1..00000000
--- a/app/Repos/AccessToken.php
+++ /dev/null
@@ -1,45 +0,0 @@
- 'id = :id:',
- 'bind' => ['id' => $id],
- ]);
- }
-
- /**
- * @param int $userId
- * @return ResultsetInterface|Resultset|AccessTokenModel[]
- */
- public function findByUserId($userId)
- {
- return AccessTokenModel::query()
- ->where('user_id = :user_id:', ['user_id' => $userId])
- ->andWhere('deleted = 0')
- ->execute();
- }
-
- public function countByUserId($userId)
- {
- return AccessTokenModel::count([
- 'conditions' => 'user_id = :user_id: AND deleted = 0',
- 'bind' => ['user_id' => $userId],
- ]);
- }
-
-}
diff --git a/app/Repos/RefreshToken.php b/app/Repos/RefreshToken.php
deleted file mode 100644
index df831a09..00000000
--- a/app/Repos/RefreshToken.php
+++ /dev/null
@@ -1,45 +0,0 @@
- 'id = :id:',
- 'bind' => ['id' => $id],
- ]);
- }
-
- /**
- * @param int $userId
- * @return ResultsetInterface|Resultset|RefreshTokenModel[]
- */
- public function findByUserId($userId)
- {
- return RefreshTokenModel::query()
- ->where('user_id = :user_id:', ['user_id' => $userId])
- ->andWhere('deleted = 0')
- ->execute();
- }
-
- public function countByUserId($userId)
- {
- return (int)RefreshTokenModel::count([
- 'conditions' => 'user_id = :user_id: AND deleted = 0',
- 'bind' => ['user_id' => $userId],
- ]);
- }
-
-}
diff --git a/app/Services/Auth.php b/app/Services/Auth.php
index e866553d..dada6e74 100644
--- a/app/Services/Auth.php
+++ b/app/Services/Auth.php
@@ -9,9 +9,6 @@ abstract class Auth extends Service
abstract function saveAuthInfo(UserModel $user);
- /**
- * @return array|null
- */
abstract function getAuthInfo();
abstract function clearAuthInfo();
diff --git a/app/Services/Auth/Api.php b/app/Services/Auth/Api.php
index 5f4bd87c..4ccdd3f9 100644
--- a/app/Services/Auth/Api.php
+++ b/app/Services/Auth/Api.php
@@ -2,56 +2,41 @@
namespace App\Services\Auth;
-use App\Library\Cache\Backend\Redis as RedisCache;
-use App\Models\AccessToken as AccessTokenModel;
-use App\Models\RefreshToken as RefreshTokenModel;
use App\Models\User as UserModel;
use App\Services\Auth as AuthService;
+use Lcobucci\JWT\Builder as JwtBuilder;
+use Lcobucci\JWT\Parser as JwtParser;
+use Lcobucci\JWT\Signer\Hmac\Sha256 as JwtSingerSha256;
+use Lcobucci\JWT\Signer\Key as JwtSingerKey;
+use Lcobucci\JWT\ValidationData as JwtValidationData;
class Api extends AuthService
{
public function saveAuthInfo(UserModel $user)
{
- $config = $this->getDI()->get('config');
+ $builder = new JwtBuilder();
- $accessToken = new AccessTokenModel();
- $accessToken->user_id = $user->id;
- $accessToken->expiry_time = time() + $config->access_token->lifetime;
- $accessToken->create();
+ $config = $this->getConfig();
- $refreshToken = new RefreshTokenModel();
- $refreshToken->user_id = $user->id;
- $refreshToken->expiry_time = time() + $config->refresh_token->lifetime;
- $refreshToken->create();
+ $expireTime = time() + $config->jwt->lifetime;
- $authInfo = [
- 'id' => $user->id,
- 'name' => $user->name,
- ];
+ $builder->expiresAt($expireTime);
+ $builder->withClaim('user_id', $user->id);
+ $builder->withClaim('user_name', $user->name);
- $cache = $this->getCache();
+ $singer = new JwtSingerSha256();
- $key = $this->getCacheKey($accessToken->id);
+ $key = new JwtSingerKey($config->jwt->key);
- $cache->save($key, $authInfo, $config->access_token->lifetime);
+ $token = $builder->getToken($singer, $key);
- return [
- 'access_token' => $accessToken->id,
- 'refresh_token' => $refreshToken->id,
- 'expiry_time' => $accessToken->expiry_time,
- ];
+ return $token->__toString();
}
public function clearAuthInfo()
{
- $authToken = $this->getAuthToken();
- $cache = $this->getCache();
-
- $key = $this->getCacheKey($authToken);
-
- $cache->delete($key);
}
public function getAuthInfo()
@@ -60,31 +45,40 @@ class Api extends AuthService
if (!$authToken) return null;
- $cache = $this->getCache();
+ $config = $this->getConfig();
- $key = $this->getCacheKey($authToken);
+ $parser = new JWTParser();
- $authInfo = $cache->get($key);
+ $token = $parser->parse($authToken);
- return $authInfo ?: null;
- }
+ $data = new JWTValidationData(time(), $config->jwt->leeway);
- /**
- * @return RedisCache
- */
- protected function getCache()
- {
- return $this->getDI()->get('cache');
+ if (!$token->validate($data)) {
+ return null;
+ }
+
+ $singer = new JwtSingerSha256();
+
+ if (!$token->verify($singer, $config->jwt->key)) {
+ return null;
+ }
+
+ return [
+ 'id' => $token->getClaim('user_id'),
+ 'name' => $token->getClaim('user_name'),
+ ];
}
protected function getAuthToken()
{
- return $this->request->getHeader('Authorization');
+ $authorization = $this->request->getHeader('Authorization');
+
+ return trim(str_ireplace('Bearer', '', $authorization));
}
- protected function getCacheKey($token)
+ protected function getConfig()
{
- return "access_token:{$token}";
+ return $this->getDI()->get('config');
}
}
diff --git a/app/Traits/Auth.php b/app/Traits/Auth.php
index b0abb240..57d71e7d 100644
--- a/app/Traits/Auth.php
+++ b/app/Traits/Auth.php
@@ -58,7 +58,6 @@ trait Auth
$user->id = 0;
$user->name = 'guest';
- $user->avatar = kg_ci_avatar_img_url(null);
return $user;
}
diff --git a/composer.json b/composer.json
index 97bb9846..e87ffea3 100644
--- a/composer.json
+++ b/composer.json
@@ -19,7 +19,8 @@
"hightman/xunsearch": "^1.4.14",
"aferrandini/phpqrcode": "1.0.1",
"xiaochong0302/ip2region": "^1.0",
- "robmorgan/phinx": "^0.12"
+ "robmorgan/phinx": "^0.12",
+ "lcobucci/jwt": "^3.3"
},
"require-dev": {
"phalcon/ide-stubs": "^3.4.3",
diff --git a/composer.lock b/composer.lock
index d3c840e4..3d242371 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "979b103af7fc8906a77ce87a49297421",
+ "content-hash": "5c543936b37c657c151898d56a85a006",
"packages": [
{
"name": "aferrandini/phpqrcode",
@@ -345,16 +345,16 @@
"description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
"homepage": "https://www.doctrine-project.org/projects/lexer.html",
"keywords": [
- "annotations",
- "docblock",
- "lexer",
- "parser",
- "php"
- ],
- "time": "2019-07-30T19:33:28+00:00"
- },
- {
- "name": "egulias/email-validator",
+ "annotations",
+ "docblock",
+ "lexer",
+ "parser",
+ "php"
+ ],
+ "time": "2019-07-30T19:33:28+00:00"
+ },
+ {
+ "name": "egulias/email-validator",
"version": "2.1.11",
"source": {
"type": "git",
@@ -772,15 +772,15 @@
"lib-pcre": "*",
"php": ">=5.3.0"
},
- "bin": [
- "util/xs"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.4.x-dev"
- }
- },
+ "bin": [
+ "util/xs"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4.x-dev"
+ }
+ },
"autoload": {
"classmap": [
"lib/",
@@ -811,6 +811,77 @@
],
"time": "2019-11-01T02:17:32+00:00"
},
+ {
+ "name": "lcobucci/jwt",
+ "version": "3.3.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/lcobucci/jwt.git",
+ "reference": "c1123697f6a2ec29162b82f170dd4a491f524773"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/lcobucci/jwt/zipball/c1123697f6a2ec29162b82f170dd4a491f524773",
+ "reference": "c1123697f6a2ec29162b82f170dd4a491f524773",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "ext-openssl": "*",
+ "php": "^5.6 || ^7.0"
+ },
+ "require-dev": {
+ "mikey179/vfsstream": "~1.5",
+ "phpmd/phpmd": "~2.2",
+ "phpunit/php-invoker": "~1.1",
+ "phpunit/phpunit": "^5.7 || ^7.3",
+ "squizlabs/php_codesniffer": "~2.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Lcobucci\\JWT\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Luís Otávio Cobucci Oblonczyk",
+ "email": "lcobucci@gmail.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "A simple library to work with JSON Web Token and JSON Web Signature",
+ "keywords": [
+ "JWS",
+ "jwt"
+ ],
+ "funding": [
+ {
+ "url": "https://github.com/lcobucci",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/lcobucci",
+ "type": "patreon"
+ }
+ ],
+ "time": "2020-08-20T13:22:28+00:00"
+ },
{
"name": "monolog/monolog",
"version": "2.1.1",
@@ -861,16 +932,16 @@
"ext-mbstring": "Allow to work properly with unicode symbols",
"ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
"graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
- "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
- "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
- "php-console/php-console": "Allow sending log messages to Google Chrome",
- "rollbar/rollbar": "Allow sending log messages to Rollbar",
- "ruflin/elastica": "Allow sending log messages to an Elastic Search server"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.x-dev"
+ "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
+ "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
+ "php-console/php-console": "Allow sending log messages to Google Chrome",
+ "rollbar/rollbar": "Allow sending log messages to Rollbar",
+ "ruflin/elastica": "Allow sending log messages to an Elastic Search server"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
}
},
"autoload": {
@@ -879,16 +950,16 @@
}
},
"notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
- }
- ],
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
"description": "Sends your logs to files, sockets, inboxes, databases and various web services",
"homepage": "http://github.com/Seldaek/monolog",
"keywords": [
@@ -908,57 +979,57 @@
],
"time": "2020-07-23T08:41:23+00:00"
},
+ {
+ "name": "mtdowling/cron-expression",
+ "version": "v1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mtdowling/cron-expression.git",
+ "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/9504fa9ea681b586028adaaa0877db4aecf32bad",
+ "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0|~5.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Cron\\": "src/Cron/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
{
- "name": "mtdowling/cron-expression",
- "version": "v1.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/mtdowling/cron-expression.git",
- "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/9504fa9ea681b586028adaaa0877db4aecf32bad",
- "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "php": ">=5.3.2"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.0|~5.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Cron\\": "src/Cron/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- }
- ],
- "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
- "keywords": [
- "cron",
- "schedule"
- ],
- "abandoned": "dragonmantank/cron-expression",
- "time": "2017-01-23T04:29:33+00:00"
- },
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
+ "keywords": [
+ "cron",
+ "schedule"
+ ],
+ "abandoned": "dragonmantank/cron-expression",
+ "time": "2017-01-23T04:29:33+00:00"
+ },
{
"name": "peppeocchi/php-cron-scheduler",
"version": "v2.4",
@@ -1129,16 +1200,16 @@
"Psr\\Cache\\": "src/"
}
},
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
"description": "Common interface for caching libraries",
"keywords": [
"cache",
@@ -1222,16 +1293,16 @@
}
]
},
- "require": {
- "php": ">=5.3.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
"psr-4": {
"Psr\\Http\\Message\\": "src/"
}
@@ -1248,16 +1319,16 @@
],
"description": "Common interface for HTTP messages",
"homepage": "https://github.com/php-fig/http-message",
- "keywords": [
- "http",
- "http-message",
- "psr",
- "psr-7",
- "request",
- "response"
- ],
- "time": "2016-08-06T14:39:51+00:00"
- },
+ "keywords": [
+ "http",
+ "http-message",
+ "psr",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "time": "2016-08-06T14:39:51+00:00"
+ },
{
"name": "psr/log",
"version": "1.1.3",
@@ -1278,30 +1349,30 @@
}
]
},
- "require": {
- "php": ">=5.3.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1.x-dev"
- }
- },
- "autoload": {
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "autoload": {
"psr-4": {
"Psr\\Log\\": "Psr/Log/"
}
},
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
"description": "Common interface for logging libraries",
"homepage": "https://github.com/php-fig/log",
"keywords": [
@@ -1385,16 +1456,16 @@
}
]
},
- "require": {
- "guzzlehttp/guzzle": "~6.3",
- "guzzlehttp/guzzle-services": "~1.1",
- "php": ">=5.3.0"
- },
- "type": "library",
- "autoload": {
- "psr-0": {
- "Qcloud\\Cos\\": "src/"
- }
+ "require": {
+ "guzzlehttp/guzzle": "~6.3",
+ "guzzlehttp/guzzle-services": "~1.1",
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Qcloud\\Cos\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -1634,25 +1705,25 @@
"branch-alias": {
"dev-master": "6.2-dev"
}
- },
- "autoload": {
- "files": [
- "lib/swift_required.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Chris Corbyn"
- },
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- }
- ],
+ },
+ "autoload": {
+ "files": [
+ "lib/swift_required.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Chris Corbyn"
+ },
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
"description": "Swiftmailer, free feature-rich PHP mailer",
"homepage": "https://swiftmailer.symfony.com",
"keywords": [
@@ -1935,16 +2006,16 @@
}
]
},
- "require": {
- "php": "^7.1.3",
- "symfony/event-dispatcher-contracts": "^1.1"
- },
- "conflict": {
- "symfony/dependency-injection": "<3.4"
- },
- "provide": {
- "psr/event-dispatcher-implementation": "1.0",
- "symfony/event-dispatcher-implementation": "1.1"
+ "require": {
+ "php": "^7.1.3",
+ "symfony/event-dispatcher-contracts": "^1.1"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<3.4"
+ },
+ "provide": {
+ "psr/event-dispatcher-implementation": "1.0",
+ "symfony/event-dispatcher-implementation": "1.1"
},
"require-dev": {
"psr/log": "~1.0",
@@ -2045,14 +2116,14 @@
],
"description": "Generic abstractions related to dispatching event",
"homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
"time": "2019-06-20T06:46:26+00:00"
},
{
@@ -2145,16 +2216,16 @@
}
]
},
- "require": {
- "php": "^7.1.3",
- "symfony/mime": "^4.3",
- "symfony/polyfill-mbstring": "~1.1"
- },
- "require-dev": {
- "predis/predis": "~1.0",
- "symfony/expression-language": "~3.4|~4.0"
- },
- "type": "library",
+ "require": {
+ "php": "^7.1.3",
+ "symfony/mime": "^4.3",
+ "symfony/polyfill-mbstring": "~1.1"
+ },
+ "require-dev": {
+ "predis/predis": "~1.0",
+ "symfony/expression-language": "~3.4|~4.0"
+ },
+ "type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.3-dev"
@@ -2233,16 +2304,16 @@
"license": [
"MIT"
],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
"description": "A library to manipulate MIME messages",
"homepage": "https://symfony.com",
"keywords": [
@@ -2353,16 +2424,16 @@
}
]
},
- "require": {
- "php": ">=5.3.3"
- },
- "suggest": {
- "ext-iconv": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.12-dev"
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "suggest": {
+ "ext-iconv": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.12-dev"
}
},
"autoload": {
@@ -2456,15 +2527,15 @@
],
"description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
"homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "idn",
- "intl",
- "polyfill",
- "portable",
- "shim"
- ],
- "time": "2019-08-06T08:03:45+00:00"
+ "keywords": [
+ "compatibility",
+ "idn",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "time": "2019-08-06T08:03:45+00:00"
},
{
"name": "symfony/polyfill-mbstring",
@@ -2486,22 +2557,22 @@
}
]
},
- "require": {
- "php": ">=5.3.3"
- },
- "suggest": {
- "ext-mbstring": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.18-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.18-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Mbstring\\": ""
@@ -2514,16 +2585,16 @@
"license": [
"MIT"
],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
"description": "Symfony polyfill for the Mbstring extension",
"homepage": "https://symfony.com",
"keywords": [
@@ -2549,26 +2620,26 @@
],
"time": "2020-07-14T12:35:20+00:00"
},
- {
- "name": "symfony/polyfill-php72",
- "version": "v1.12.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php72.git",
- "reference": "04ce3335667451138df4307d6a9b61565560199e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/04ce3335667451138df4307d6a9b61565560199e",
- "reference": "04ce3335667451138df4307d6a9b61565560199e",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
+ {
+ "name": "symfony/polyfill-php72",
+ "version": "v1.12.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php72.git",
+ "reference": "04ce3335667451138df4307d6a9b61565560199e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/04ce3335667451138df4307d6a9b61565560199e",
+ "reference": "04ce3335667451138df4307d6a9b61565560199e",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
"require": {
"php": ">=5.3.3"
},
@@ -2591,25 +2662,25 @@
"MIT"
],
"authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
],
- "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "time": "2019-08-06T08:03:45+00:00"
- },
+ "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "time": "2019-08-06T08:03:45+00:00"
+ },
{
"name": "symfony/polyfill-php73",
"version": "v1.18.1",
@@ -2880,16 +2951,16 @@
}
]
},
- "require": {
- "guzzlehttp/guzzle": "^6.3",
- "guzzlehttp/psr7": "^1.4",
- "php": ">=5.6.33"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/QcloudApi/QcloudApi.php"
- ],
+ "require": {
+ "guzzlehttp/guzzle": "^6.3",
+ "guzzlehttp/psr7": "^1.4",
+ "php": ">=5.6.33"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/QcloudApi/QcloudApi.php"
+ ],
"psr-4": {
"TencentCloud\\": "./src/TencentCloud"
}
@@ -3265,756 +3336,756 @@
"time": "2020-06-18T12:14:05+00:00"
}
],
- "packages-dev": [
- {
- "name": "cache/adapter-common",
- "version": "1.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-cache/adapter-common.git",
- "reference": "6320bb5f5574cb88438059b59f8708da6b6f1d32"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-cache/adapter-common/zipball/6320bb5f5574cb88438059b59f8708da6b6f1d32",
- "reference": "6320bb5f5574cb88438059b59f8708da6b6f1d32",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "cache/tag-interop": "^1.0",
- "php": "^5.6 || ^7.0",
- "psr/cache": "^1.0",
- "psr/log": "^1.0",
- "psr/simple-cache": "^1.0"
- },
- "require-dev": {
- "cache/integration-tests": "^0.16",
- "phpunit/phpunit": "^5.7.21"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Cache\\Adapter\\Common\\": ""
- }
- },
- "notification-url": "https://packagist.jp/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Aaron Scherer",
- "email": "aequasi@gmail.com",
- "homepage": "https://github.com/aequasi"
- },
- {
- "name": "Tobias Nyholm",
- "email": "tobias.nyholm@gmail.com",
- "homepage": "https://github.com/Nyholm"
- }
- ],
- "description": "Common classes for PSR-6 adapters",
- "homepage": "http://www.php-cache.com/en/latest/",
- "keywords": [
- "cache",
- "psr-6",
- "tag"
- ],
- "time": "2018-07-08T13:04:33+00:00"
+ "packages-dev": [
+ {
+ "name": "cache/adapter-common",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-cache/adapter-common.git",
+ "reference": "6320bb5f5574cb88438059b59f8708da6b6f1d32"
},
- {
- "name": "cache/filesystem-adapter",
- "version": "1.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-cache/filesystem-adapter.git",
- "reference": "d50680b6dabbe39f9831f5fc9efa61c09d936017"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-cache/filesystem-adapter/zipball/d50680b6dabbe39f9831f5fc9efa61c09d936017",
- "reference": "d50680b6dabbe39f9831f5fc9efa61c09d936017",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "cache/adapter-common": "^1.0",
- "league/flysystem": "^1.0",
- "php": "^5.6 || ^7.0",
- "psr/cache": "^1.0",
- "psr/simple-cache": "^1.0"
- },
- "provide": {
- "psr/cache-implementation": "^1.0"
- },
- "require-dev": {
- "cache/integration-tests": "^0.16",
- "phpunit/phpunit": "^5.7.21"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Cache\\Adapter\\Filesystem\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.jp/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-cache/adapter-common/zipball/6320bb5f5574cb88438059b59f8708da6b6f1d32",
+ "reference": "6320bb5f5574cb88438059b59f8708da6b6f1d32",
+ "shasum": "",
+ "mirrors": [
{
- "name": "Aaron Scherer",
- "email": "aequasi@gmail.com",
- "homepage": "https://github.com/aequasi"
- },
- {
- "name": "Tobias Nyholm",
- "email": "tobias.nyholm@gmail.com",
- "homepage": "https://github.com/Nyholm"
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
}
- ],
- "description": "A PSR-6 cache implementation using filesystem. This implementation supports tags",
- "homepage": "http://www.php-cache.com/en/latest/",
- "keywords": [
- "cache",
- "filesystem",
- "psr-6",
- "tag"
- ],
- "time": "2017-07-16T21:09:25+00:00"
+ ]
},
- {
- "name": "cache/tag-interop",
- "version": "1.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-cache/tag-interop.git",
- "reference": "c7496dd81530f538af27b4f2713cde97bc292832"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-cache/tag-interop/zipball/c7496dd81530f538af27b4f2713cde97bc292832",
- "reference": "c7496dd81530f538af27b4f2713cde97bc292832",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "php": "^5.5 || ^7.0",
- "psr/cache": "^1.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Cache\\TagInterop\\": ""
- }
- },
- "notification-url": "https://packagist.jp/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Tobias Nyholm",
- "email": "tobias.nyholm@gmail.com",
- "homepage": "https://github.com/Nyholm"
- },
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com",
- "homepage": "https://github.com/nicolas-grekas"
- }
- ],
- "description": "Framework interoperable interfaces for tags",
- "homepage": "http://www.php-cache.com/en/latest/",
- "keywords": [
- "cache",
- "psr",
- "psr6",
- "tag"
- ],
- "time": "2017-03-13T09:14:27+00:00"
+ "require": {
+ "cache/tag-interop": "^1.0",
+ "php": "^5.6 || ^7.0",
+ "psr/cache": "^1.0",
+ "psr/log": "^1.0",
+ "psr/simple-cache": "^1.0"
},
- {
- "name": "jaeger/g-http",
- "version": "V1.6.0",
- "source": {
- "type": "git",
- "url": "https://github.com/jae-jae/GHttp.git",
- "reference": "eb34d266a07c687aef45087370ef47d48321bd2e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/jae-jae/GHttp/zipball/eb34d266a07c687aef45087370ef47d48321bd2e",
- "reference": "eb34d266a07c687aef45087370ef47d48321bd2e",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "cache/filesystem-adapter": "^1.0",
- "guzzlehttp/guzzle": "^6.2"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Jaeger\\": "src"
- }
- },
- "notification-url": "https://packagist.jp/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jaeger",
- "email": "JaegerCode@gmail.com"
- }
- ],
- "description": "Simple Http client base on GuzzleHttp",
- "time": "2018-12-12T04:21:15+00:00"
+ "require-dev": {
+ "cache/integration-tests": "^0.16",
+ "phpunit/phpunit": "^5.7.21"
},
- {
- "name": "jaeger/phpquery-single",
- "version": "1.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/jae-jae/phpQuery-single.git",
- "reference": "2d607a2bcfd8bcf5c42e83d6c66fedaf397c7c3f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/jae-jae/phpQuery-single/zipball/2d607a2bcfd8bcf5c42e83d6c66fedaf397c7c3f",
- "reference": "2d607a2bcfd8bcf5c42e83d6c66fedaf397c7c3f",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "php": ">=5.3.0"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "phpQuery.php"
- ]
- },
- "notification-url": "https://packagist.jp/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Tobiasz Cudnik",
- "email": "tobiasz.cudnik@gmail.com",
- "homepage": "https://github.com/TobiaszCudnik",
- "role": "Developer"
- },
- {
- "name": "Jaeger",
- "role": "Packager"
- }
- ],
- "description": "phpQuery单文件版本,是Querylist的依赖(http://querylist.cc/),phpQuery项目主页:http://code.google.com/p/phpquery/",
- "homepage": "http://code.google.com/p/phpquery/",
- "time": "2019-02-22T07:27:45+00:00"
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ }
},
- {
- "name": "jaeger/querylist",
- "version": "V4.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/jae-jae/QueryList.git",
- "reference": "46f564bc8b1a22b5dca7cd690b4af76e919b39f7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/jae-jae/QueryList/zipball/46f564bc8b1a22b5dca7cd690b4af76e919b39f7",
- "reference": "46f564bc8b1a22b5dca7cd690b4af76e919b39f7",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "jaeger/g-http": "^1.1",
- "jaeger/phpquery-single": "^1",
- "php": ">=7.0",
- "tightenco/collect": "^5"
- },
- "require-dev": {
- "phpunit/phpunit": "^7.5",
- "symfony/var-dumper": "^3.3"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "QL\\": "src"
- }
- },
- "notification-url": "https://packagist.jp/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jaeger",
- "email": "JaegerCode@gmail.com"
- }
- ],
- "description": "Simple, elegant, extensible PHP Web Scraper (crawler/spider),Use the css3 dom selector,Based on phpQuery! 简洁、优雅、可扩展的PHP采集工具(爬虫),基于phpQuery。",
- "homepage": "http://querylist.cc",
- "keywords": [
- "QueryList",
- "phpQuery",
- "spider"
- ],
- "time": "2019-02-22T07:33:54+00:00"
+ "autoload": {
+ "psr-4": {
+ "Cache\\Adapter\\Common\\": ""
+ }
},
- {
- "name": "league/flysystem",
- "version": "1.0.63",
- "source": {
- "type": "git",
- "url": "https://github.com/thephpleague/flysystem.git",
- "reference": "8132daec326565036bc8e8d1876f77ec183a7bd6"
+ "notification-url": "https://packagist.jp/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Aaron Scherer",
+ "email": "aequasi@gmail.com",
+ "homepage": "https://github.com/aequasi"
},
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/8132daec326565036bc8e8d1876f77ec183a7bd6",
- "reference": "8132daec326565036bc8e8d1876f77ec183a7bd6",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "ext-fileinfo": "*",
- "php": ">=5.5.9"
- },
- "conflict": {
- "league/flysystem-sftp": "<1.0.6"
- },
- "require-dev": {
- "phpspec/phpspec": "^3.4",
- "phpunit/phpunit": "^5.7.10"
- },
- "suggest": {
- "ext-fileinfo": "Required for MimeType",
- "ext-ftp": "Allows you to use FTP server storage",
- "ext-openssl": "Allows you to use FTPS server storage",
- "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2",
- "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3",
- "league/flysystem-azure": "Allows you to use Windows Azure Blob storage",
- "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching",
- "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem",
- "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files",
- "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib",
- "league/flysystem-webdav": "Allows you to use WebDAV storage",
- "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter",
- "spatie/flysystem-dropbox": "Allows you to use Dropbox storage",
- "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "League\\Flysystem\\": "src/"
- }
- },
- "notification-url": "https://packagist.jp/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Frank de Jonge",
- "email": "info@frenky.net"
- }
- ],
- "description": "Filesystem abstraction: Many filesystems, one API.",
- "keywords": [
- "Cloud Files",
- "WebDAV",
- "abstraction",
- "aws",
- "cloud",
- "copy.com",
- "dropbox",
- "file systems",
- "files",
- "filesystem",
- "filesystems",
- "ftp",
- "rackspace",
- "remote",
- "s3",
- "sftp",
- "storage"
- ],
- "time": "2020-01-04T16:30:31+00:00"
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ }
+ ],
+ "description": "Common classes for PSR-6 adapters",
+ "homepage": "http://www.php-cache.com/en/latest/",
+ "keywords": [
+ "cache",
+ "psr-6",
+ "tag"
+ ],
+ "time": "2018-07-08T13:04:33+00:00"
+ },
+ {
+ "name": "cache/filesystem-adapter",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-cache/filesystem-adapter.git",
+ "reference": "d50680b6dabbe39f9831f5fc9efa61c09d936017"
},
- {
- "name": "odan/phinx-migrations-generator",
- "version": "5.1.2",
- "source": {
- "type": "git",
- "url": "https://github.com/odan/phinx-migrations-generator.git",
- "reference": "f3cb7cc6bc7eb22e85f34f229b6d476e96d99c73"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/odan/phinx-migrations-generator/zipball/f3cb7cc6bc7eb22e85f34f229b6d476e96d99c73",
- "reference": "f3cb7cc6bc7eb22e85f34f229b6d476e96d99c73",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "ext-json": "*",
- "ext-pdo": "*",
- "php": "^7.2",
- "riimu/kit-phpencoder": "^2.4",
- "robmorgan/phinx": "^0.12",
- "symfony/console": "^2.8 || ^3.0 || ^4.0 || ^5.0"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "^2.16",
- "overtrue/phplint": "^1.1",
- "phpstan/phpstan": "^0.12",
- "phpunit/phpunit": "^8 || ^9",
- "squizlabs/php_codesniffer": "^3.4"
- },
- "bin": [
- "./bin/phinx-migrations"
- ],
- "type": "library",
- "autoload": {
- "psr-4": {
- "Odan\\Migration\\": "src/Migration/"
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-cache/filesystem-adapter/zipball/d50680b6dabbe39f9831f5fc9efa61c09d936017",
+ "reference": "d50680b6dabbe39f9831f5fc9efa61c09d936017",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
}
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Migration generator for Phinx",
- "homepage": "https://github.com/odan/phinx-migrations-generator",
- "keywords": [
- "database",
- "generator",
- "migration",
- "migrations",
- "mysql",
- "phinx"
- ],
- "time": "2020-06-15T19:36:35+00:00"
+ ]
},
- {
- "name": "phalcon/ide-stubs",
- "version": "v3.4.3",
- "source": {
- "type": "git",
- "url": "https://github.com/phalcon/ide-stubs.git",
- "reference": "65144f2b0fad32b182ccb062b1efc1b4edea5d44"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phalcon/ide-stubs/zipball/65144f2b0fad32b182ccb062b1efc1b4edea5d44",
- "reference": "65144f2b0fad32b182ccb062b1efc1b4edea5d44",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "php": ">=5.3.0"
- },
- "type": "library",
- "notification-url": "https://packagist.jp/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Phalcon Team",
- "email": "team@phalconphp.com",
- "homepage": "https://phalconphp.com/en/team"
- },
- {
- "name": "Contributors",
- "homepage": "https://github.com/phalcon/ide-stubs/graphs/contributors"
- }
- ],
- "description": "The most complete Phalcon Framework IDE stubs library which enables autocompletion in modern IDEs.",
- "homepage": "https://phalconphp.com",
- "keywords": [
- "Devtools",
- "Eclipse",
- "autocomplete",
- "ide",
- "netbeans",
- "phalcon",
- "phpstorm",
- "stub",
- "stubs"
- ],
- "time": "2018-12-09T14:11:06+00:00"
+ "require": {
+ "cache/adapter-common": "^1.0",
+ "league/flysystem": "^1.0",
+ "php": "^5.6 || ^7.0",
+ "psr/cache": "^1.0",
+ "psr/simple-cache": "^1.0"
},
- {
- "name": "riimu/kit-phpencoder",
- "version": "v2.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/Riimu/Kit-PHPEncoder.git",
- "reference": "7e876d25019c3f6c23321ab5ac1a55c72fcd0933"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Riimu/Kit-PHPEncoder/zipball/7e876d25019c3f6c23321ab5ac1a55c72fcd0933",
- "reference": "7e876d25019c3f6c23321ab5ac1a55c72fcd0933",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "php": ">=5.6.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^7.2 || ^6.5 || ^5.7"
- },
- "suggest": {
- "ext-gmp": "To convert GMP numbers into PHP code"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Riimu\\Kit\\PHPEncoder\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Riikka Kalliomäki",
- "email": "riikka.kalliomaki@gmail.com",
- "homepage": "http://riimu.net"
- }
- ],
- "description": "Highly customizable alternative to var_export for PHP code generation",
- "homepage": "http://kit.riimu.net",
- "keywords": [
- "code",
- "encoder",
- "export",
- "generator",
- "variable"
- ],
- "time": "2018-07-03T12:46:23+00:00"
+ "provide": {
+ "psr/cache-implementation": "^1.0"
},
- {
- "name": "symfony/var-dumper",
- "version": "v4.4.2",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/var-dumper.git",
- "reference": "be330f919bdb395d1e0c3f2bfb8948512d6bdd99"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/be330f919bdb395d1e0c3f2bfb8948512d6bdd99",
- "reference": "be330f919bdb395d1e0c3f2bfb8948512d6bdd99",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "php": "^7.1.3",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php72": "~1.5"
- },
- "conflict": {
- "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
- "symfony/console": "<3.4"
- },
- "require-dev": {
- "ext-iconv": "*",
- "symfony/console": "^3.4|^4.0|^5.0",
- "symfony/process": "^4.4|^5.0",
- "twig/twig": "^1.34|^2.4|^3.0"
- },
- "suggest": {
- "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
- "ext-intl": "To show region name in time zone dump",
- "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
- },
- "bin": [
- "Resources/bin/var-dump-server"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.4-dev"
- }
- },
- "autoload": {
- "files": [
- "Resources/functions/dump.php"
- ],
- "psr-4": {
- "Symfony\\Component\\VarDumper\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.jp/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony mechanism for exploring and dumping PHP variables",
- "homepage": "https://symfony.com",
- "keywords": [
- "debug",
- "dump"
- ],
- "time": "2019-12-18T13:41:29+00:00"
+ "require-dev": {
+ "cache/integration-tests": "^0.16",
+ "phpunit/phpunit": "^5.7.21"
},
- {
- "name": "tightenco/collect",
- "version": "v5.8.35",
- "source": {
- "type": "git",
- "url": "https://github.com/tightenco/collect.git",
- "reference": "c93a7039e6207ad533a09109838fe80933fcc72c"
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Cache\\Adapter\\Filesystem\\": ""
},
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/tightenco/collect/zipball/c93a7039e6207ad533a09109838fe80933fcc72c",
- "reference": "c93a7039e6207ad533a09109838fe80933fcc72c",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.jp/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Aaron Scherer",
+ "email": "aequasi@gmail.com",
+ "homepage": "https://github.com/aequasi"
},
- "require": {
- "php": "^7.1.3",
- "symfony/var-dumper": ">=3.4 <5"
- },
- "require-dev": {
- "mockery/mockery": "^1.0",
- "nesbot/carbon": "^1.26.3",
- "phpunit/phpunit": "^7.0"
- },
- "type": "library",
- "autoload": {
- "files": [
- "src/Collect/Support/helpers.php",
- "src/Collect/Support/alias.php"
- ],
- "psr-4": {
- "Tightenco\\Collect\\": "src/Collect"
- }
- },
- "notification-url": "https://packagist.jp/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ }
+ ],
+ "description": "A PSR-6 cache implementation using filesystem. This implementation supports tags",
+ "homepage": "http://www.php-cache.com/en/latest/",
+ "keywords": [
+ "cache",
+ "filesystem",
+ "psr-6",
+ "tag"
+ ],
+ "time": "2017-07-16T21:09:25+00:00"
+ },
+ {
+ "name": "cache/tag-interop",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-cache/tag-interop.git",
+ "reference": "c7496dd81530f538af27b4f2713cde97bc292832"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-cache/tag-interop/zipball/c7496dd81530f538af27b4f2713cde97bc292832",
+ "reference": "c7496dd81530f538af27b4f2713cde97bc292832",
+ "shasum": "",
+ "mirrors": [
{
- "name": "Taylor Otwell",
- "email": "taylorotwell@gmail.com"
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
}
+ ]
+ },
+ "require": {
+ "php": "^5.5 || ^7.0",
+ "psr/cache": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Cache\\TagInterop\\": ""
+ }
+ },
+ "notification-url": "https://packagist.jp/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com",
+ "homepage": "https://github.com/nicolas-grekas"
+ }
+ ],
+ "description": "Framework interoperable interfaces for tags",
+ "homepage": "http://www.php-cache.com/en/latest/",
+ "keywords": [
+ "cache",
+ "psr",
+ "psr6",
+ "tag"
+ ],
+ "time": "2017-03-13T09:14:27+00:00"
+ },
+ {
+ "name": "jaeger/g-http",
+ "version": "V1.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/jae-jae/GHttp.git",
+ "reference": "eb34d266a07c687aef45087370ef47d48321bd2e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/jae-jae/GHttp/zipball/eb34d266a07c687aef45087370ef47d48321bd2e",
+ "reference": "eb34d266a07c687aef45087370ef47d48321bd2e",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "cache/filesystem-adapter": "^1.0",
+ "guzzlehttp/guzzle": "^6.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Jaeger\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.jp/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jaeger",
+ "email": "JaegerCode@gmail.com"
+ }
+ ],
+ "description": "Simple Http client base on GuzzleHttp",
+ "time": "2018-12-12T04:21:15+00:00"
+ },
+ {
+ "name": "jaeger/phpquery-single",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/jae-jae/phpQuery-single.git",
+ "reference": "2d607a2bcfd8bcf5c42e83d6c66fedaf397c7c3f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/jae-jae/phpQuery-single/zipball/2d607a2bcfd8bcf5c42e83d6c66fedaf397c7c3f",
+ "reference": "2d607a2bcfd8bcf5c42e83d6c66fedaf397c7c3f",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "phpQuery.php"
+ ]
+ },
+ "notification-url": "https://packagist.jp/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Tobiasz Cudnik",
+ "email": "tobiasz.cudnik@gmail.com",
+ "homepage": "https://github.com/TobiaszCudnik",
+ "role": "Developer"
+ },
+ {
+ "name": "Jaeger",
+ "role": "Packager"
+ }
+ ],
+ "description": "phpQuery单文件版本,是Querylist的依赖(http://querylist.cc/),phpQuery项目主页:http://code.google.com/p/phpquery/",
+ "homepage": "http://code.google.com/p/phpquery/",
+ "time": "2019-02-22T07:27:45+00:00"
+ },
+ {
+ "name": "jaeger/querylist",
+ "version": "V4.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/jae-jae/QueryList.git",
+ "reference": "46f564bc8b1a22b5dca7cd690b4af76e919b39f7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/jae-jae/QueryList/zipball/46f564bc8b1a22b5dca7cd690b4af76e919b39f7",
+ "reference": "46f564bc8b1a22b5dca7cd690b4af76e919b39f7",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "jaeger/g-http": "^1.1",
+ "jaeger/phpquery-single": "^1",
+ "php": ">=7.0",
+ "tightenco/collect": "^5"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.5",
+ "symfony/var-dumper": "^3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "QL\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.jp/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jaeger",
+ "email": "JaegerCode@gmail.com"
+ }
+ ],
+ "description": "Simple, elegant, extensible PHP Web Scraper (crawler/spider),Use the css3 dom selector,Based on phpQuery! 简洁、优雅、可扩展的PHP采集工具(爬虫),基于phpQuery。",
+ "homepage": "http://querylist.cc",
+ "keywords": [
+ "QueryList",
+ "phpQuery",
+ "spider"
+ ],
+ "time": "2019-02-22T07:33:54+00:00"
+ },
+ {
+ "name": "league/flysystem",
+ "version": "1.0.63",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/flysystem.git",
+ "reference": "8132daec326565036bc8e8d1876f77ec183a7bd6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/8132daec326565036bc8e8d1876f77ec183a7bd6",
+ "reference": "8132daec326565036bc8e8d1876f77ec183a7bd6",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-fileinfo": "*",
+ "php": ">=5.5.9"
+ },
+ "conflict": {
+ "league/flysystem-sftp": "<1.0.6"
+ },
+ "require-dev": {
+ "phpspec/phpspec": "^3.4",
+ "phpunit/phpunit": "^5.7.10"
+ },
+ "suggest": {
+ "ext-fileinfo": "Required for MimeType",
+ "ext-ftp": "Allows you to use FTP server storage",
+ "ext-openssl": "Allows you to use FTPS server storage",
+ "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2",
+ "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3",
+ "league/flysystem-azure": "Allows you to use Windows Azure Blob storage",
+ "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching",
+ "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem",
+ "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files",
+ "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib",
+ "league/flysystem-webdav": "Allows you to use WebDAV storage",
+ "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter",
+ "spatie/flysystem-dropbox": "Allows you to use Dropbox storage",
+ "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\Flysystem\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.jp/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frank de Jonge",
+ "email": "info@frenky.net"
+ }
+ ],
+ "description": "Filesystem abstraction: Many filesystems, one API.",
+ "keywords": [
+ "Cloud Files",
+ "WebDAV",
+ "abstraction",
+ "aws",
+ "cloud",
+ "copy.com",
+ "dropbox",
+ "file systems",
+ "files",
+ "filesystem",
+ "filesystems",
+ "ftp",
+ "rackspace",
+ "remote",
+ "s3",
+ "sftp",
+ "storage"
+ ],
+ "time": "2020-01-04T16:30:31+00:00"
+ },
+ {
+ "name": "odan/phinx-migrations-generator",
+ "version": "5.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/odan/phinx-migrations-generator.git",
+ "reference": "f3cb7cc6bc7eb22e85f34f229b6d476e96d99c73"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/odan/phinx-migrations-generator/zipball/f3cb7cc6bc7eb22e85f34f229b6d476e96d99c73",
+ "reference": "f3cb7cc6bc7eb22e85f34f229b6d476e96d99c73",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-pdo": "*",
+ "php": "^7.2",
+ "riimu/kit-phpencoder": "^2.4",
+ "robmorgan/phinx": "^0.12",
+ "symfony/console": "^2.8 || ^3.0 || ^4.0 || ^5.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.16",
+ "overtrue/phplint": "^1.1",
+ "phpstan/phpstan": "^0.12",
+ "phpunit/phpunit": "^8 || ^9",
+ "squizlabs/php_codesniffer": "^3.4"
+ },
+ "bin": [
+ "./bin/phinx-migrations"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Odan\\Migration\\": "src/Migration/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Migration generator for Phinx",
+ "homepage": "https://github.com/odan/phinx-migrations-generator",
+ "keywords": [
+ "database",
+ "generator",
+ "migration",
+ "migrations",
+ "mysql",
+ "phinx"
+ ],
+ "time": "2020-06-15T19:36:35+00:00"
+ },
+ {
+ "name": "phalcon/ide-stubs",
+ "version": "v3.4.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phalcon/ide-stubs.git",
+ "reference": "65144f2b0fad32b182ccb062b1efc1b4edea5d44"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phalcon/ide-stubs/zipball/65144f2b0fad32b182ccb062b1efc1b4edea5d44",
+ "reference": "65144f2b0fad32b182ccb062b1efc1b4edea5d44",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "notification-url": "https://packagist.jp/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Phalcon Team",
+ "email": "team@phalconphp.com",
+ "homepage": "https://phalconphp.com/en/team"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/phalcon/ide-stubs/graphs/contributors"
+ }
+ ],
+ "description": "The most complete Phalcon Framework IDE stubs library which enables autocompletion in modern IDEs.",
+ "homepage": "https://phalconphp.com",
+ "keywords": [
+ "Devtools",
+ "Eclipse",
+ "autocomplete",
+ "ide",
+ "netbeans",
+ "phalcon",
+ "phpstorm",
+ "stub",
+ "stubs"
+ ],
+ "time": "2018-12-09T14:11:06+00:00"
+ },
+ {
+ "name": "riimu/kit-phpencoder",
+ "version": "v2.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Riimu/Kit-PHPEncoder.git",
+ "reference": "7e876d25019c3f6c23321ab5ac1a55c72fcd0933"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Riimu/Kit-PHPEncoder/zipball/7e876d25019c3f6c23321ab5ac1a55c72fcd0933",
+ "reference": "7e876d25019c3f6c23321ab5ac1a55c72fcd0933",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=5.6.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.2 || ^6.5 || ^5.7"
+ },
+ "suggest": {
+ "ext-gmp": "To convert GMP numbers into PHP code"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Riimu\\Kit\\PHPEncoder\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Riikka Kalliomäki",
+ "email": "riikka.kalliomaki@gmail.com",
+ "homepage": "http://riimu.net"
+ }
+ ],
+ "description": "Highly customizable alternative to var_export for PHP code generation",
+ "homepage": "http://kit.riimu.net",
+ "keywords": [
+ "code",
+ "encoder",
+ "export",
+ "generator",
+ "variable"
+ ],
+ "time": "2018-07-03T12:46:23+00:00"
+ },
+ {
+ "name": "symfony/var-dumper",
+ "version": "v4.4.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/var-dumper.git",
+ "reference": "be330f919bdb395d1e0c3f2bfb8948512d6bdd99"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/be330f919bdb395d1e0c3f2bfb8948512d6bdd99",
+ "reference": "be330f919bdb395d1e0c3f2bfb8948512d6bdd99",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.1.3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php72": "~1.5"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
+ "symfony/console": "<3.4"
+ },
+ "require-dev": {
+ "ext-iconv": "*",
+ "symfony/console": "^3.4|^4.0|^5.0",
+ "symfony/process": "^4.4|^5.0",
+ "twig/twig": "^1.34|^2.4|^3.0"
+ },
+ "suggest": {
+ "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
+ "ext-intl": "To show region name in time zone dump",
+ "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
+ },
+ "bin": [
+ "Resources/bin/var-dump-server"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.4-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "Resources/functions/dump.php"
],
- "description": "Collect - Illuminate Collections as a separate package.",
- "keywords": [
- "collection",
- "laravel"
+ "psr-4": {
+ "Symfony\\Component\\VarDumper\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.jp/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony mechanism for exploring and dumping PHP variables",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "debug",
+ "dump"
+ ],
+ "time": "2019-12-18T13:41:29+00:00"
+ },
+ {
+ "name": "tightenco/collect",
+ "version": "v5.8.35",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/tightenco/collect.git",
+ "reference": "c93a7039e6207ad533a09109838fe80933fcc72c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/tightenco/collect/zipball/c93a7039e6207ad533a09109838fe80933fcc72c",
+ "reference": "c93a7039e6207ad533a09109838fe80933fcc72c",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.1.3",
+ "symfony/var-dumper": ">=3.4 <5"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.0",
+ "nesbot/carbon": "^1.26.3",
+ "phpunit/phpunit": "^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/Collect/Support/helpers.php",
+ "src/Collect/Support/alias.php"
],
- "time": "2019-09-17T18:57:01+00:00"
- }
- ],
+ "psr-4": {
+ "Tightenco\\Collect\\": "src/Collect"
+ }
+ },
+ "notification-url": "https://packagist.jp/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylorotwell@gmail.com"
+ }
+ ],
+ "description": "Collect - Illuminate Collections as a separate package.",
+ "keywords": [
+ "collection",
+ "laravel"
+ ],
+ "time": "2019-09-17T18:57:01+00:00"
+ }
+ ],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
diff --git a/config/config.default.php b/config/config.default.php
index a5714127..9fe99a0c 100644
--- a/config/config.default.php
+++ b/config/config.default.php
@@ -103,14 +103,19 @@ $config['session']['db'] = 0;
$config['session']['lifetime'] = 24 * 3600;
/**
- * 访问令牌有效期(秒)
+ * 加密密钥
*/
-$config['access_token']['lifetime'] = 2 * 3600;
+$config['jwt']['key'] = 'fu6ckEc8pv8k5K7m';
/**
- * 刷新令牌有效期(秒)
+ * 有效期(秒)
*/
-$config['refresh_token']['lifetime'] = 30 * 86400;
+$config['jwt']['lifetime'] = 7 * 86400;
+
+/**
+ * 回旋时间(秒)
+ */
+$config['jwt']['leeway'] = 30;
/**
* 限流开启
diff --git a/public/static/admin/css/common.css b/public/static/admin/css/common.css
index a0ba606c..84e64712 100644
--- a/public/static/admin/css/common.css
+++ b/public/static/admin/css/common.css
@@ -61,11 +61,15 @@
.kg-login-copyright {
margin-top: -80px;
- color: #999;
+ color: #666;
font-size: 12px;
text-align: center;
}
+.kg-login-copyright a {
+ color: #666;
+}
+
.kg-input-inline {
float: left;
width: 250px;
diff --git a/public/static/desktop/css/common.css b/public/static/desktop/css/common.css
index 4b5f4e5c..78569189 100644
--- a/public/static/desktop/css/common.css
+++ b/public/static/desktop/css/common.css
@@ -1206,12 +1206,18 @@ body {
border-radius: 100px;
}
-.user-profile .icon-vip {
- color: orange;
+.user-profile .vip {
+ position: absolute;
+ top: 10px;
+ left: 10px;
+ height: 16px;
+ padding: 0 3px;
+ font-size: 10px;
}
.user-profile .info {
float: left;
+ padding-top: 10px;
}
.user-profile .info h3 {
diff --git a/public/static/desktop/js/course.share.js b/public/static/desktop/js/course.share.js
index 9b8941b9..3ca96c2b 100644
--- a/public/static/desktop/js/course.share.js
+++ b/public/static/desktop/js/course.share.js
@@ -1,7 +1,7 @@
-layui.use(['jquery', 'layer'], function () {
+layui.use(['jquery', 'helper'], function () {
var $ = layui.jquery;
- var layer = layui.layer;
+ var helper = layui.helper;
var myShare = {
title: $('input[name="share.title"]').val(),
@@ -11,40 +11,17 @@ layui.use(['jquery', 'layer'], function () {
};
$('.icon-wechat').on('click', function () {
- var content = '';
- layer.open({
- type: 1,
- title: false,
- closeBtn: 0,
- shadeClose: true,
- content: content
- });
+ helper.wechatShare(myShare.qrcode);
});
$('.icon-qq').on('click', function () {
var title = '推荐一门好课:' + myShare.title + ',快来和我一起学习吧!';
- qqShare(title, myShare.url, myShare.pic);
+ helper.qqShare(title, myShare.url, myShare.pic);
});
$('.icon-weibo').on('click', function () {
var title = '推荐一门好课:' + myShare.title + ',快来和我一起学习吧!';
- weiboShare(title, myShare.url, myShare.pic);
+ helper.weiboShare(title, myShare.url, myShare.pic);
});
- function qqShare(title, url, pic) {
- var shareUrl = 'http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?';
- shareUrl += 'title=' + encodeURIComponent(title || document.title);
- shareUrl += '&url=' + encodeURIComponent(url || document.location);
- shareUrl += '&pics=' + pic;
- window.open(shareUrl, '_blank');
- }
-
- function weiboShare(title, url, pic) {
- var shareUrl = 'http://v.t.sina.com.cn/share/share.php?';
- shareUrl += 'title=' + encodeURIComponent(title || document.title);
- shareUrl += '&url=' + encodeURIComponent(url || document.location);
- shareUrl += '&pic=' + encodeURIComponent(pic || '');
- window.open(shareUrl, '_blank');
- }
-
});
\ No newline at end of file
diff --git a/public/static/desktop/js/user.share.js b/public/static/desktop/js/user.share.js
new file mode 100644
index 00000000..e44e90e3
--- /dev/null
+++ b/public/static/desktop/js/user.share.js
@@ -0,0 +1,27 @@
+layui.use(['jquery', 'helper'], function () {
+
+ var $ = layui.jquery;
+ var helper = layui.helper;
+
+ var myShare = {
+ title: $('input[name="share.title"]').val(),
+ pic: $('input[name="share.pic"]').val(),
+ url: $('input[name="share.url"]').val(),
+ qrcode: $('input[name="share.qrcode"]').val()
+ };
+
+ $('.icon-wechat').on('click', function () {
+ helper.wechatShare(myShare.qrcode);
+ });
+
+ $('.icon-qq').on('click', function () {
+ var title = '推荐一个有趣的朋友:' + myShare.title + ',快来和Ta一起学习吧!';
+ helper.qqShare(title, myShare.url, myShare.pic);
+ });
+
+ $('.icon-weibo').on('click', function () {
+ var title = '推荐一个有趣的朋友:' + myShare.title + ',快来和Ta一起学习吧!';
+ helper.weiboShare(title, myShare.url, myShare.pic);
+ });
+
+});
\ No newline at end of file
diff --git a/public/static/lib/layui/extends/helper.js b/public/static/lib/layui/extends/helper.js
index 717685c7..d0f9cd8e 100644
--- a/public/static/lib/layui/extends/helper.js
+++ b/public/static/lib/layui/extends/helper.js
@@ -6,6 +6,12 @@ layui.define(['jquery', 'layer'], function (exports) {
var helper = {};
+ helper.getRequestId = function () {
+ var id = Date.now().toString(36);
+ id += Math.random().toString(36).substr(3);
+ return id;
+ };
+
helper.ajaxLoadHtml = function (url, target) {
var $target = $('#' + target);
var html = '
';
@@ -32,10 +38,31 @@ layui.define(['jquery', 'layer'], function (exports) {
});
};
- helper.getRequestId = function () {
- var id = Date.now().toString(36);
- id += Math.random().toString(36).substr(3);
- return id;
+ helper.wechatShare = function (qrcode) {
+ var content = '';
+ layer.open({
+ type: 1,
+ title: false,
+ closeBtn: 0,
+ shadeClose: true,
+ content: content
+ });
+ };
+
+ helper.qqShare = function (title, url, pic) {
+ var shareUrl = 'http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?';
+ shareUrl += 'title=' + encodeURIComponent(title || document.title);
+ shareUrl += '&url=' + encodeURIComponent(url || document.location);
+ shareUrl += '&pics=' + pic;
+ window.open(shareUrl, '_blank');
+ };
+
+ helper.weiboShare = function (title, url, pic) {
+ var shareUrl = 'http://v.t.sina.com.cn/share/share.php?';
+ shareUrl += 'title=' + encodeURIComponent(title || document.title);
+ shareUrl += '&url=' + encodeURIComponent(url || document.location);
+ shareUrl += '&pic=' + encodeURIComponent(pic || '');
+ window.open(shareUrl, '_blank');
};
exports(MOD_NAME, helper);
diff --git a/public/static/lib/layui/extends/layarea.js b/public/static/lib/layui/extends/layarea.js
index aeb5b6dc..c0dc1b84 100644
--- a/public/static/lib/layui/extends/layarea.js
+++ b/public/static/lib/layui/extends/layarea.js
@@ -36,7 +36,7 @@ layui.define(['layer', 'form', 'laytpl'], function (exports) {
120000: '天津市',
130000: '河北省',
140000: '山西省',
- 150000: '内蒙古自治区',
+ 150000: '内蒙古',
210000: '辽宁省',
220000: '吉林省',
230000: '黑龙江省',
@@ -51,21 +51,21 @@ layui.define(['layer', 'form', 'laytpl'], function (exports) {
420000: '湖北省',
430000: '湖南省',
440000: '广东省',
- 450000: '广西壮族自治区',
+ 450000: '广西省',
460000: '海南省',
500000: '重庆市',
510000: '四川省',
520000: '贵州省',
530000: '云南省',
- 540000: '西藏自治区',
+ 540000: '西藏',
610000: '陕西省',
620000: '甘肃省',
630000: '青海省',
- 640000: '宁夏回族自治区',
- 650000: '新疆维吾尔自治区',
- 710000: '台湾省',
- 810000: '香港特别行政区',
- 820000: '澳门特别行政区',
+ 640000: '宁夏',
+ 650000: '新疆',
+ 710000: '台湾',
+ 810000: '香港',
+ 820000: '澳门',
900000: '海外'
},
city_list: {