mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-06-23 03:50:56 +08:00
Merge branch 'koogua/v1.6.4'
This commit is contained in:
commit
13ff32343d
15
CHANGELOG.md
15
CHANGELOG.md
@ -1,4 +1,19 @@
|
||||
### [v1.6.4](https://gitee.com/koogua/course-tencent-cloud/releases/v1.6.3)(2023-06-15)
|
||||
|
||||
- 增加推荐课程等Widget
|
||||
- 更新Composer包
|
||||
- 修正验证空口令问题
|
||||
- 优化订单确认页样式
|
||||
- 优化课程等Me相关信息
|
||||
- 优化分享URL
|
||||
- 优化用户课程查找
|
||||
- 优化通知相关
|
||||
- 优化Providers
|
||||
- 优化课程章节权限
|
||||
- 优化钉钉机器人
|
||||
|
||||
### [v1.6.3](https://gitee.com/koogua/course-tencent-cloud/releases/v1.6.3)(2023-05-08)
|
||||
|
||||
- 强化文章|提问|课程列表参数检查
|
||||
- 优化HtmlPurifier内容过滤
|
||||
- 优化排序条件和分页重复问题
|
||||
|
@ -55,7 +55,7 @@ Tips: 请用手机注册一个新账号,用户中心 -> 关注订阅,扫码
|
||||
### 项目组件
|
||||
|
||||
- 后台框架:[phalcon 3.4.5](https://phalcon.io)
|
||||
- 前端框架:[layui 2.7.6](https://layui.com)
|
||||
- 前端框架:[layui 2.8.2](https://layui.com)
|
||||
- 全文检索:[xunsearch 1.4.9](http://www.xunsearch.com)
|
||||
- 即时通讯:[workerman 3.5.22](https://workerman.net)
|
||||
- 基础依赖:[php7.3](https://php.net), [mysql5.7](https://mysql.com), [redis5.0](https://redis.io)
|
||||
|
@ -12,7 +12,7 @@ use App\Repos\Article as ArticleRepo;
|
||||
class Article extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -12,7 +12,7 @@ use App\Repos\Chapter as ChapterRepo;
|
||||
class Chapter extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -12,7 +12,7 @@ use App\Repos\Course as CourseRepo;
|
||||
class Course extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -13,7 +13,7 @@ use App\Repos\Course as CourseRepo;
|
||||
class CourseCategoryList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -13,7 +13,7 @@ use App\Repos\Course as CourseRepo;
|
||||
class CoursePackageList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -14,7 +14,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
class CourseRecommendedList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -13,7 +13,7 @@ use App\Repos\Course as CourseRepo;
|
||||
class CourseRelatedList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -13,7 +13,7 @@ use App\Repos\Course as CourseRepo;
|
||||
class CourseTeacherList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -14,7 +14,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
class CourseTopicList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
83
app/Caches/FeaturedArticleList.php
Normal file
83
app/Caches/FeaturedArticleList.php
Normal file
@ -0,0 +1,83 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2023 深圳市酷瓜软件有限公司
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.koogua.com
|
||||
*/
|
||||
|
||||
namespace App\Caches;
|
||||
|
||||
use App\Models\Article as ArticleModel;
|
||||
use Phalcon\Mvc\Model\Resultset;
|
||||
use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
|
||||
class FeaturedArticleList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
$tomorrow = strtotime('tomorrow');
|
||||
|
||||
return $tomorrow - time();
|
||||
}
|
||||
|
||||
public function getKey($id = null)
|
||||
{
|
||||
return 'featured_article_list';
|
||||
}
|
||||
|
||||
public function getContent($id = null)
|
||||
{
|
||||
$limit = 8;
|
||||
|
||||
$articles = $this->findArticles($limit);
|
||||
|
||||
if ($articles->count() == 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$result = [];
|
||||
|
||||
foreach ($articles as $article) {
|
||||
|
||||
$userCount = $article->user_count;
|
||||
|
||||
if ($article->fake_user_count > $article->user_count) {
|
||||
$userCount = $article->fake_user_count;
|
||||
}
|
||||
|
||||
$result[] = [
|
||||
'id' => $article->id,
|
||||
'title' => $article->title,
|
||||
'cover' => $article->cover,
|
||||
'market_price' => (float)$article->market_price,
|
||||
'vip_price' => (float)$article->vip_price,
|
||||
'user_count' => $userCount,
|
||||
'favorite_count' => $article->favorite_count,
|
||||
'comment_count' => $article->comment_count,
|
||||
'view_count' => $article->view_count,
|
||||
'like_count' => $article->like_count,
|
||||
];
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $limit
|
||||
* @return ResultsetInterface|Resultset|ArticleModel[]
|
||||
*/
|
||||
protected function findArticles($limit = 8)
|
||||
{
|
||||
return ArticleModel::query()
|
||||
->where('featured = 1')
|
||||
->andWhere('published = 1')
|
||||
->andWhere('deleted = 0')
|
||||
->orderBy('id DESC')
|
||||
->limit($limit)
|
||||
->execute();
|
||||
}
|
||||
|
||||
}
|
85
app/Caches/FeaturedCourseList.php
Normal file
85
app/Caches/FeaturedCourseList.php
Normal file
@ -0,0 +1,85 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2023 深圳市酷瓜软件有限公司
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.koogua.com
|
||||
*/
|
||||
|
||||
namespace App\Caches;
|
||||
|
||||
use App\Models\Course as CourseModel;
|
||||
use Phalcon\Mvc\Model\Resultset;
|
||||
use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
|
||||
class FeaturedCourseList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
$tomorrow = strtotime('tomorrow');
|
||||
|
||||
return $tomorrow - time();
|
||||
}
|
||||
|
||||
public function getKey($id = null)
|
||||
{
|
||||
return 'featured_course_list';
|
||||
}
|
||||
|
||||
public function getContent($id = null)
|
||||
{
|
||||
$limit = 8;
|
||||
|
||||
$courses = $this->findCourses($limit);
|
||||
|
||||
if ($courses->count() == 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$result = [];
|
||||
|
||||
foreach ($courses as $course) {
|
||||
|
||||
$userCount = $course->user_count;
|
||||
|
||||
if ($course->fake_user_count > $course->user_count) {
|
||||
$userCount = $course->fake_user_count;
|
||||
}
|
||||
|
||||
$result[] = [
|
||||
'id' => $course->id,
|
||||
'title' => $course->title,
|
||||
'cover' => $course->cover,
|
||||
'model' => $course->model,
|
||||
'level' => $course->level,
|
||||
'rating' => round($course->rating, 1),
|
||||
'market_price' => (float)$course->market_price,
|
||||
'vip_price' => (float)$course->vip_price,
|
||||
'user_count' => $userCount,
|
||||
'lesson_count' => $course->lesson_count,
|
||||
'review_count' => $course->review_count,
|
||||
'favorite_count' => $course->favorite_count,
|
||||
];
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $limit
|
||||
* @return ResultsetInterface|Resultset|CourseModel[]
|
||||
*/
|
||||
protected function findCourses($limit = 8)
|
||||
{
|
||||
return CourseModel::query()
|
||||
->where('featured = 1')
|
||||
->andWhere('published = 1')
|
||||
->andWhere('deleted = 0')
|
||||
->orderBy('id DESC')
|
||||
->limit($limit)
|
||||
->execute();
|
||||
}
|
||||
|
||||
}
|
@ -12,7 +12,7 @@ use App\Repos\FlashSale as FlashSaleRepo;
|
||||
class FlashSale extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -14,7 +14,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
class HotQuestionList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -19,7 +19,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
class IndexFeaturedCourseList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -12,7 +12,7 @@ use App\Services\Logic\FlashSale\SaleList;
|
||||
class IndexFlashSaleList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -19,7 +19,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
class IndexFreeCourseList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -18,7 +18,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
class IndexLiveList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -19,7 +19,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
class IndexNewCourseList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -17,7 +17,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
class IndexSimpleFeaturedCourseList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -17,7 +17,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
class IndexSimpleFreeCourseList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -17,7 +17,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
class IndexSimpleNewCourseList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -17,7 +17,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
class IndexSimpleVipCourseList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -14,7 +14,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
class IndexTeacherList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 3600;
|
||||
protected $lifetime = 3600;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -19,7 +19,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
class IndexVipCourseList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -13,7 +13,7 @@ use App\Repos\Package as PackageRepo;
|
||||
class PackageCourseList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -12,7 +12,7 @@ use App\Repos\PointGift as PointGiftRepo;
|
||||
class PointGift extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -19,7 +19,7 @@ class PointHotGiftList extends Cache
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
/**
|
||||
* 显示个数
|
||||
|
@ -12,7 +12,7 @@ use App\Repos\Question as QuestionRepo;
|
||||
class Question extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -15,7 +15,7 @@ class TaggedArticleList extends Cache
|
||||
|
||||
protected $limit = 5;
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -15,7 +15,7 @@ class TaggedQuestionList extends Cache
|
||||
|
||||
protected $limit = 5;
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -16,7 +16,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
class TopAnswererList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -16,7 +16,7 @@ use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
class TopAuthorList extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -12,7 +12,7 @@ use App\Repos\User as UserRepo;
|
||||
class User extends Cache
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -10,7 +10,7 @@ namespace App\Caches;
|
||||
class UserDailyCounter extends Counter
|
||||
{
|
||||
|
||||
protected $lifetime = 1 * 86400;
|
||||
protected $lifetime = 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -20,11 +20,13 @@ class StudentController extends Controller
|
||||
*/
|
||||
public function searchAction()
|
||||
{
|
||||
$courseId = $this->request->getQuery('course_id', 'int', 0);
|
||||
|
||||
$studentService = new StudentService();
|
||||
|
||||
$sourceTypes = $studentService->getSourceTypes();
|
||||
|
||||
$xmCourses = $studentService->getXmCourses('all');
|
||||
$xmCourses = $studentService->getXmCourses('all', $courseId);
|
||||
|
||||
$this->view->setVar('source_types', $sourceTypes);
|
||||
$this->view->setVar('xm_courses', $xmCourses);
|
||||
@ -56,9 +58,11 @@ class StudentController extends Controller
|
||||
*/
|
||||
public function addAction()
|
||||
{
|
||||
$courseId = $this->request->getQuery('course_id', 'int', 0);
|
||||
|
||||
$studentService = new StudentService();
|
||||
|
||||
$xmCourses = $studentService->getXmCourses('charge');
|
||||
$xmCourses = $studentService->getXmCourses('all', $courseId);
|
||||
|
||||
$this->view->setVar('xm_courses', $xmCourses);
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ use App\Validators\CourseUser as CourseUserValidator;
|
||||
class Student extends Service
|
||||
{
|
||||
|
||||
public function getXmCourses($scope = 'all')
|
||||
public function getXmCourses($scope = 'all', $courseId = 0)
|
||||
{
|
||||
$courseRepo = new CourseRepo();
|
||||
|
||||
@ -46,6 +46,7 @@ class Student extends Service
|
||||
$result[] = [
|
||||
'name' => sprintf('%s - %s(¥%0.2f)', $item->id, $item->title, $item->market_price),
|
||||
'value' => $item->id,
|
||||
'selected' => $item->id == $courseId,
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -14,15 +14,15 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">App Secret</label>
|
||||
<label class="layui-form-label">Webhook</label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="text" name="app_secret" value="{{ robot.app_secret }}" lay-verify="required">
|
||||
<input class="layui-input" type="text" name="app_token" value="{{ robot.webhook_url }}" lay-verify="required">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">Access Token</label>
|
||||
<label class="layui-form-label">加签密钥</label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="text" name="app_token" value="{{ robot.app_token }}" lay-verify="required">
|
||||
<input class="layui-input" type="text" name="app_secret" value="{{ robot.app_secret }}" lay-verify="required">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
|
@ -18,8 +18,13 @@
|
||||
{% endif %}
|
||||
{%- endmacro %}
|
||||
|
||||
{% set add_url = url({'for':'admin.student.add'}) %}
|
||||
{% set search_url = url({'for':'admin.student.search'}) %}
|
||||
{% if course %}
|
||||
{% set add_url = url({'for':'admin.student.add'},{'course_id':course.id}) %}
|
||||
{% set search_url = url({'for':'admin.student.search'},{'course_id':course.id}) %}
|
||||
{% else %}
|
||||
{% set add_url = url({'for':'admin.student.add'}) %}
|
||||
{% set search_url = url({'for':'admin.student.search'}) %}
|
||||
{% endif %}
|
||||
|
||||
<div class="kg-nav">
|
||||
<div class="kg-nav-left">
|
||||
|
@ -8,7 +8,6 @@
|
||||
namespace App\Http\Home\Controllers;
|
||||
|
||||
use App\Http\Home\Services\FullH5Url as FullH5UrlService;
|
||||
use App\Http\Home\Services\Index as IndexService;
|
||||
use App\Services\Logic\Help\HelpInfo as HelpInfoService;
|
||||
use App\Services\Logic\Help\HelpList as HelpListService;
|
||||
|
||||
@ -63,19 +62,9 @@ class HelpController extends Controller
|
||||
$this->notFound();
|
||||
}
|
||||
|
||||
$featuredCourses = $this->getFeaturedCourses();
|
||||
|
||||
$this->seo->prependTitle(['帮助', $help['title']]);
|
||||
|
||||
$this->view->setVar('help', $help);
|
||||
$this->view->setVar('featured_courses', $featuredCourses);
|
||||
}
|
||||
|
||||
protected function getFeaturedCourses()
|
||||
{
|
||||
$service = new IndexService();
|
||||
|
||||
return $service->getSimpleFeaturedCourses();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -7,6 +7,8 @@
|
||||
|
||||
namespace App\Http\Home\Controllers;
|
||||
|
||||
use App\Caches\FeaturedArticleList as FeaturedArticleListCache;
|
||||
use App\Caches\FeaturedCourseList as FeaturedCourseListCache;
|
||||
use App\Services\Logic\Article\TopAuthorList as TopAuthorListService;
|
||||
use App\Services\Logic\Question\HotQuestionList as HotQuestionListService;
|
||||
use App\Services\Logic\Question\TopAnswererList as TopAnswererListService;
|
||||
@ -33,6 +35,34 @@ class WidgetController extends Controller
|
||||
$this->view->setVar('tags', $pager->items);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Get("/featured/courses", name="home.widget.featured_courses")
|
||||
*/
|
||||
public function featuredCoursesAction()
|
||||
{
|
||||
$cache = new FeaturedCourseListCache();
|
||||
|
||||
$courses = $cache->get();
|
||||
|
||||
$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
|
||||
$this->view->pick('widget/featured_courses');
|
||||
$this->view->setVar('courses', $courses);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Get("/featured/articles", name="home.widget.featured_articles")
|
||||
*/
|
||||
public function featuredArticlesAction()
|
||||
{
|
||||
$cache = new FeaturedArticleListCache();
|
||||
|
||||
$articles = $cache->get();
|
||||
|
||||
$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
|
||||
$this->view->pick('widget/featured_articles');
|
||||
$this->view->setVar('articles', $articles);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Get("/hot/questions", name="home.widget.hot_questions")
|
||||
*/
|
||||
|
@ -4,6 +4,8 @@
|
||||
|
||||
{{ partial('macros/article') }}
|
||||
|
||||
{% set share_url = share_url('article',article.id,auth_user.id) %}
|
||||
{% set qrcode_url = url({'for':'home.qrcode'},{'text':share_url}) %}
|
||||
{% set article_edit_url = url({'for':'home.article.edit','id':article.id}) %}
|
||||
{% set article_delete_url = url({'for':'home.article.delete','id':article.id}) %}
|
||||
{% set article_private_url = url({'for':'home.article.private','id':article.id}) %}
|
||||
@ -102,9 +104,6 @@
|
||||
{{ partial('article/sticky') }}
|
||||
</div>
|
||||
|
||||
{% set share_url = full_url({'for':'home.share'},{'id':article.id,'type':'article'}) %}
|
||||
{% set qrcode_url = url({'for':'home.qrcode'},{'text':share_url}) %}
|
||||
|
||||
<div class="layui-hide">
|
||||
<input type="hidden" name="share.title" value="{{ article.title }}">
|
||||
<input type="hidden" name="share.pic" value="{{ article.cover }}">
|
||||
|
@ -2,6 +2,8 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% set share_url = full_url('chapter',chapter.id,auth_user.id) %}
|
||||
{% set qrcode_url = url({'for':'home.qrcode'},{'text':share_url}) %}
|
||||
{% set course_url = url({'for':'home.course.show','id':chapter.course.id}) %}
|
||||
{% set learning_url = url({'for':'home.chapter.learning','id':chapter.id}) %}
|
||||
{% set live_chats_url = url({'for':'home.live.chats','id':chapter.id}) %}
|
||||
@ -58,9 +60,6 @@
|
||||
<input type="hidden" name="bind_user_url" value='{{ bind_user_url }}'>
|
||||
</div>
|
||||
|
||||
{% set share_url = full_url({'for':'home.share'},{'id':chapter.id,'type':'chapter'}) %}
|
||||
{% set qrcode_url = url({'for':'home.qrcode'},{'text':share_url}) %}
|
||||
|
||||
<div class="layui-hide">
|
||||
<input type="hidden" name="share.title" value="{{ chapter.course.title }}">
|
||||
<input type="hidden" name="share.pic" value="{{ chapter.course.cover }}">
|
||||
|
@ -2,6 +2,8 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% set share_url = full_url('chapter',chapter.id,auth_user.id) %}
|
||||
{% set qrcode_url = url({'for':'home.qrcode'},{'text':share_url}) %}
|
||||
{% set course_url = url({'for':'home.course.show','id':chapter.course.id}) %}
|
||||
{% set learning_url = url({'for':'home.chapter.learning','id':chapter.id}) %}
|
||||
|
||||
@ -44,9 +46,6 @@
|
||||
<input type="hidden" name="chapter.learning_url" value="{{ learning_url }}">
|
||||
</div>
|
||||
|
||||
{% set share_url = full_url({'for':'home.share'},{'id':chapter.id,'type':'chapter'}) %}
|
||||
{% set qrcode_url = url({'for':'home.qrcode'},{'text':share_url}) %}
|
||||
|
||||
<div class="layui-hide">
|
||||
<input type="hidden" name="share.title" value="{{ chapter.course.title }}">
|
||||
<input type="hidden" name="share.pic" value="{{ chapter.course.cover }}">
|
||||
|
@ -2,6 +2,8 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% set share_url = share_url('chapter',chapter.id,auth_user.id) %}
|
||||
{% set qrcode_url = url({'for':'home.qrcode'},{'text':share_url}) %}
|
||||
{% set course_url = url({'for':'home.course.show','id':chapter.course.id}) %}
|
||||
{% set learning_url = url({'for':'home.chapter.learning','id':chapter.id}) %}
|
||||
|
||||
@ -47,9 +49,6 @@
|
||||
<input type="hidden" name="chapter.play_urls" value='{{ chapter.play_urls|json_encode }}'>
|
||||
</div>
|
||||
|
||||
{% set share_url = full_url({'for':'home.share'},{'id':chapter.id,'type':'chapter'}) %}
|
||||
{% set qrcode_url = url({'for':'home.qrcode'},{'text':share_url}) %}
|
||||
|
||||
<div class="layui-hide">
|
||||
<input type="hidden" name="share.title" value="{{ chapter.course.title }}">
|
||||
<input type="hidden" name="share.pic" value="{{ chapter.course.cover }}">
|
||||
|
@ -4,6 +4,9 @@
|
||||
|
||||
{{ partial('macros/course') }}
|
||||
|
||||
{% set share_url = share_url('course',course.id,auth_user.id) %}
|
||||
{% set qrcode_url = url({'for':'home.qrcode'},{'text':share_url}) %}
|
||||
|
||||
<div class="breadcrumb">
|
||||
<span class="layui-breadcrumb">
|
||||
<a href="/">首页</a>
|
||||
@ -93,9 +96,6 @@
|
||||
{{ partial('course/sticky') }}
|
||||
</div>
|
||||
|
||||
{% set share_url = full_url({'for':'home.share'},{'id':course.id,'type':'course'}) %}
|
||||
{% set qrcode_url = url({'for':'home.qrcode'},{'text':share_url}) %}
|
||||
|
||||
<div class="layui-hide">
|
||||
<input type="hidden" name="share.title" value="{{ course.title }}">
|
||||
<input type="hidden" name="share.pic" value="{{ course.cover }}">
|
||||
|
@ -1,4 +1,9 @@
|
||||
{% if course.me.allow_order == 1 %}
|
||||
{% if course.me.logged == 0 %}
|
||||
{% set login_url = url({'for':'home.account.login'}) %}
|
||||
<div class="sidebar wrap">
|
||||
<a class="layui-btn layui-btn-fluid" href="{{ login_url }}">用户登录</a>
|
||||
</div>
|
||||
{% elseif course.me.allow_order == 1 %}
|
||||
{% set order_url = url({'for':'home.order.confirm'},{'item_id':course.id,'item_type':1}) %}
|
||||
<div class="sidebar wrap">
|
||||
<button class="layui-btn layui-btn-fluid layui-bg-red btn-buy" data-url="{{ order_url }}">立即购买</button>
|
||||
|
@ -2,6 +2,8 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% set courses_url = url({'for':'home.widget.featured_courses'}) %}
|
||||
|
||||
<div class="breadcrumb">
|
||||
<span class="layui-breadcrumb">
|
||||
<a href="/">首页</a>
|
||||
@ -30,25 +32,23 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="layout-sidebar">
|
||||
<div class="layui-card cs-sidebar">
|
||||
<div class="layui-card-header">客户服务</div>
|
||||
<div class="layui-card-body">
|
||||
<p>没解决你的疑问?试试联系客服吧!</p>
|
||||
{% if contact_info.qq %}
|
||||
{% set link_url = 'https://wpa.qq.com/msgrd?v=3&uin=%s&site=qq&menu=yes'|format(contact_info.qq) %}
|
||||
<p class="center">
|
||||
<a href="{{ link_url }}" class="layui-btn layui-btn-sm">联系客服</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebar" id="course-list" data-url="{{ courses_url }}"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block include_js %}
|
||||
{% block inline_js %}
|
||||
|
||||
{{ js_include('home/js/help.js') }}
|
||||
<script>
|
||||
layui.use(['jquery', 'helper'], function () {
|
||||
var $ = layui.jquery;
|
||||
var helper = layui.helper;
|
||||
var $courseList = $('#course-list');
|
||||
if ($courseList.length > 0) {
|
||||
helper.ajaxLoadHtml($courseList.data('url'), $courseList.attr('id'));
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
@ -2,7 +2,7 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
{{ partial('macros/course') }}
|
||||
{% set courses_url = url({'for':'home.widget.featured_courses'}) %}
|
||||
|
||||
<div class="breadcrumb">
|
||||
<span class="layui-breadcrumb">
|
||||
@ -19,18 +19,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="layout-sidebar">
|
||||
{% if featured_courses %}
|
||||
<div class="sidebar">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">推荐课程</div>
|
||||
<div class="layui-card-body">
|
||||
{% for course in featured_courses %}
|
||||
{{ sidebar_course_card(course) }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="sidebar" id="course-list" data-url="{{ courses_url }}"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -40,4 +29,19 @@
|
||||
|
||||
{{ css_link('home/css/content.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block inline_js %}
|
||||
|
||||
<script>
|
||||
layui.use(['jquery', 'helper'], function () {
|
||||
var $ = layui.jquery;
|
||||
var helper = layui.helper;
|
||||
var $courseList = $('#course-list');
|
||||
if ($courseList.length > 0) {
|
||||
helper.ajaxLoadHtml($courseList.data('url'), $courseList.attr('id'));
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
@ -2,7 +2,7 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
{{ partial('macros/course') }}
|
||||
{% set courses_url = url({'for':'home.widget.featured_courses'}) %}
|
||||
|
||||
<div class="breadcrumb">
|
||||
<span class="layui-breadcrumb">
|
||||
@ -18,18 +18,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="layout-sidebar">
|
||||
{% if featured_courses %}
|
||||
<div class="sidebar">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">推荐课程</div>
|
||||
<div class="layui-card-body">
|
||||
{% for course in featured_courses %}
|
||||
{{ sidebar_course_card(course) }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="sidebar" id="course-list" data-url="{{ courses_url }}"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -39,4 +28,19 @@
|
||||
|
||||
{{ css_link('home/css/content.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block inline_js %}
|
||||
|
||||
<script>
|
||||
layui.use(['jquery', 'helper'], function () {
|
||||
var $ = layui.jquery;
|
||||
var helper = layui.helper;
|
||||
var $courseList = $('#course-list');
|
||||
if ($courseList.length > 0) {
|
||||
helper.ajaxLoadHtml($courseList.data('url'), $courseList.attr('id'));
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
@ -4,6 +4,8 @@
|
||||
|
||||
{{ partial('macros/question') }}
|
||||
|
||||
{% set share_url = share_url('question',question.id,auth_user.id) %}
|
||||
{% set qrcode_url = url({'for':'home.qrcode'},{'text':share_url}) %}
|
||||
{% set question_report_url = url({'for':'home.report.add'},{'item_id':question.id,'item_type':107}) %}
|
||||
{% set question_edit_url = url({'for':'home.question.edit','id':question.id}) %}
|
||||
{% set question_delete_url = url({'for':'home.question.delete','id':question.id}) %}
|
||||
@ -98,9 +100,6 @@
|
||||
{{ partial('question/sticky') }}
|
||||
</div>
|
||||
|
||||
{% set share_url = full_url({'for':'home.share'},{'id':question.id,'type':'question'}) %}
|
||||
{% set qrcode_url = url({'for':'home.qrcode'},{'text':share_url}) %}
|
||||
|
||||
<div class="layui-hide">
|
||||
<input type="hidden" name="share.title" value="{{ question.title }}">
|
||||
<input type="hidden" name="share.pic" value="">
|
||||
|
@ -4,6 +4,8 @@
|
||||
|
||||
{{ partial('macros/user') }}
|
||||
|
||||
{% set share_url = share_url('user',user.id,auth_user.id) %}
|
||||
{% set qrcode_url = url({'for':'home.qrcode'},{'text':share_url}) %}
|
||||
{% set avatar_class = user.vip == 1 ? 'avatar vip' : 'avatar' %}
|
||||
|
||||
<div class="breadcrumb">
|
||||
@ -13,7 +15,6 @@
|
||||
<a><cite>{{ user.name }}</cite></a>
|
||||
</span>
|
||||
<span class="share">
|
||||
<a href="javascript:" title="添加好友" class="apply-friend" data-id="{{ user.id }}" data-name="{{ user.name }}" data-avatar="{{ user.avatar }}"><i class="layui-icon layui-icon-user"></i></a>
|
||||
<a href="javascript:" title="分享到微信"><i class="layui-icon layui-icon-login-wechat share-wechat"></i></a>
|
||||
<a href="javascript:" title="分享到QQ空间"><i class="layui-icon layui-icon-login-qq share-qq"></i></a>
|
||||
<a href="javascript:" title="分享到微博"><i class="layui-icon layui-icon-login-weibo share-weibo"></i></a>
|
||||
@ -80,9 +81,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% set share_url = full_url({'for':'home.share'},{'id':user.id,'type':'user'}) %}
|
||||
{% set qrcode_url = url({'for':'home.qrcode'},{'text':share_url}) %}
|
||||
|
||||
<div class="layui-hide">
|
||||
<input type="hidden" name="share.title" value="{{ user.name }}">
|
||||
<input type="hidden" name="share.pic" value="{{ user.avatar }}">
|
||||
|
20
app/Http/Home/Views/widget/featured_articles.volt
Normal file
20
app/Http/Home/Views/widget/featured_articles.volt
Normal file
@ -0,0 +1,20 @@
|
||||
{% if articles|length > 0 %}
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">推荐文章</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="sidebar-article-list">
|
||||
{% for article in articles %}
|
||||
{% set article_url = url({'for':'home.article.show','id':article.id}) %}
|
||||
<div class="title">
|
||||
<a href="{{ article_url }}" target="_blank">{{ article.title }}</a>
|
||||
</div>
|
||||
<div class="meta">
|
||||
<span class="view">{{ article.view_count }} 浏览</span>
|
||||
<span class="like">{{ article.like_count }} 点赞</span>
|
||||
<span class="comment">{{ article.comment_count }} 评论</span>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
12
app/Http/Home/Views/widget/featured_courses.volt
Normal file
12
app/Http/Home/Views/widget/featured_courses.volt
Normal file
@ -0,0 +1,12 @@
|
||||
{{ partial('macros/course') }}
|
||||
|
||||
{% if courses|length > 0 %}
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">推荐课程</div>
|
||||
<div class="layui-card-body">
|
||||
{% for course in courses %}
|
||||
{{ sidebar_course_card(course) }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
@ -16,7 +16,7 @@ class AppInfo
|
||||
|
||||
protected $link = 'https://www.koogua.com';
|
||||
|
||||
protected $version = '1.6.3';
|
||||
protected $version = '1.6.4';
|
||||
|
||||
public function __get($name)
|
||||
{
|
||||
|
@ -8,8 +8,8 @@
|
||||
use App\Caches\Setting as SettingCache;
|
||||
use App\Library\Purifier as HtmlPurifier;
|
||||
use App\Library\Validators\Common as CommonValidator;
|
||||
use App\Services\Logic\Url\ShareUrl as ShareUrlService;
|
||||
use App\Services\Storage as StorageService;
|
||||
use Koogua\Ip2Region\Searcher as Ip2RegionSearcher;
|
||||
use Phalcon\Config;
|
||||
use Phalcon\Di;
|
||||
use Phalcon\Text;
|
||||
@ -727,6 +727,21 @@ function kg_full_url($uri, $args = null)
|
||||
return $baseUrl . $url->get($uri, $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造分享url
|
||||
*
|
||||
* @param string $type
|
||||
* @param int $id
|
||||
* @param int $referer
|
||||
* @return string
|
||||
*/
|
||||
function kg_share_url($type, $id, $referer = 0)
|
||||
{
|
||||
$service = new ShareUrlService();
|
||||
|
||||
return $service->handle($type, $id, $referer);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取H5首页地址
|
||||
*
|
||||
|
@ -46,7 +46,7 @@ class Sitemap
|
||||
public function build($filename = null)
|
||||
{
|
||||
$xml = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
|
||||
$xml .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";
|
||||
$xml .= '<urlset xmlns="https://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";
|
||||
|
||||
foreach ($this->items as $item) {
|
||||
$item['loc'] = htmlentities($item['loc'], ENT_QUOTES);
|
||||
|
@ -26,15 +26,19 @@ class Annotation extends Provider
|
||||
$this->di->setShared($this->serviceName, function () use ($config) {
|
||||
|
||||
if ($config->get('env') == ENV_DEV) {
|
||||
|
||||
$annotations = new MemoryAnnotations();
|
||||
|
||||
} else {
|
||||
|
||||
$statsKey = '_ANNOTATION_';
|
||||
|
||||
$annotations = new RedisAnnotations([
|
||||
'host' => $config->path('redis.host'),
|
||||
'port' => $config->path('redis.port'),
|
||||
'auth' => $config->path('redis.auth'),
|
||||
'index' => $config->path('redis.index') ?: 0,
|
||||
'lifetime' => $config->path('annotation.lifetime') ?: 30 * 86400,
|
||||
'index' => $config->path('redis.index'),
|
||||
'lifetime' => $config->path('annotation.lifetime'),
|
||||
'prefix' => $statsKey . ':',
|
||||
'statsKey' => $statsKey,
|
||||
]);
|
||||
|
@ -33,7 +33,7 @@ class Cache extends Provider
|
||||
'host' => $config->path('redis.host'),
|
||||
'port' => $config->path('redis.port'),
|
||||
'auth' => $config->path('redis.auth'),
|
||||
'index' => $config->path('redis.index') ?: 0,
|
||||
'index' => $config->path('redis.index'),
|
||||
]);
|
||||
});
|
||||
}
|
||||
|
@ -42,8 +42,11 @@ class Database extends Provider
|
||||
$connection = new MySqlAdapter($options);
|
||||
|
||||
if ($config->get('env') == ENV_DEV) {
|
||||
|
||||
$eventsManager = new EventsManager();
|
||||
|
||||
$eventsManager->attach('db', new DbListener());
|
||||
|
||||
$connection->setEventsManager($eventsManager);
|
||||
}
|
||||
|
||||
|
@ -26,15 +26,19 @@ class MetaData extends Provider
|
||||
$this->di->setShared($this->serviceName, function () use ($config) {
|
||||
|
||||
if ($config->get('env') == ENV_DEV) {
|
||||
|
||||
$metaData = new MemoryMetaData();
|
||||
|
||||
} else {
|
||||
|
||||
$statsKey = '_METADATA_';
|
||||
|
||||
$metaData = new RedisMetaData([
|
||||
'host' => $config->path('redis.host'),
|
||||
'port' => $config->path('redis.port'),
|
||||
'auth' => $config->path('redis.auth'),
|
||||
'index' => $config->path('redis.index') ?: 0,
|
||||
'lifetime' => $config->path('metadata.lifetime') ?: 30 * 86400,
|
||||
'index' => $config->path('redis.index'),
|
||||
'lifetime' => $config->path('metadata.lifetime'),
|
||||
'prefix' => $statsKey . ':',
|
||||
'statsKey' => $statsKey,
|
||||
]);
|
||||
|
@ -28,8 +28,8 @@ class Session extends Provider
|
||||
'host' => $config->path('redis.host'),
|
||||
'port' => $config->path('redis.port'),
|
||||
'auth' => $config->path('redis.auth'),
|
||||
'index' => $config->path('redis.index') ?: 0,
|
||||
'lifetime' => $config->path('session.lifetime') ?: 24 * 3600,
|
||||
'index' => $config->path('redis.index'),
|
||||
'lifetime' => $config->path('session.lifetime'),
|
||||
'prefix' => '_SESSION_:',
|
||||
]);
|
||||
|
||||
|
@ -39,6 +39,10 @@ class Volt extends Provider
|
||||
return 'kg_full_url(' . $resolvedArgs . ')';
|
||||
});
|
||||
|
||||
$compiler->addFunction('share_url', function ($resolvedArgs) {
|
||||
return 'kg_share_url(' . $resolvedArgs . ')';
|
||||
});
|
||||
|
||||
$compiler->addFunction('static_url', function ($resolvedArgs) {
|
||||
return 'kg_static_url(' . $resolvedArgs . ')';
|
||||
});
|
||||
@ -95,6 +99,16 @@ class Volt extends Provider
|
||||
return 'kg_anonymous(' . $resolvedArgs . ')';
|
||||
});
|
||||
|
||||
$compiler->addFilter('split', function ($resolvedArgs, $exprArgs) use ($compiler) {
|
||||
$firstArgument = $compiler->expression($exprArgs[0]['expr']);
|
||||
if (isset($exprArgs[1])) {
|
||||
$secondArgument = $compiler->expression($exprArgs[1]['expr']);
|
||||
} else {
|
||||
$secondArgument = '';
|
||||
}
|
||||
return sprintf('explode(%s,%s)', $secondArgument, $firstArgument);
|
||||
});
|
||||
|
||||
return $volt;
|
||||
});
|
||||
}
|
||||
|
@ -135,24 +135,21 @@ class DingTalkNotice extends Service
|
||||
*/
|
||||
public function send($params)
|
||||
{
|
||||
if (!isset($params['msgtype'])) {
|
||||
$params['msgtype'] = 'text';
|
||||
}
|
||||
|
||||
$webhookUrl = $this->settings['webhook_url'];
|
||||
$appSecret = $this->settings['app_secret'];
|
||||
$appToken = $this->settings['app_token'];
|
||||
|
||||
$timestamp = time() * 1000;
|
||||
$data = sprintf("%s\n%s", $timestamp, $appSecret);
|
||||
$sign = urlencode(base64_encode(hash_hmac('sha256', $data, $appSecret, true)));
|
||||
|
||||
$baseUrl = 'https://oapi.dingtalk.com/robot/send';
|
||||
$postUrl = $webhookUrl;
|
||||
|
||||
$postUrl = $baseUrl . '?' . http_build_query([
|
||||
'access_token' => $appToken,
|
||||
'timestamp' => $timestamp,
|
||||
'sign' => $sign,
|
||||
]);
|
||||
if (!empty($appSecret)) {
|
||||
$postUrl = $webhookUrl . '&' . http_build_query([
|
||||
'timestamp' => $timestamp,
|
||||
'sign' => $sign,
|
||||
]);
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
|
@ -68,6 +68,7 @@ class AnswerInfo extends LogicService
|
||||
protected function handleMeInfo(AnswerModel $answer, UserModel $user)
|
||||
{
|
||||
$me = [
|
||||
'logged' => 0,
|
||||
'liked' => 0,
|
||||
'owned' => 0,
|
||||
];
|
||||
@ -78,6 +79,8 @@ class AnswerInfo extends LogicService
|
||||
|
||||
if ($user->id > 0) {
|
||||
|
||||
$me['logged'] = 1;
|
||||
|
||||
$likeRepo = new AnswerLikeRepo();
|
||||
|
||||
$like = $likeRepo->findAnswerLike($answer->id, $user->id);
|
||||
|
@ -120,7 +120,6 @@ trait ArticleDataTrait
|
||||
$tagRepo = new TagRepo();
|
||||
$tags = $tagRepo->findByIds($newTagIds);
|
||||
if ($tags->count() > 0) {
|
||||
$articleTags = [];
|
||||
foreach ($tags as $tag) {
|
||||
$articleTags[] = ['id' => $tag->id, 'name' => $tag->name];
|
||||
$this->recountTagArticles($tag->id);
|
||||
|
@ -91,6 +91,7 @@ class ArticleInfo extends LogicService
|
||||
protected function handleMeInfo(ArticleModel $article, UserModel $user)
|
||||
{
|
||||
$me = [
|
||||
'logged' => 0,
|
||||
'liked' => 0,
|
||||
'favorited' => 0,
|
||||
'owned' => 0,
|
||||
@ -102,6 +103,8 @@ class ArticleInfo extends LogicService
|
||||
|
||||
if ($user->id > 0) {
|
||||
|
||||
$me['logged'] = 1;
|
||||
|
||||
$likeRepo = new ArticleLikeRepo();
|
||||
|
||||
$like = $likeRepo->findArticleLike($article->id, $user->id);
|
||||
|
@ -75,44 +75,7 @@ class ChapterInfo extends LogicService
|
||||
|
||||
$result['course'] = $service->handleCourseInfo($this->course);
|
||||
|
||||
$me = [
|
||||
'role_type' => 0,
|
||||
'plan_id' => 0,
|
||||
'position' => 0,
|
||||
'joined' => 0,
|
||||
'owned' => 0,
|
||||
'liked' => 0,
|
||||
];
|
||||
|
||||
if ($this->joinedChapter) {
|
||||
$me['joined'] = 1;
|
||||
}
|
||||
|
||||
if ($this->ownedChapter) {
|
||||
$me['owned'] = 1;
|
||||
}
|
||||
|
||||
if ($user->id > 0) {
|
||||
|
||||
$likeRepo = new ChapterLikeRepo();
|
||||
|
||||
$like = $likeRepo->findChapterLike($chapter->id, $user->id);
|
||||
|
||||
if ($like && $like->deleted == 0) {
|
||||
$me['liked'] = 1;
|
||||
}
|
||||
|
||||
if ($this->courseUser) {
|
||||
$me['role_type'] = $this->courseUser->role_type;
|
||||
$me['plan_id'] = $this->courseUser->plan_id;
|
||||
}
|
||||
|
||||
if ($this->chapterUser) {
|
||||
$me['position'] = $this->chapterUser->position;
|
||||
}
|
||||
}
|
||||
|
||||
$result['me'] = $me;
|
||||
$result['me'] = $this->handleMeInfo($chapter, $user);
|
||||
|
||||
return $result;
|
||||
}
|
||||
@ -176,6 +139,51 @@ class ChapterInfo extends LogicService
|
||||
$this->incrChapterUserCount($chapter);
|
||||
}
|
||||
|
||||
protected function handleMeInfo(ChapterModel $chapter, UserModel $user)
|
||||
{
|
||||
$me = [
|
||||
'role_type' => 0,
|
||||
'plan_id' => 0,
|
||||
'position' => 0,
|
||||
'logged' => 0,
|
||||
'joined' => 0,
|
||||
'owned' => 0,
|
||||
'liked' => 0,
|
||||
];
|
||||
|
||||
if ($user->id > 0) {
|
||||
|
||||
if ($this->joinedChapter) {
|
||||
$me['joined'] = 1;
|
||||
}
|
||||
|
||||
if ($this->ownedChapter) {
|
||||
$me['owned'] = 1;
|
||||
}
|
||||
|
||||
$me['logged'] = 1;
|
||||
|
||||
$likeRepo = new ChapterLikeRepo();
|
||||
|
||||
$like = $likeRepo->findChapterLike($chapter->id, $user->id);
|
||||
|
||||
if ($like && $like->deleted == 0) {
|
||||
$me['liked'] = 1;
|
||||
}
|
||||
|
||||
if ($this->courseUser) {
|
||||
$me['role_type'] = $this->courseUser->role_type;
|
||||
$me['plan_id'] = $this->courseUser->plan_id;
|
||||
}
|
||||
|
||||
if ($this->chapterUser) {
|
||||
$me['position'] = $this->chapterUser->position;
|
||||
}
|
||||
}
|
||||
|
||||
return $me;
|
||||
}
|
||||
|
||||
protected function incrUserCourseCount(UserModel $user)
|
||||
{
|
||||
$user->course_count += 1;
|
||||
|
@ -69,6 +69,8 @@ trait ChapterTrait
|
||||
|
||||
public function setChapterUser(ChapterModel $chapter, UserModel $user)
|
||||
{
|
||||
if ($user->id == 0) return;
|
||||
|
||||
$chapterUser = null;
|
||||
|
||||
/**
|
||||
@ -76,7 +78,7 @@ trait ChapterTrait
|
||||
*/
|
||||
$courseUser = $this->courseUser;
|
||||
|
||||
if ($user->id > 0 && $courseUser) {
|
||||
if ($courseUser) {
|
||||
$chapterUserRepo = new ChapterUserRepo();
|
||||
$chapterUser = $chapterUserRepo->findPlanChapterUser($chapter->id, $user->id, $courseUser->plan_id);
|
||||
}
|
||||
|
@ -54,6 +54,7 @@ class CommentInfo extends LogicService
|
||||
protected function handleMeInfo(CommentModel $comment, UserModel $user)
|
||||
{
|
||||
$me = [
|
||||
'logged' => 0,
|
||||
'liked' => 0,
|
||||
'owned' => 0,
|
||||
];
|
||||
@ -64,6 +65,8 @@ class CommentInfo extends LogicService
|
||||
|
||||
if ($user->id > 0) {
|
||||
|
||||
$me['logged'] = 1;
|
||||
|
||||
$likeRepo = new AnswerLikeRepo();
|
||||
|
||||
$like = $likeRepo->findAnswerLike($comment->id, $user->id);
|
||||
|
@ -76,6 +76,7 @@ trait ListTrait
|
||||
|
||||
foreach ($comments as $comment) {
|
||||
$result[$comment['id']] = [
|
||||
'logged' => $user->id > 0 ? 1 : 0,
|
||||
'liked' => in_array($comment['id'], $likedIds) ? 1 : 0,
|
||||
'owned' => $comment['owner_id'] == $user->id ? 1 : 0,
|
||||
];
|
||||
|
@ -90,6 +90,7 @@ class ConsultInfo extends LogicService
|
||||
protected function handleMeInfo(ConsultModel $consult, UserModel $user)
|
||||
{
|
||||
$me = [
|
||||
'logged' => 0,
|
||||
'liked' => 0,
|
||||
'owned' => 0,
|
||||
];
|
||||
@ -100,6 +101,8 @@ class ConsultInfo extends LogicService
|
||||
|
||||
if ($user->id > 0) {
|
||||
|
||||
$me['logged'] = 1;
|
||||
|
||||
$likeRepo = new ConsultLikeRepo();
|
||||
|
||||
$like = $likeRepo->findConsultLike($consult->id, $user->id);
|
||||
|
@ -55,9 +55,10 @@ class ChapterList extends LogicService
|
||||
foreach ($chapter['children'] as &$lesson) {
|
||||
$owned = ($this->ownedCourse || $lesson['free'] == 1) && $lesson['published'] == 1;
|
||||
$lesson['me'] = [
|
||||
'owned' => $owned ? 1 : 0,
|
||||
'progress' => $mapping[$lesson['id']]['progress'] ?? 0,
|
||||
'duration' => $mapping[$lesson['id']]['duration'] ?? 0,
|
||||
'owned' => $owned ? 1 : 0,
|
||||
'logged' => 1,
|
||||
];
|
||||
}
|
||||
}
|
||||
@ -71,9 +72,10 @@ class ChapterList extends LogicService
|
||||
foreach ($chapter['children'] as &$lesson) {
|
||||
$owned = ($this->ownedCourse || $lesson['free'] == 1) && $lesson['published'] == 1;
|
||||
$lesson['me'] = [
|
||||
'owned' => $owned ? 1 : 0,
|
||||
'progress' => 0,
|
||||
'duration' => 0,
|
||||
'logged' => 0,
|
||||
'owned' => $owned ? 1 : 0,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -75,6 +75,7 @@ trait ConsultListTrait
|
||||
|
||||
foreach ($consults as $consult) {
|
||||
$result[$consult['id']] = [
|
||||
'logged' => $user->id > 0 ? 1 : 0,
|
||||
'liked' => in_array($consult['id'], $likedIds) ? 1 : 0,
|
||||
'owned' => $consult['owner_id'] == $user->id ? 1 : 0,
|
||||
];
|
||||
|
@ -35,25 +35,25 @@ class CourseInfo extends LogicService
|
||||
|
||||
$result = $service->handleBasicInfo($course);
|
||||
|
||||
$result['me'] = $this->handleMeInfo($course, $user);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
protected function handleMeInfo(CourseModel $course, UserModel $user)
|
||||
{
|
||||
$me = [
|
||||
'plan_id' => 0,
|
||||
'allow_order' => 0,
|
||||
'allow_reward' => 0,
|
||||
'progress' => 0,
|
||||
'logged' => 0,
|
||||
'joined' => 0,
|
||||
'owned' => 0,
|
||||
'reviewed' => 0,
|
||||
'favorited' => 0,
|
||||
'progress' => 0,
|
||||
];
|
||||
|
||||
if ($this->joinedCourse) {
|
||||
$me['joined'] = 1;
|
||||
}
|
||||
|
||||
if ($this->ownedCourse) {
|
||||
$me['owned'] = 1;
|
||||
}
|
||||
|
||||
$caseOwned = $this->ownedCourse == false;
|
||||
$casePrice = $course->market_price > 0;
|
||||
$caseModel = true;
|
||||
@ -69,15 +69,30 @@ class CourseInfo extends LogicService
|
||||
$me['allow_order'] = 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 付款课程不允许打赏
|
||||
*/
|
||||
if ($course->market_price == 0) {
|
||||
$me['allow_reward'] = 1;
|
||||
}
|
||||
|
||||
if ($user->id > 0) {
|
||||
|
||||
if ($caseOwned && $casePrice && $caseModel) {
|
||||
$me['allow_order'] = 1;
|
||||
}
|
||||
|
||||
if ($course->market_price == 0) {
|
||||
$me['allow_reward'] = 1;
|
||||
}
|
||||
|
||||
if ($this->joinedCourse) {
|
||||
$me['joined'] = 1;
|
||||
}
|
||||
|
||||
if ($this->ownedCourse) {
|
||||
$me['owned'] = 1;
|
||||
}
|
||||
|
||||
$me['logged'] = 1;
|
||||
|
||||
$favoriteRepo = new CourseFavoriteRepo();
|
||||
|
||||
$favorite = $favoriteRepo->findCourseFavorite($course->id, $user->id);
|
||||
@ -93,9 +108,7 @@ class CourseInfo extends LogicService
|
||||
}
|
||||
}
|
||||
|
||||
$result['me'] = $me;
|
||||
|
||||
return $result;
|
||||
return $me;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -104,6 +104,7 @@ class ReviewList extends LogicService
|
||||
|
||||
foreach ($reviews as $consult) {
|
||||
$result[$consult['id']] = [
|
||||
'logged' => $user->id > 0 ? 1 : 0,
|
||||
'liked' => in_array($consult['id'], $likedIds) ? 1 : 0,
|
||||
'owned' => $consult['owner_id'] == $user->id ? 1 : 0,
|
||||
];
|
||||
|
@ -9,7 +9,6 @@ namespace App\Services\Logic\Notice\External;
|
||||
|
||||
use App\Models\Task as TaskModel;
|
||||
use App\Models\User as UserModel;
|
||||
use App\Repos\WeChatSubscribe as WeChatSubscribeRepo;
|
||||
use App\Services\Logic\Notice\External\WeChat\AccountLogin as WeChatAccountLoginNotice;
|
||||
use App\Services\Logic\Service as LogicService;
|
||||
use App\Traits\Client as ClientTrait;
|
||||
@ -23,19 +22,11 @@ class AccountLogin extends LogicService
|
||||
{
|
||||
$wechatNoticeEnabled = $this->wechatNoticeEnabled();
|
||||
|
||||
if (!$wechatNoticeEnabled) return;
|
||||
|
||||
$params = $task->item_info;
|
||||
|
||||
$userId = $task->item_info['user']['id'];
|
||||
|
||||
$subscribeRepo = new WeChatSubscribeRepo();
|
||||
|
||||
$subscribe = $subscribeRepo->findByUserId($userId);
|
||||
|
||||
if ($subscribe) {
|
||||
if ($wechatNoticeEnabled) {
|
||||
$notice = new WeChatAccountLoginNotice();
|
||||
$notice->handle($subscribe, $params);
|
||||
$notice->handle($params);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,6 @@ use App\Models\Task as TaskModel;
|
||||
use App\Repos\Consult as ConsultRepo;
|
||||
use App\Repos\Course as CourseRepo;
|
||||
use App\Repos\User as UserRepo;
|
||||
use App\Repos\WeChatSubscribe as WeChatSubscribeRepo;
|
||||
use App\Services\Logic\Notice\External\Sms\ConsultReply as SmsConsultReplyNotice;
|
||||
use App\Services\Logic\Notice\External\WeChat\ConsultReply as WeChatConsultReplyNotice;
|
||||
use App\Services\Logic\Service as LogicService;
|
||||
@ -25,8 +24,6 @@ class ConsultReply extends LogicService
|
||||
$wechatNoticeEnabled = $this->wechatNoticeEnabled();
|
||||
$smsNoticeEnabled = $this->smsNoticeEnabled();
|
||||
|
||||
if (!$wechatNoticeEnabled && !$smsNoticeEnabled) return;
|
||||
|
||||
$consultId = $task->item_info['consult']['id'];
|
||||
|
||||
$consultRepo = new ConsultRepo();
|
||||
@ -65,18 +62,14 @@ class ConsultReply extends LogicService
|
||||
],
|
||||
];
|
||||
|
||||
$subscribeRepo = new WeChatSubscribeRepo();
|
||||
|
||||
$subscribe = $subscribeRepo->findByUserId($consult->owner_id);
|
||||
|
||||
if ($wechatNoticeEnabled && $subscribe) {
|
||||
if ($wechatNoticeEnabled) {
|
||||
$notice = new WeChatConsultReplyNotice();
|
||||
$notice->handle($subscribe, $params);
|
||||
$notice->handle($params);
|
||||
}
|
||||
|
||||
if ($smsNoticeEnabled) {
|
||||
$notice = new SmsConsultReplyNotice();
|
||||
$notice->handle($user, $params);
|
||||
$notice->handle($params);
|
||||
}
|
||||
}
|
||||
|
||||
|
16
app/Services/Logic/Notice/External/LiveBegin.php
vendored
16
app/Services/Logic/Notice/External/LiveBegin.php
vendored
@ -13,7 +13,6 @@ use App\Models\Task as TaskModel;
|
||||
use App\Repos\Chapter as ChapterRepo;
|
||||
use App\Repos\Course as CourseRepo;
|
||||
use App\Repos\User as UserRepo;
|
||||
use App\Repos\WeChatSubscribe as WeChatSubscribeRepo;
|
||||
use App\Services\Logic\Notice\External\Sms\LiveBegin as SmsLiveBeginNotice;
|
||||
use App\Services\Logic\Notice\External\WeChat\LiveBegin as WeChatLiveBeginNotice;
|
||||
use App\Services\Logic\Service as LogicService;
|
||||
@ -26,8 +25,6 @@ class LiveBegin extends LogicService
|
||||
$wechatNoticeEnabled = $this->wechatNoticeEnabled();
|
||||
$smsNoticeEnabled = $this->smsNoticeEnabled();
|
||||
|
||||
if (!$wechatNoticeEnabled && !$smsNoticeEnabled) return;
|
||||
|
||||
$courseUser = $task->item_info['course_user'];
|
||||
$chapterId = $task->item_info['chapter']['id'];
|
||||
|
||||
@ -60,21 +57,16 @@ class LiveBegin extends LogicService
|
||||
'start_time' => $chapter->attrs['start_time'],
|
||||
'end_time' => $chapter->attrs['end_time'],
|
||||
],
|
||||
'course_user' => $courseUser,
|
||||
];
|
||||
|
||||
$subscribeRepo = new WeChatSubscribeRepo();
|
||||
|
||||
$subscribe = $subscribeRepo->findByUserId($user->id);
|
||||
|
||||
if ($wechatNoticeEnabled && $subscribe) {
|
||||
if ($wechatNoticeEnabled) {
|
||||
$notice = new WeChatLiveBeginNotice();
|
||||
$notice->handle($subscribe, $params);
|
||||
$notice->handle($params);
|
||||
}
|
||||
|
||||
if ($smsNoticeEnabled) {
|
||||
$notice = new SmsLiveBeginNotice();
|
||||
$notice->handle($user, $params);
|
||||
$notice->handle($params);
|
||||
}
|
||||
}
|
||||
|
||||
@ -91,8 +83,6 @@ class LiveBegin extends LogicService
|
||||
'course_user' => [
|
||||
'course_id' => $courseUser->course_id,
|
||||
'user_id' => $courseUser->user_id,
|
||||
'role_type' => $courseUser->role_type,
|
||||
'source_type' => $courseUser->role_type,
|
||||
],
|
||||
'chapter' => [
|
||||
'id' => $chapter->id,
|
||||
|
@ -11,7 +11,6 @@ use App\Models\Order as OrderModel;
|
||||
use App\Models\Task as TaskModel;
|
||||
use App\Repos\Order as OrderRepo;
|
||||
use App\Repos\User as UserRepo;
|
||||
use App\Repos\WeChatSubscribe as WeChatSubscribeRepo;
|
||||
use App\Services\Logic\Notice\External\Sms\OrderFinish as SmsOrderFinishNotice;
|
||||
use App\Services\Logic\Notice\External\WeChat\OrderFinish as WeChatOrderFinishNotice;
|
||||
use App\Services\Logic\Service as LogicService;
|
||||
@ -24,8 +23,6 @@ class OrderFinish extends LogicService
|
||||
$wechatNoticeEnabled = $this->wechatNoticeEnabled();
|
||||
$smsNoticeEnabled = $this->smsNoticeEnabled();
|
||||
|
||||
if (!$wechatNoticeEnabled && !$smsNoticeEnabled) return;
|
||||
|
||||
$orderId = $task->item_info['order']['id'];
|
||||
|
||||
$orderRepo = new OrderRepo();
|
||||
@ -50,18 +47,14 @@ class OrderFinish extends LogicService
|
||||
],
|
||||
];
|
||||
|
||||
$subscribeRepo = new WeChatSubscribeRepo();
|
||||
|
||||
$subscribe = $subscribeRepo->findByUserId($order->owner_id);
|
||||
|
||||
if ($wechatNoticeEnabled && $subscribe) {
|
||||
if ($wechatNoticeEnabled) {
|
||||
$notice = new WeChatOrderFinishNotice();
|
||||
$notice->handle($subscribe, $params);
|
||||
$notice->handle($params);
|
||||
}
|
||||
|
||||
if ($smsNoticeEnabled) {
|
||||
$notice = new SmsOrderFinishNotice();
|
||||
$notice->handle($user, $params);
|
||||
$notice->handle($params);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -11,7 +11,6 @@ use App\Models\PointGiftRedeem as PointGiftRedeemModel;
|
||||
use App\Models\Task as TaskModel;
|
||||
use App\Repos\PointGiftRedeem as PointGiftRedeemRepo;
|
||||
use App\Repos\User as UserRepo;
|
||||
use App\Repos\WeChatSubscribe as WeChatSubscribeRepo;
|
||||
use App\Services\Logic\Notice\External\Sms\GoodsDeliver as SmsGoodsDeliverNotice;
|
||||
use App\Services\Logic\Notice\External\WeChat\GoodsDeliver as WeChatGoodsDeliverNotice;
|
||||
use App\Services\Logic\Service as LogicService;
|
||||
@ -24,9 +23,7 @@ class PointGoodsDeliver extends LogicService
|
||||
$wechatNoticeEnabled = $this->wechatNoticeEnabled();
|
||||
$smsNoticeEnabled = $this->smsNoticeEnabled();
|
||||
|
||||
if (!$wechatNoticeEnabled && !$smsNoticeEnabled) return;
|
||||
|
||||
$redeemId = $task->item_info['point_redeem']['id'];
|
||||
$redeemId = $task->item_info['redeem']['id'];
|
||||
|
||||
$redeemRepo = new PointGiftRedeemRepo();
|
||||
|
||||
@ -46,18 +43,14 @@ class PointGoodsDeliver extends LogicService
|
||||
'deliver_time' => time(),
|
||||
];
|
||||
|
||||
$subscribeRepo = new WeChatSubscribeRepo();
|
||||
|
||||
$subscribe = $subscribeRepo->findByUserId($user->id);
|
||||
|
||||
if ($wechatNoticeEnabled && $subscribe) {
|
||||
if ($wechatNoticeEnabled) {
|
||||
$notice = new WeChatGoodsDeliverNotice();
|
||||
$notice->handle($subscribe, $params);
|
||||
$notice->handle($params);
|
||||
}
|
||||
|
||||
if ($smsNoticeEnabled) {
|
||||
$notice = new SmsGoodsDeliverNotice();
|
||||
$notice->handle($user, $params);
|
||||
$notice->handle($params);
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,7 +64,7 @@ class PointGoodsDeliver extends LogicService
|
||||
$task = new TaskModel();
|
||||
|
||||
$itemInfo = [
|
||||
'point_gift_redeem' => ['id' => $redeem->id],
|
||||
'redeem' => ['id' => $redeem->id],
|
||||
];
|
||||
|
||||
$task->item_id = $redeem->id;
|
||||
|
@ -11,7 +11,6 @@ use App\Models\Refund as RefundModel;
|
||||
use App\Models\Task as TaskModel;
|
||||
use App\Repos\Refund as RefundRepo;
|
||||
use App\Repos\User as UserRepo;
|
||||
use App\Repos\WeChatSubscribe as WeChatSubscribeRepo;
|
||||
use App\Services\Logic\Notice\External\Sms\RefundFinish as SmsRefundFinishNotice;
|
||||
use App\Services\Logic\Notice\External\WeChat\RefundFinish as WeChatRefundFinishNotice;
|
||||
use App\Services\Logic\Service as LogicService;
|
||||
@ -24,8 +23,6 @@ class RefundFinish extends LogicService
|
||||
$wechatNoticeEnabled = $this->wechatNoticeEnabled();
|
||||
$smsNoticeEnabled = $this->smsNoticeEnabled();
|
||||
|
||||
if (!$wechatNoticeEnabled && !$smsNoticeEnabled) return;
|
||||
|
||||
$refundId = $task->item_info['refund']['id'];
|
||||
|
||||
$refundRepo = new RefundRepo();
|
||||
@ -50,18 +47,14 @@ class RefundFinish extends LogicService
|
||||
],
|
||||
];
|
||||
|
||||
$subscribeRepo = new WeChatSubscribeRepo();
|
||||
|
||||
$subscribe = $subscribeRepo->findByUserId($refund->owner_id);
|
||||
|
||||
if ($wechatNoticeEnabled && $subscribe) {
|
||||
if ($wechatNoticeEnabled) {
|
||||
$notice = new WeChatRefundFinishNotice();
|
||||
$notice->handle($subscribe, $params);
|
||||
$notice->handle($params);
|
||||
}
|
||||
|
||||
if ($smsNoticeEnabled) {
|
||||
$notice = new SmsRefundFinishNotice();
|
||||
$notice->handle($user, $params);
|
||||
$notice->handle($params);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,6 @@
|
||||
|
||||
namespace App\Services\Logic\Notice\External\Sms;
|
||||
|
||||
use App\Models\User as UserModel;
|
||||
use App\Repos\Account as AccountRepo;
|
||||
use App\Services\Smser;
|
||||
|
||||
@ -17,15 +16,14 @@ class ConsultReply extends Smser
|
||||
protected $templateCode = 'consult_reply';
|
||||
|
||||
/**
|
||||
* @param UserModel $user
|
||||
* @param array $params
|
||||
* @return bool|null
|
||||
*/
|
||||
public function handle(UserModel $user, array $params)
|
||||
public function handle(array $params)
|
||||
{
|
||||
$accountRepo = new AccountRepo();
|
||||
|
||||
$account = $accountRepo->findById($user->id);
|
||||
$account = $accountRepo->findById($params['user']['id']);
|
||||
|
||||
if (!$account->phone) return null;
|
||||
|
||||
|
@ -7,7 +7,6 @@
|
||||
|
||||
namespace App\Services\Logic\Notice\External\Sms;
|
||||
|
||||
use App\Models\User as UserModel;
|
||||
use App\Repos\Account as AccountRepo;
|
||||
use App\Services\Smser;
|
||||
|
||||
@ -17,22 +16,21 @@ class GoodsDeliver extends Smser
|
||||
protected $templateCode = 'goods_deliver';
|
||||
|
||||
/**
|
||||
* @param UserModel $user
|
||||
* @param array $params
|
||||
* @return bool|null
|
||||
*/
|
||||
public function handle(UserModel $user, array $params)
|
||||
public function handle(array $params)
|
||||
{
|
||||
$params['deliver_time'] = date('Y-m-d H:i', $params['deliver_time']);
|
||||
|
||||
$accountRepo = new AccountRepo();
|
||||
|
||||
$account = $accountRepo->findById($user->id);
|
||||
$account = $accountRepo->findById($params['user']['id']);
|
||||
|
||||
if (!$account->phone) return null;
|
||||
|
||||
$templateId = $this->getTemplateId($this->templateCode);
|
||||
|
||||
$params['deliver_time'] = date('Y-m-d H:i', $params['deliver_time']);
|
||||
|
||||
$params = [
|
||||
$params['goods_name'],
|
||||
$params['order_sn'],
|
||||
|
@ -7,7 +7,6 @@
|
||||
|
||||
namespace App\Services\Logic\Notice\External\Sms;
|
||||
|
||||
use App\Models\User as UserModel;
|
||||
use App\Repos\Account as AccountRepo;
|
||||
use App\Services\Smser;
|
||||
|
||||
@ -17,20 +16,19 @@ class LiveBegin extends Smser
|
||||
protected $templateCode = 'live_begin';
|
||||
|
||||
/**
|
||||
* @param UserModel $user
|
||||
* @param array $params
|
||||
* @return bool|null
|
||||
*/
|
||||
public function handle(UserModel $user, array $params)
|
||||
public function handle(array $params)
|
||||
{
|
||||
$params['live']['start_time'] = date('H:i', $params['live']['start_time']);
|
||||
|
||||
$accountRepo = new AccountRepo();
|
||||
|
||||
$account = $accountRepo->findById($user->id);
|
||||
$account = $accountRepo->findById($params['user']['id']);
|
||||
|
||||
if (!$account->phone) return null;
|
||||
|
||||
$params['live']['start_time'] = date('H:i', $params['live']['start_time']);
|
||||
|
||||
$params = [
|
||||
$params['course']['title'],
|
||||
$params['chapter']['title'],
|
||||
|
@ -7,7 +7,6 @@
|
||||
|
||||
namespace App\Services\Logic\Notice\External\Sms;
|
||||
|
||||
use App\Models\User as UserModel;
|
||||
use App\Repos\Account as AccountRepo;
|
||||
use App\Services\Smser;
|
||||
|
||||
@ -17,15 +16,14 @@ class OrderFinish extends Smser
|
||||
protected $templateCode = 'order_finish';
|
||||
|
||||
/**
|
||||
* @param UserModel $user
|
||||
* @param array $params
|
||||
* @return bool|null
|
||||
*/
|
||||
public function handle(UserModel $user, array $params)
|
||||
public function handle(array $params)
|
||||
{
|
||||
$accountRepo = new AccountRepo();
|
||||
|
||||
$account = $accountRepo->findById($user->id);
|
||||
$account = $accountRepo->findById($params['user']['id']);
|
||||
|
||||
if (!$account->phone) return null;
|
||||
|
||||
|
@ -7,7 +7,6 @@
|
||||
|
||||
namespace App\Services\Logic\Notice\External\Sms;
|
||||
|
||||
use App\Models\User as UserModel;
|
||||
use App\Repos\Account as AccountRepo;
|
||||
use App\Services\Smser;
|
||||
|
||||
@ -17,15 +16,14 @@ class RefundFinish extends Smser
|
||||
protected $templateCode = 'refund_finish';
|
||||
|
||||
/**
|
||||
* @param UserModel $user
|
||||
* @param array $params
|
||||
* @return bool|null
|
||||
*/
|
||||
public function handle(UserModel $user, array $params)
|
||||
public function handle(array $params)
|
||||
{
|
||||
$accountRepo = new AccountRepo();
|
||||
|
||||
$account = $accountRepo->findById($user->id);
|
||||
$account = $accountRepo->findById($params['user']['id']);
|
||||
|
||||
if (!$account->phone) return null;
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
namespace App\Services\Logic\Notice\External\WeChat;
|
||||
|
||||
use App\Models\WeChatSubscribe as WeChatSubscribeModel;
|
||||
use App\Repos\WeChatSubscribe as WeChatSubscribeRepo;
|
||||
use App\Services\WeChatNotice;
|
||||
|
||||
class AccountLogin extends WeChatNotice
|
||||
@ -16,12 +16,17 @@ class AccountLogin extends WeChatNotice
|
||||
protected $templateCode = 'account_login';
|
||||
|
||||
/**
|
||||
* @param WeChatSubscribeModel $subscribe
|
||||
* @param array $params
|
||||
* @return bool
|
||||
* @return bool|null
|
||||
*/
|
||||
public function handle(WeChatSubscribeModel $subscribe, array $params)
|
||||
public function handle(array $params)
|
||||
{
|
||||
$subscribeRepo = new WeChatSubscribeRepo();
|
||||
|
||||
$subscribe = $subscribeRepo->findByUserId($params['user']['id']);
|
||||
|
||||
if (!$subscribe) return null;
|
||||
|
||||
$first = '你好,登录系统成功!';
|
||||
$remark = '如果非本人操作,请立即修改密码哦!';
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
namespace App\Services\Logic\Notice\External\WeChat;
|
||||
|
||||
use App\Models\WeChatSubscribe as WeChatSubscribeModel;
|
||||
use App\Repos\WeChatSubscribe as WeChatSubscribeRepo;
|
||||
use App\Services\WeChatNotice;
|
||||
|
||||
class ConsultReply extends WeChatNotice
|
||||
@ -16,12 +16,17 @@ class ConsultReply extends WeChatNotice
|
||||
protected $templateCode = 'consult_reply';
|
||||
|
||||
/**
|
||||
* @param WeChatSubscribeModel $subscribe
|
||||
* @param array $params
|
||||
* @return bool
|
||||
* @return bool|null
|
||||
*/
|
||||
public function handle(WeChatSubscribeModel $subscribe, array $params)
|
||||
public function handle(array $params)
|
||||
{
|
||||
$subscribeRepo = new WeChatSubscribeRepo();
|
||||
|
||||
$subscribe = $subscribeRepo->findByUserId($params['user']['id']);
|
||||
|
||||
if (!$subscribe) return null;
|
||||
|
||||
$first = sprintf('%s 回复了你的咨询!', $params['replier']['name']);
|
||||
|
||||
$remark = '如果还有其它疑问,请和我们保持联系哦!';
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
namespace App\Services\Logic\Notice\External\WeChat;
|
||||
|
||||
use App\Models\WeChatSubscribe as WeChatSubscribeModel;
|
||||
use App\Repos\WeChatSubscribe as WeChatSubscribeRepo;
|
||||
use App\Services\WeChatNotice;
|
||||
|
||||
class GoodsDeliver extends WeChatNotice
|
||||
@ -16,12 +16,16 @@ class GoodsDeliver extends WeChatNotice
|
||||
protected $templateCode = 'goods_deliver';
|
||||
|
||||
/**
|
||||
* @param WeChatSubscribeModel $subscribe
|
||||
* @param array $params
|
||||
* @return bool
|
||||
* @return bool|null
|
||||
*/
|
||||
public function handle(WeChatSubscribeModel $subscribe, $params)
|
||||
public function handle($params)
|
||||
{
|
||||
$subscribeRepo = new WeChatSubscribeRepo();
|
||||
|
||||
$subscribe = $subscribeRepo->findByUserId($params['user']['id']);
|
||||
|
||||
if (!$subscribe) return null;
|
||||
|
||||
$first = '发货已处理完成!';
|
||||
$remark = '感谢您的支持,有疑问请联系客服哦!';
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
namespace App\Services\Logic\Notice\External\WeChat;
|
||||
|
||||
use App\Models\WeChatSubscribe as WeChatSubscribeModel;
|
||||
use App\Repos\WeChatSubscribe as WeChatSubscribeRepo;
|
||||
use App\Services\WeChatNotice;
|
||||
|
||||
class LiveBegin extends WeChatNotice
|
||||
@ -16,12 +16,17 @@ class LiveBegin extends WeChatNotice
|
||||
protected $templateCode = 'live_begin';
|
||||
|
||||
/**
|
||||
* @param WeChatSubscribeModel $subscribe
|
||||
* @param array $params
|
||||
* @return bool
|
||||
* @return bool|null
|
||||
*/
|
||||
public function handle(WeChatSubscribeModel $subscribe, array $params)
|
||||
public function handle(array $params)
|
||||
{
|
||||
$subscribeRepo = new WeChatSubscribeRepo();
|
||||
|
||||
$subscribe = $subscribeRepo->findByUserId($params['user']['id']);
|
||||
|
||||
if (!$subscribe) return null;
|
||||
|
||||
$first = '你参与的课程直播就要开始了!';
|
||||
|
||||
$startTime = date('H:i', $params['live']['start_time']);
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
namespace App\Services\Logic\Notice\External\WeChat;
|
||||
|
||||
use App\Models\WeChatSubscribe as WeChatSubscribeModel;
|
||||
use App\Repos\WeChatSubscribe as WeChatSubscribeRepo;
|
||||
use App\Services\WeChatNotice;
|
||||
|
||||
class OrderFinish extends WeChatNotice
|
||||
@ -16,12 +16,16 @@ class OrderFinish extends WeChatNotice
|
||||
protected $templateCode = 'order_finish';
|
||||
|
||||
/**
|
||||
* @param WeChatSubscribeModel $subscribe
|
||||
* @param array $params
|
||||
* @return bool
|
||||
* @return bool|null
|
||||
*/
|
||||
public function handle(WeChatSubscribeModel $subscribe, $params)
|
||||
public function handle($params)
|
||||
{
|
||||
$subscribeRepo = new WeChatSubscribeRepo();
|
||||
|
||||
$subscribe = $subscribeRepo->findByUserId($params['user']['id']);
|
||||
|
||||
if (!$subscribe) return null;
|
||||
|
||||
$first = '订单已处理完成!';
|
||||
$remark = '感谢您的支持,有疑问请联系客服哦!';
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
namespace App\Services\Logic\Notice\External\WeChat;
|
||||
|
||||
use App\Models\WeChatSubscribe as WeChatSubscribeModel;
|
||||
use App\Repos\WeChatSubscribe as WeChatSubscribeRepo;
|
||||
use App\Services\WeChatNotice;
|
||||
|
||||
class RefundFinish extends WeChatNotice
|
||||
@ -16,12 +16,17 @@ class RefundFinish extends WeChatNotice
|
||||
protected $templateCode = 'refund_finish';
|
||||
|
||||
/**
|
||||
* @param WeChatSubscribeModel $subscribe
|
||||
* @param array $params
|
||||
* @return bool
|
||||
*/
|
||||
public function handle(WeChatSubscribeModel $subscribe, array $params)
|
||||
public function handle(array $params)
|
||||
{
|
||||
$subscribeRepo = new WeChatSubscribeRepo();
|
||||
|
||||
$subscribe = $subscribeRepo->findByUserId($params['user']['id']);
|
||||
|
||||
if (!$subscribe) return null;
|
||||
|
||||
$first = '退款已处理完成!';
|
||||
$remark = '感谢您的支持,有疑问请联系客服哦!';
|
||||
|
||||
|
@ -68,10 +68,17 @@ class GiftInfo extends LogicService
|
||||
|
||||
protected function handleMeInfo(PointGift $gift)
|
||||
{
|
||||
$me = ['allow_redeem' => 0];
|
||||
$me = [
|
||||
'allow_redeem' => 0,
|
||||
'logged' => 0,
|
||||
];
|
||||
|
||||
$user = $this->getLoginUser(true);
|
||||
|
||||
if ($user->id == 0) return $me;
|
||||
|
||||
$me['logged'] = 1;
|
||||
|
||||
$userRepo = new UserRepo();
|
||||
|
||||
$balance = $userRepo->findUserBalance($user->id);
|
||||
|
192
app/Services/Logic/Url/FullH5Url.php
Normal file
192
app/Services/Logic/Url/FullH5Url.php
Normal file
@ -0,0 +1,192 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2022 深圳市酷瓜软件有限公司
|
||||
* @license https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* @link https://www.koogua.com
|
||||
*/
|
||||
|
||||
namespace App\Services\Logic\Url;
|
||||
|
||||
use App\Models\Course as CourseModel;
|
||||
use App\Repos\Chapter as ChapterRepo;
|
||||
use App\Services\Service as AppService;
|
||||
use App\Traits\Client as ClientTrait;
|
||||
|
||||
class FullH5Url extends AppService
|
||||
{
|
||||
|
||||
/**
|
||||
* 基准地址
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $baseUrl;
|
||||
|
||||
/**
|
||||
* 跳转来源
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $source = 'pc';
|
||||
|
||||
use ClientTrait;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->baseUrl = $this->getBaseUrl();
|
||||
}
|
||||
|
||||
public function getHomeUrl()
|
||||
{
|
||||
return $this->getFullUrl('/index/index');
|
||||
}
|
||||
|
||||
public function getAccountRegisterUrl()
|
||||
{
|
||||
return $this->getFullUrl('/account/register');
|
||||
}
|
||||
|
||||
public function getAccountLoginUrl()
|
||||
{
|
||||
return $this->getFullUrl('/account/login');
|
||||
}
|
||||
|
||||
public function getAccountForgetUrl()
|
||||
{
|
||||
return $this->getFullUrl('/account/forget');
|
||||
}
|
||||
|
||||
public function getVipIndexUrl()
|
||||
{
|
||||
return $this->getFullUrl('/vip/index');
|
||||
}
|
||||
|
||||
public function getHelpIndexUrl()
|
||||
{
|
||||
return $this->getFullUrl('/help/index');
|
||||
}
|
||||
|
||||
public function getCourseListUrl()
|
||||
{
|
||||
return $this->getFullUrl('/course/list');
|
||||
}
|
||||
|
||||
public function getArticleListUrl()
|
||||
{
|
||||
return $this->getFullUrl('/article/list');
|
||||
}
|
||||
|
||||
public function getQuestionListUrl()
|
||||
{
|
||||
return $this->getFullUrl('/question/list');
|
||||
}
|
||||
|
||||
public function getLiveListUrl()
|
||||
{
|
||||
return $this->getFullUrl('/live/list');
|
||||
}
|
||||
|
||||
public function getTeacherListUrl()
|
||||
{
|
||||
return $this->getFullUrl('/teacher/list');
|
||||
}
|
||||
|
||||
public function getFlashSaleListUrl()
|
||||
{
|
||||
return $this->getFullUrl('/flash-sale/list');
|
||||
}
|
||||
|
||||
public function getPointGiftListUrl()
|
||||
{
|
||||
return $this->getFullUrl('/point/gift/list');
|
||||
}
|
||||
|
||||
public function getPageInfoUrl($id)
|
||||
{
|
||||
return $this->getFullUrl('/page/info', ['id' => $id]);
|
||||
}
|
||||
|
||||
public function getHelpInfoUrl($id)
|
||||
{
|
||||
return $this->getFullUrl('/help/info', ['id' => $id]);
|
||||
}
|
||||
|
||||
public function getArticleInfoUrl($id)
|
||||
{
|
||||
return $this->getFullUrl('/article/info', ['id' => $id]);
|
||||
}
|
||||
|
||||
public function getQuestionInfoUrl($id)
|
||||
{
|
||||
return $this->getFullUrl('/question/info', ['id' => $id]);
|
||||
}
|
||||
|
||||
public function getAnswerInfoUrl($id)
|
||||
{
|
||||
return $this->getFullUrl('/answer/info', ['id' => $id]);
|
||||
}
|
||||
|
||||
public function getTopicInfoUrl($id)
|
||||
{
|
||||
return $this->getFullUrl('/topic/info', ['id' => $id]);
|
||||
}
|
||||
|
||||
public function getPackageInfoUrl($id)
|
||||
{
|
||||
return $this->getFullUrl('/package/info', ['id' => $id]);
|
||||
}
|
||||
|
||||
public function getCourseInfoUrl($id)
|
||||
{
|
||||
return $this->getFullUrl('/course/info', ['id' => $id]);
|
||||
}
|
||||
|
||||
public function getChapterInfoUrl($id)
|
||||
{
|
||||
$chapterRepo = new ChapterRepo();
|
||||
|
||||
$chapter = $chapterRepo->findById($id);
|
||||
|
||||
if ($chapter->model == CourseModel::MODEL_VOD) {
|
||||
return $this->getFullUrl('/chapter/vod', ['id' => $id]);
|
||||
} elseif ($chapter->model == CourseModel::MODEL_LIVE) {
|
||||
return $this->getFullUrl('/chapter/live', ['id' => $id]);
|
||||
} elseif ($chapter->model == CourseModel::MODEL_READ) {
|
||||
return $this->getFullUrl('/chapter/read', ['id' => $id]);
|
||||
} else {
|
||||
return $this->getHomeUrl();
|
||||
}
|
||||
}
|
||||
|
||||
public function getUserIndexUrl($id)
|
||||
{
|
||||
return $this->getFullUrl('/user/index', ['id' => $id]);
|
||||
}
|
||||
|
||||
public function getTeacherIndexUrl($id)
|
||||
{
|
||||
return $this->getFullUrl('/teacher/index', ['id' => $id]);
|
||||
}
|
||||
|
||||
public function getPointGiftInfoUrl($id)
|
||||
{
|
||||
return $this->getFullUrl('/point/gift/info', ['id' => $id]);
|
||||
}
|
||||
|
||||
protected function getFullUrl($path, $params = [])
|
||||
{
|
||||
$extra = ['source' => $this->source];
|
||||
|
||||
$data = array_merge($params, $extra);
|
||||
|
||||
$query = http_build_query($data);
|
||||
|
||||
return sprintf('%s%s?%s', $this->baseUrl, $path, $query);
|
||||
}
|
||||
|
||||
protected function getBaseUrl()
|
||||
{
|
||||
return sprintf('%s/h5/#/pages', kg_site_url());
|
||||
}
|
||||
|
||||
}
|
139
app/Services/Logic/Url/FullWebUrl.php
Normal file
139
app/Services/Logic/Url/FullWebUrl.php
Normal file
@ -0,0 +1,139 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2022 深圳市酷瓜软件有限公司
|
||||
* @license https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* @link https://www.koogua.com
|
||||
*/
|
||||
|
||||
namespace App\Services\Logic\Url;
|
||||
|
||||
use App\Services\Service;
|
||||
|
||||
class FullWebUrl extends Service
|
||||
{
|
||||
|
||||
/**
|
||||
* 基准地址
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $baseUrl;
|
||||
|
||||
/**
|
||||
* 跳转来源
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $source = 'pc';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->baseUrl = $this->getBaseUrl();
|
||||
}
|
||||
|
||||
public function getHomeUrl()
|
||||
{
|
||||
return $this->baseUrl;
|
||||
}
|
||||
|
||||
public function getVipUrl()
|
||||
{
|
||||
$route = $this->url->get(['for' => 'home.vip.index']);
|
||||
|
||||
return $this->getFullUrl($route);
|
||||
}
|
||||
|
||||
public function getHelpShowUrl($id)
|
||||
{
|
||||
$route = $this->url->get(['for' => 'home.help.show', 'id' => $id]);
|
||||
|
||||
return $this->getFullUrl($route);
|
||||
}
|
||||
|
||||
public function getPageShowUrl($id)
|
||||
{
|
||||
$route = $this->url->get(['for' => 'home.page.show', 'id' => $id]);
|
||||
|
||||
return $this->getFullUrl($route);
|
||||
}
|
||||
|
||||
public function getArticleShowUrl($id)
|
||||
{
|
||||
$route = $this->url->get(['for' => 'home.article.show', 'id' => $id]);
|
||||
|
||||
return $this->getFullUrl($route);
|
||||
}
|
||||
|
||||
public function getQuestionShowUrl($id)
|
||||
{
|
||||
$route = $this->url->get(['for' => 'home.question.show', 'id' => $id]);
|
||||
|
||||
return $this->getFullUrl($route);
|
||||
}
|
||||
|
||||
public function getTopicShowUrl($id)
|
||||
{
|
||||
$route = $this->url->get(['for' => 'home.topic.show', 'id' => $id]);
|
||||
|
||||
return $this->getFullUrl($route);
|
||||
}
|
||||
|
||||
public function getPackageShowUrl($id)
|
||||
{
|
||||
$route = $this->url->get(['for' => 'home.package.show', 'id' => $id]);
|
||||
|
||||
return $this->getFullUrl($route);
|
||||
}
|
||||
|
||||
public function getCourseShowUrl($id)
|
||||
{
|
||||
$route = $this->url->get(['for' => 'home.course.show', 'id' => $id]);
|
||||
|
||||
return $this->getFullUrl($route);
|
||||
}
|
||||
|
||||
public function getChapterShowUrl($id)
|
||||
{
|
||||
$route = $this->url->get(['for' => 'home.chapter.show', 'id' => $id]);
|
||||
|
||||
return $this->getFullUrl($route);
|
||||
}
|
||||
|
||||
public function getUserShowUrl($id)
|
||||
{
|
||||
$route = $this->url->get(['for' => 'home.user.show', 'id' => $id]);
|
||||
|
||||
return $this->getFullUrl($route);
|
||||
}
|
||||
|
||||
public function getTeacherShowUrl($id)
|
||||
{
|
||||
$route = $this->url->get(['for' => 'home.teacher.show', 'id' => $id]);
|
||||
|
||||
return $this->getFullUrl($route);
|
||||
}
|
||||
|
||||
public function getPointGiftShowUrl($id)
|
||||
{
|
||||
$route = $this->url->get(['for' => 'home.point_gift.show', 'id' => $id]);
|
||||
|
||||
return $this->getFullUrl($route);
|
||||
}
|
||||
|
||||
protected function getFullUrl($path, $params = [])
|
||||
{
|
||||
$extra = ['source' => $this->source];
|
||||
|
||||
$data = array_merge($params, $extra);
|
||||
|
||||
$query = http_build_query($data);
|
||||
|
||||
return sprintf('%s%s?%s', $this->baseUrl, $path, $query);
|
||||
}
|
||||
|
||||
protected function getBaseUrl()
|
||||
{
|
||||
return kg_site_url();
|
||||
}
|
||||
|
||||
}
|
228
app/Services/Logic/Url/ShareUrl.php
Normal file
228
app/Services/Logic/Url/ShareUrl.php
Normal file
@ -0,0 +1,228 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2022 深圳市酷瓜软件有限公司
|
||||
* @license https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* @link https://www.koogua.com
|
||||
*/
|
||||
|
||||
namespace App\Services\Logic\Url;
|
||||
|
||||
use App\Services\Service as AppService;
|
||||
use App\Traits\Client as ClientTrait;
|
||||
|
||||
class ShareUrl extends AppService
|
||||
{
|
||||
|
||||
/**
|
||||
* WEB站点URL
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $fullWebUrl;
|
||||
|
||||
/**
|
||||
* H5站点URL
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $fullH5Url;
|
||||
|
||||
/**
|
||||
* 目标类型:h5|web
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $targetType;
|
||||
|
||||
use ClientTrait;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->fullWebUrl = new FullWebUrl();
|
||||
$this->fullH5Url = new FullH5Url();
|
||||
}
|
||||
|
||||
public function handle($type, $id = 0, $referer = 0)
|
||||
{
|
||||
if ($type == 'article') {
|
||||
$result = $this->getArticleUrl($id);
|
||||
} elseif ($type == 'page') {
|
||||
$result = $this->getPageUrl($id);
|
||||
} elseif ($type == 'question') {
|
||||
$result = $this->getQuestionUrl($id);
|
||||
} elseif ($type == 'course') {
|
||||
$result = $this->getCourseUrl($id);
|
||||
} elseif ($type == 'chapter') {
|
||||
$result = $this->getChapterUrl($id);
|
||||
} elseif ($type == 'user') {
|
||||
$result = $this->getUserUrl($id);
|
||||
} elseif ($type == 'teacher') {
|
||||
$result = $this->getTeacherUrl($id);
|
||||
} elseif ($type == 'topic') {
|
||||
$result = $this->getTopicUrl($id);
|
||||
} elseif ($type == 'package') {
|
||||
$result = $this->getPackageUrl($id);
|
||||
} elseif ($type == 'vip') {
|
||||
$result = $this->getVipUrl();
|
||||
} elseif ($type == 'point_gift') {
|
||||
$result = $this->getPointGiftUrl($id);
|
||||
} else {
|
||||
$result = $this->getHomeUrl();
|
||||
}
|
||||
|
||||
if ($referer > 0) {
|
||||
$result['h5'] = $this->withReferer($result['h5'], $referer);
|
||||
$result['web'] = $this->withReferer($result['web'], $referer);
|
||||
}
|
||||
|
||||
$gotoH5 = $this->gotoH5Url();
|
||||
|
||||
return $gotoH5 ? $result['h5'] : $result['web'];
|
||||
}
|
||||
|
||||
public function getHomeUrl()
|
||||
{
|
||||
$webUrl = $this->fullWebUrl->getHomeUrl();
|
||||
|
||||
$h5Url = $this->fullH5Url->getHomeUrl();
|
||||
|
||||
return ['web' => $webUrl, 'h5' => $h5Url];
|
||||
}
|
||||
|
||||
public function getVipUrl()
|
||||
{
|
||||
$webUrl = $this->fullWebUrl->getVipUrl();
|
||||
|
||||
$h5Url = $this->fullH5Url->getVipIndexUrl();
|
||||
|
||||
return ['web' => $webUrl, 'h5' => $h5Url];
|
||||
}
|
||||
|
||||
public function getHelpUrl($id)
|
||||
{
|
||||
$webUrl = $this->fullWebUrl->getHelpShowUrl($id);
|
||||
|
||||
$h5Url = $this->fullH5Url->getHelpInfoUrl($id);
|
||||
|
||||
return ['web' => $webUrl, 'h5' => $h5Url];
|
||||
}
|
||||
|
||||
public function getPageUrl($id)
|
||||
{
|
||||
$webUrl = $this->fullWebUrl->getPageShowUrl($id);
|
||||
|
||||
$h5Url = $this->fullH5Url->getPageInfoUrl($id);
|
||||
|
||||
return ['web' => $webUrl, 'h5' => $h5Url];
|
||||
}
|
||||
|
||||
public function getArticleUrl($id)
|
||||
{
|
||||
$webUrl = $this->fullWebUrl->getArticleShowUrl($id);
|
||||
|
||||
$h5Url = $this->fullH5Url->getArticleInfoUrl($id);
|
||||
|
||||
return ['web' => $webUrl, 'h5' => $h5Url];
|
||||
}
|
||||
|
||||
public function getQuestionUrl($id)
|
||||
{
|
||||
$webUrl = $this->fullWebUrl->getQuestionShowUrl($id);
|
||||
|
||||
$h5Url = $this->fullH5Url->getQuestionInfoUrl($id);
|
||||
|
||||
return ['web' => $webUrl, 'h5' => $h5Url];
|
||||
}
|
||||
|
||||
public function getTopicUrl($id)
|
||||
{
|
||||
$webUrl = $this->fullWebUrl->getTopicShowUrl($id);
|
||||
|
||||
$h5Url = $this->fullH5Url->getTopicInfoUrl($id);
|
||||
|
||||
return ['web' => $webUrl, 'h5' => $h5Url];
|
||||
}
|
||||
|
||||
public function getPackageUrl($id)
|
||||
{
|
||||
$webUrl = $this->fullWebUrl->getPackageShowUrl($id);
|
||||
|
||||
$h5Url = $this->fullH5Url->getPackageInfoUrl($id);
|
||||
|
||||
return ['web' => $webUrl, 'h5' => $h5Url];
|
||||
}
|
||||
|
||||
public function getCourseUrl($id)
|
||||
{
|
||||
$webUrl = $this->fullWebUrl->getCourseShowUrl($id);
|
||||
|
||||
$h5Url = $this->fullH5Url->getCourseInfoUrl($id);
|
||||
|
||||
return ['web' => $webUrl, 'h5' => $h5Url];
|
||||
}
|
||||
|
||||
public function getChapterUrl($id)
|
||||
{
|
||||
$webUrl = $this->fullWebUrl->getChapterShowUrl($id);
|
||||
|
||||
$h5Url = $this->fullH5Url->getChapterInfoUrl($id);
|
||||
|
||||
return ['web' => $webUrl, 'h5' => $h5Url];
|
||||
}
|
||||
|
||||
public function getUserUrl($id)
|
||||
{
|
||||
$webUrl = $this->fullWebUrl->getUserShowUrl($id);
|
||||
|
||||
$h5Url = $this->fullH5Url->getUserIndexUrl($id);
|
||||
|
||||
return ['web' => $webUrl, 'h5' => $h5Url];
|
||||
}
|
||||
|
||||
public function getTeacherUrl($id)
|
||||
{
|
||||
$webUrl = $this->fullWebUrl->getTeacherShowUrl($id);
|
||||
|
||||
$h5Url = $this->fullH5Url->getTeacherIndexUrl($id);
|
||||
|
||||
return ['web' => $webUrl, 'h5' => $h5Url];
|
||||
}
|
||||
|
||||
public function getPointGiftUrl($id)
|
||||
{
|
||||
|
||||
$webUrl = $this->fullWebUrl->getPointGiftShowUrl($id);
|
||||
|
||||
$h5Url = $this->fullH5Url->getPointGiftInfoUrl($id);
|
||||
|
||||
return ['web' => $webUrl, 'h5' => $h5Url];
|
||||
}
|
||||
|
||||
public function setTargetType($targetType)
|
||||
{
|
||||
$this->targetType = $targetType;
|
||||
}
|
||||
|
||||
protected function withReferer($url, $referer)
|
||||
{
|
||||
$params = ['referer' => $referer];
|
||||
|
||||
if (strpos($url, '?') === false) {
|
||||
$url .= '?' . http_build_query($params);
|
||||
} else {
|
||||
$url .= '&' . http_build_query($params);
|
||||
}
|
||||
|
||||
return $url;
|
||||
}
|
||||
|
||||
protected function gotoH5Url()
|
||||
{
|
||||
if (!$this->h5Enabled()) return false;
|
||||
|
||||
if ($this->targetType == 'h5') return true;
|
||||
|
||||
return $this->isMobileBrowser();
|
||||
}
|
||||
|
||||
}
|
181
composer.lock
generated
181
composer.lock
generated
@ -2365,33 +2365,34 @@
|
||||
"time": "2017-10-23T01:57:42+00:00"
|
||||
},
|
||||
{
|
||||
"name": "qcloud/cos-sdk-v5",
|
||||
"version": "v2.6.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/tencentyun/cos-php-sdk-v5.git",
|
||||
"reference": "d367ba8d0305b83364b64055594a0ac22b1cefd8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/tencentyun/cos-php-sdk-v5/zipball/d367ba8d0305b83364b64055594a0ac22b1cefd8",
|
||||
"reference": "d367ba8d0305b83364b64055594a0ac22b1cefd8",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
|
||||
"preferred": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"name": "qcloud/cos-sdk-v5",
|
||||
"version": "v2.6.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/tencentyun/cos-php-sdk-v5.git",
|
||||
"reference": "92a1ee62b85ed4e7bf6836a684df5d7e3158d0ed"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/tencentyun/cos-php-sdk-v5/zipball/92a1ee62b85ed4e7bf6836a684df5d7e3158d0ed",
|
||||
"reference": "92a1ee62b85ed4e7bf6836a684df5d7e3158d0ed",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
|
||||
"preferred": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"require": {
|
||||
"ext-curl": "*",
|
||||
"ext-json": "*",
|
||||
"ext-simplexml": "*",
|
||||
"guzzlehttp/guzzle": "^6.2.1 || ^7.0",
|
||||
"guzzlehttp/guzzle-services": "^1.1",
|
||||
"guzzlehttp/psr7": "^1.3.1 || ^2.0",
|
||||
"php": ">=5.6"
|
||||
"ext-curl": "*",
|
||||
"ext-json": "*",
|
||||
"ext-mbstring": "*",
|
||||
"ext-simplexml": "*",
|
||||
"guzzlehttp/guzzle": "^6.2.1 || ^7.0",
|
||||
"guzzlehttp/guzzle-services": "^1.1",
|
||||
"guzzlehttp/psr7": "^1.3.1 || ^2.0",
|
||||
"php": ">=5.6"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
@ -2433,9 +2434,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/tencentyun/cos-php-sdk-v5/issues",
|
||||
"source": "https://github.com/tencentyun/cos-php-sdk-v5/tree/v2.6.1"
|
||||
"source": "https://github.com/tencentyun/cos-php-sdk-v5/tree/v2.6.2"
|
||||
},
|
||||
"time": "2023-02-07T09:49:12+00:00"
|
||||
"time": "2023-04-07T07:38:24+00:00"
|
||||
},
|
||||
{
|
||||
"name": "ralouphie/getallheaders",
|
||||
@ -4908,40 +4909,43 @@
|
||||
],
|
||||
"time": "2022-05-27T12:56:18+00:00"
|
||||
},
|
||||
{
|
||||
"name": "tencentcloud/tencentcloud-sdk-php",
|
||||
"version": "3.0.824",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/TencentCloud/tencentcloud-sdk-php.git",
|
||||
"reference": "1d85da7e51ba02defe33fbae0b6dbae0f1d7caf5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/TencentCloud/tencentcloud-sdk-php/zipball/1d85da7e51ba02defe33fbae0b6dbae0f1d7caf5",
|
||||
"reference": "1d85da7e51ba02defe33fbae0b6dbae0f1d7caf5",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
|
||||
"preferred": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"require": {
|
||||
"guzzlehttp/guzzle": "^6.3 || ^7.0",
|
||||
"php": ">=5.6.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"TencentCloud\\": "./src/TencentCloud"
|
||||
},
|
||||
"classmap": [
|
||||
"src/QcloudApi/QcloudApi.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
{
|
||||
"name": "tencentcloud/tencentcloud-sdk-php",
|
||||
"version": "3.0.889",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/TencentCloud/tencentcloud-sdk-php.git",
|
||||
"reference": "a08031e5111f17131fceb429eebb8223c105d8b3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/TencentCloud/tencentcloud-sdk-php/zipball/a08031e5111f17131fceb429eebb8223c105d8b3",
|
||||
"reference": "a08031e5111f17131fceb429eebb8223c105d8b3",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
|
||||
"preferred": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"require": {
|
||||
"guzzlehttp/guzzle": "^6.3 || ^7.0",
|
||||
"php": ">=5.6.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^9.5"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"TencentCloud\\": "./src/TencentCloud"
|
||||
},
|
||||
"classmap": [
|
||||
"src/QcloudApi/QcloudApi.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"Apache-2.0"
|
||||
],
|
||||
@ -4957,9 +4961,9 @@
|
||||
"homepage": "https://github.com/TencentCloud/tencentcloud-sdk-php",
|
||||
"support": {
|
||||
"issues": "https://github.com/TencentCloud/tencentcloud-sdk-php/issues",
|
||||
"source": "https://github.com/TencentCloud/tencentcloud-sdk-php/tree/3.0.824"
|
||||
"source": "https://github.com/TencentCloud/tencentcloud-sdk-php/tree/3.0.889"
|
||||
},
|
||||
"time": "2023-02-15T00:03:58+00:00"
|
||||
"time": "2023-05-22T00:02:52+00:00"
|
||||
},
|
||||
{
|
||||
"name": "webmozart/assert",
|
||||
@ -5095,28 +5099,29 @@
|
||||
},
|
||||
"time": "2022-04-19T20:14:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "workerman/gateway-worker",
|
||||
"version": "v3.0.27",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/walkor/GatewayWorker.git",
|
||||
"reference": "c0cae6c0e69288ab7dcc8b25599d3b9e4f4441d2"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/walkor/GatewayWorker/zipball/c0cae6c0e69288ab7dcc8b25599d3b9e4f4441d2",
|
||||
"reference": "c0cae6c0e69288ab7dcc8b25599d3b9e4f4441d2",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
|
||||
"preferred": true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "workerman/gateway-worker",
|
||||
"version": "v3.0.28",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/walkor/GatewayWorker.git",
|
||||
"reference": "a7dffc53403133131a51b9fd3c6c6d70869cb6d3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/walkor/GatewayWorker/zipball/a7dffc53403133131a51b9fd3c6c6d70869cb6d3",
|
||||
"reference": "a7dffc53403133131a51b9fd3c6c6d70869cb6d3",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
|
||||
"preferred": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"require": {
|
||||
"workerman/workerman": "^4.0.0 || ^5.0.0"
|
||||
"php": ">=7.0",
|
||||
"workerman/workerman": "^4.0.30"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
@ -5135,7 +5140,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/walkor/GatewayWorker/issues",
|
||||
"source": "https://github.com/walkor/GatewayWorker/tree/v3.0.27"
|
||||
"source": "https://github.com/walkor/GatewayWorker/tree/v3.0.28"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -5147,7 +5152,7 @@
|
||||
"type": "patreon"
|
||||
}
|
||||
],
|
||||
"time": "2023-02-09T09:16:04+00:00"
|
||||
"time": "2023-03-24T03:56:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "workerman/gatewayclient",
|
||||
@ -5641,5 +5646,5 @@
|
||||
"ext-fileinfo": "*"
|
||||
},
|
||||
"platform-dev": [],
|
||||
"plugin-api-version": "2.3.0"
|
||||
"plugin-api-version": "2.0.0"
|
||||
}
|
||||
|
37
db/migrations/20230522141831.php
Normal file
37
db/migrations/20230522141831.php
Normal file
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2023 深圳市酷瓜软件有限公司
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.koogua.com
|
||||
*/
|
||||
|
||||
use Phinx\Db\Adapter\MysqlAdapter;
|
||||
use Phinx\Migration\AbstractMigration;
|
||||
|
||||
final class V20230522141831 extends AbstractMigration
|
||||
{
|
||||
|
||||
public function up()
|
||||
{
|
||||
$this->alterReviewLikeTable();
|
||||
}
|
||||
|
||||
protected function alterReviewLikeTable()
|
||||
{
|
||||
$table = $this->table('kg_review_like');
|
||||
|
||||
if (!$table->hasColumn('update_time')) {
|
||||
$table->addColumn('update_time', 'integer', [
|
||||
'null' => false,
|
||||
'default' => '0',
|
||||
'limit' => MysqlAdapter::INT_REGULAR,
|
||||
'signed' => false,
|
||||
'comment' => '更新时间',
|
||||
'after' => 'create_time',
|
||||
]);
|
||||
}
|
||||
|
||||
$table->save();
|
||||
}
|
||||
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user