FastMovieAI AI短剧创作平台 二开基线
- 源码: xhadmincn/FastMovieAI (Apache 2.0) - 二开: Docker部署, Swoole改Select, route.php修复, 补update/VERSION - vendor/示例资源已gitignore
This commit is contained in:
@@ -0,0 +1,153 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\shortplay\app\model;
|
||||
|
||||
use plugin\control\expose\helper\Uploads;
|
||||
use app\model\Basic;
|
||||
use plugin\control\app\model\PluginChannelsUser;
|
||||
use plugin\model\app\model\PluginModelTask;
|
||||
use plugin\model\utils\enum\ModelScene;
|
||||
use plugin\shortplay\utils\enum\ActorStatus;
|
||||
use plugin\user\app\model\PluginUser;
|
||||
use support\Request;
|
||||
use think\facade\Db;
|
||||
|
||||
class PluginShortplayActor extends Basic
|
||||
{
|
||||
protected function getOptions(): array
|
||||
{
|
||||
return [
|
||||
'type' => [
|
||||
// 设置JSON字段的类型
|
||||
'voice' => 'json',
|
||||
]
|
||||
];
|
||||
}
|
||||
public function getThreeViewImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setThreeViewImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public function getHeadimgAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setHeadimgAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public function getOriginHeadimgAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $data['origin_headimg']);
|
||||
}
|
||||
public function getOriginThreeViewImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $data['origin_three_view_image']);
|
||||
}
|
||||
public function user()
|
||||
{
|
||||
return $this->hasOne(PluginUser::class, 'id', 'uid');
|
||||
}
|
||||
|
||||
public function channels()
|
||||
{
|
||||
return $this->hasOne(PluginChannelsUser::class, 'id', 'channels_uid');
|
||||
}
|
||||
public static function onAfterRead($model)
|
||||
{
|
||||
$model->status_enum = ActorStatus::get($model->status);
|
||||
if ($model->status != ActorStatus::GENERATED['value']) {
|
||||
$imageState = PluginModelTask::processing(['alias_id' => $model->id, 'scene' => ModelScene::ACTOR_IMAGE['value']]);
|
||||
$threeViewImageState = PluginModelTask::processing(['alias_id' => $model->id, 'scene' => ModelScene::ACTOR_THREE_VIEW_IMAGE['value']]);
|
||||
if ($imageState > 0 || $threeViewImageState > 0) {
|
||||
$model->status_enum = ActorStatus::PENDING;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 统一查询构造器
|
||||
* @param array $params 包含 drama_id, episode_id, storyboard_id 的数组
|
||||
* @return PluginShortplayActor
|
||||
*/
|
||||
public static function actorQuery($params = [])
|
||||
{
|
||||
$query = (new PluginShortplayActor)->alias('actor');
|
||||
// 处理参数,统一为 0 或具体 ID
|
||||
$sid = !empty($params['storyboard_id']) ? (int)$params['storyboard_id'] : 0;
|
||||
$eid = !empty($params['episode_id']) ? (int)$params['episode_id'] : 0;
|
||||
$did = !empty($params['drama_id']) ? (int)$params['drama_id'] : 0;
|
||||
|
||||
$fields = ['actor.*,actor.headimg as origin_headimg,actor.three_view_image as origin_three_view_image'];
|
||||
$activeLevels = [];
|
||||
|
||||
/**
|
||||
* 1. 动态关联所有可能的层级 (全部使用 LEFT JOIN 保证回退链路通畅)
|
||||
*/
|
||||
if ($sid) {
|
||||
$query->leftJoin('php_plugin_shortplay_drama_storyboard_actor s_actor', "s_actor.actor_id = actor.id AND s_actor.storyboard_id = $sid");
|
||||
$activeLevels['s'] = 's_actor';
|
||||
$fields[] = 's_actor.id as storyboard_actor_id';
|
||||
}
|
||||
if ($eid) {
|
||||
$query->leftJoin('php_plugin_shortplay_drama_episode_actor e_actor', "e_actor.actor_id = actor.id AND e_actor.episode_id = $eid");
|
||||
$activeLevels['e'] = 'e_actor';
|
||||
$fields[] = 'e_actor.id as episode_actor_id';
|
||||
}
|
||||
if ($did) {
|
||||
$query->leftJoin('php_plugin_shortplay_drama_actor d_actor', "d_actor.actor_id = actor.id AND d_actor.drama_id = $did");
|
||||
$activeLevels['d'] = 'd_actor';
|
||||
$fields[] = 'd_actor.id as drama_actor_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* 2. 强制过滤:确保角色必须存在于你传入的最深层 ID 中
|
||||
* 对应你说的:“必须在这一集中出现的角色才显示”
|
||||
*/
|
||||
if ($sid) {
|
||||
$query->whereNotNull('s_actor.id'); // 必须在分镜表有记录
|
||||
$fields[] = 's_actor.character_look_id';
|
||||
} elseif ($eid) {
|
||||
$query->whereNotNull('e_actor.id'); // 必须在分集表有记录
|
||||
$fields[] = 'e_actor.character_look_id';
|
||||
} elseif ($did) {
|
||||
$query->whereNotNull('d_actor.id'); // 必须在短剧表有记录
|
||||
$fields[] = 'd_actor.character_look_id';
|
||||
}
|
||||
if ($sid || $eid || $did) {
|
||||
/**
|
||||
* 3. 字段组独立判定 (Image Group & Voice Group)
|
||||
*/
|
||||
$groupConfigs = [
|
||||
'img' => ['check' => 'headimg', 'fields' => ['headimg', 'three_view_image']],
|
||||
'voice' => ['check' => 'voice', 'fields' => ['voice']],
|
||||
];
|
||||
|
||||
foreach ($groupConfigs as $config) {
|
||||
$c = $config['check'];
|
||||
|
||||
// 动态构建层级判定逻辑 (按优先级顺序遍历 activeLevels)
|
||||
$winnerSql = "CASE ";
|
||||
foreach ($activeLevels as $key => $alias) {
|
||||
$winnerSql .= "WHEN $alias.$c IS NOT NULL AND $alias.$c != '' THEN '$key' ";
|
||||
}
|
||||
$winnerSql .= "ELSE 'b' END";
|
||||
|
||||
// 应用到该组所有字段
|
||||
foreach ($config['fields'] as $f) {
|
||||
$caseSql = "CASE ($winnerSql) ";
|
||||
foreach ($activeLevels as $key => $alias) {
|
||||
$caseSql .= "WHEN '$key' THEN $alias.$f ";
|
||||
}
|
||||
$caseSql .= "ELSE actor.$f END AS $f";
|
||||
$fields[] = \think\facade\Db::raw($caseSql);
|
||||
}
|
||||
}
|
||||
}
|
||||
$query->field($fields);
|
||||
return $query;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\shortplay\app\model;
|
||||
|
||||
use app\model\Basic;
|
||||
use plugin\control\expose\helper\Uploads;
|
||||
use plugin\model\app\model\PluginModelTask;
|
||||
use plugin\shortplay\utils\enum\ActorStatus;
|
||||
|
||||
class PluginShortplayActorCharacterLook extends Basic
|
||||
{
|
||||
public function getHeadimgAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setHeadimgAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public function getThreeViewImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setThreeViewImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public function characterLook()
|
||||
{
|
||||
return $this->hasOne(PluginShortplayCharacterLook::class, 'id', 'character_look_id');
|
||||
}
|
||||
public static function processing($where = [])
|
||||
{
|
||||
return self::where($where)->whereIn('status', [ActorStatus::INITIALIZING['value'], ActorStatus::PENDING['value']])->count();
|
||||
}
|
||||
public static function onAfterRead($model)
|
||||
{
|
||||
$model->status_enum = ActorStatus::get($model->status);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\shortplay\app\model;
|
||||
|
||||
use app\model\Basic;
|
||||
use plugin\control\expose\helper\Uploads;
|
||||
use plugin\model\app\model\PluginModelTask;
|
||||
use plugin\model\utils\enum\ModelScene;
|
||||
use plugin\shortplay\utils\enum\ActorStatus;
|
||||
|
||||
class PluginShortplayCharacterLook extends Basic
|
||||
{
|
||||
public function getCostumeUrlAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setCostumeUrlAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public static function onAfterRead($model)
|
||||
{
|
||||
$model->status_enum = ActorStatus::get($model->status);
|
||||
if ($model->status != ActorStatus::GENERATED['value']) {
|
||||
$imageState = PluginModelTask::processing(['alias_id' => $model->id, 'scene' => ModelScene::CHARACTER_LOOK_COSTUME['value']]);
|
||||
if ($imageState > 0) {
|
||||
$model->status_enum = ActorStatus::PENDING;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\shortplay\app\model;
|
||||
|
||||
use plugin\control\expose\helper\Uploads;
|
||||
use app\model\Basic;
|
||||
use plugin\control\app\model\PluginChannelsUser;
|
||||
use plugin\model\app\model\PluginModelTask;
|
||||
use plugin\model\utils\enum\ModelScene;
|
||||
|
||||
class PluginShortplayDrama extends Basic
|
||||
{
|
||||
protected function getOptions(): array
|
||||
{
|
||||
return [
|
||||
'type' => [
|
||||
// 设置JSON字段的类型
|
||||
'voice' => 'json',
|
||||
]
|
||||
];
|
||||
}
|
||||
public function style()
|
||||
{
|
||||
return $this->hasOne(PluginShortplayStyle::class, 'id', 'style_id');
|
||||
}
|
||||
public function episodes()
|
||||
{
|
||||
return $this->hasMany(PluginShortplayDramaEpisode::class, 'drama_id', 'id');
|
||||
}
|
||||
public function getCoverAttr($value,$data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setCoverAttr($value,$data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public function channels()
|
||||
{
|
||||
return $this->hasOne(PluginChannelsUser::class, 'id', 'channels_uid');
|
||||
}
|
||||
public static function onAfterRead($model)
|
||||
{
|
||||
$model->cover_state = PluginModelTask::processing(['alias_id' => $model->id, 'scene' => ModelScene::DRAMA_COVER['value']]);
|
||||
$model->continue_episode_state = PluginModelTask::processing(['alias_id' => $model->id, 'scene' => ModelScene::CREATIVE_EPISODE['value']]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\shortplay\app\model;
|
||||
|
||||
use app\model\Basic;
|
||||
use plugin\control\expose\helper\Uploads;
|
||||
|
||||
class PluginShortplayDramaActor extends Basic
|
||||
{
|
||||
protected function getOptions(): array
|
||||
{
|
||||
return [
|
||||
'type' => [
|
||||
// 设置JSON字段的类型
|
||||
'voice' => 'json',
|
||||
]
|
||||
];
|
||||
}
|
||||
public function actor()
|
||||
{
|
||||
return $this->hasOne(PluginShortplayActor::class, 'id', 'actor_id');
|
||||
}
|
||||
public function getThreeViewImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setThreeViewImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public function getHeadimgAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setHeadimgAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\shortplay\app\model;
|
||||
|
||||
use plugin\control\expose\helper\Uploads;
|
||||
use app\model\Basic;
|
||||
use plugin\control\app\model\PluginChannelsUser;
|
||||
use plugin\model\app\model\PluginModelTask;
|
||||
use plugin\model\utils\enum\ModelScene;
|
||||
|
||||
class PluginShortplayDramaEpisode extends Basic
|
||||
{
|
||||
public function scenes()
|
||||
{
|
||||
return $this->hasMany(PluginShortplayDramaScene::class, 'episode_id', 'id');
|
||||
}
|
||||
public function storyboards()
|
||||
{
|
||||
return $this->hasMany(PluginShortplayDramaStoryboard::class, 'episode_id', 'id')->with(['actors', 'sceneFind', 'props', 'dialogues']);
|
||||
}
|
||||
public function actors()
|
||||
{
|
||||
return $this->hasMany(PluginShortplayDramaEpisodeActor::class, 'episode_id', 'id')->with('actor');
|
||||
}
|
||||
public function getCoverAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setCoverAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public function getVideoPathAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setVideoPathAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public function channels()
|
||||
{
|
||||
return $this->hasOne(PluginChannelsUser::class, 'id', 'channels_uid');
|
||||
}
|
||||
public function drama()
|
||||
{
|
||||
return $this->hasOne(PluginShortplayDrama::class, 'id', 'drama_id');
|
||||
}
|
||||
public static function onAfterRead($model)
|
||||
{
|
||||
$model->init_scene_state = PluginModelTask::processing(['alias_id' => $model->id, 'scene' => ModelScene::CREATIVE_SCENES['value']]);
|
||||
$model->init_storyboard_state = PluginModelTask::processing(['alias_id' => $model->id, 'scene' => ModelScene::CREATIVE_STORYBOARDS['value']]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\shortplay\app\model;
|
||||
|
||||
use app\model\Basic;
|
||||
use plugin\control\expose\helper\Uploads;
|
||||
|
||||
class PluginShortplayDramaEpisodeActor extends Basic
|
||||
{
|
||||
protected function getOptions(): array
|
||||
{
|
||||
return [
|
||||
'type' => [
|
||||
// 设置JSON字段的类型
|
||||
'voice' => 'json',
|
||||
]
|
||||
];
|
||||
}
|
||||
public function actor()
|
||||
{
|
||||
return $this->hasOne(PluginShortplayActor::class, 'id', 'actor_id');
|
||||
}
|
||||
public function getThreeViewImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setThreeViewImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public function getHeadimgAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setHeadimgAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\shortplay\app\model;
|
||||
|
||||
use app\model\Basic;
|
||||
use plugin\control\expose\helper\Uploads;
|
||||
use plugin\model\app\model\PluginModelTask;
|
||||
use plugin\model\utils\enum\ModelScene;
|
||||
|
||||
class PluginShortplayDramaScene extends Basic
|
||||
{
|
||||
public function getImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public static function onAfterRead($model)
|
||||
{
|
||||
$model->image_state = PluginModelTask::processing(['alias_id' => $model->id, 'scene' => ModelScene::SCENE_IMAGE['value']]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\shortplay\app\model;
|
||||
|
||||
use app\model\Basic;
|
||||
use plugin\control\expose\helper\Uploads;
|
||||
use plugin\model\app\model\PluginModelTask;
|
||||
use plugin\model\utils\enum\ModelScene;
|
||||
|
||||
class PluginShortplayDramaStoryboard extends Basic
|
||||
{
|
||||
public function actors()
|
||||
{
|
||||
return $this->hasMany(PluginShortplayDramaStoryboardActor::class, 'storyboard_id', 'id')->with('actor');
|
||||
}
|
||||
public function sceneFind()
|
||||
{
|
||||
return $this->hasOne(PluginShortplayDramaScene::class, 'id', 'scene_id');
|
||||
}
|
||||
public function props()
|
||||
{
|
||||
return $this->hasMany(PluginShortplayDramaStoryboardProp::class, 'storyboard_id', 'id')->with('prop');
|
||||
}
|
||||
public function dialogues()
|
||||
{
|
||||
return $this->hasMany(PluginShortplayDramaStoryboardDialogue::class, 'storyboard_id', 'id')->with('actor');
|
||||
}
|
||||
public function getImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public function getVideoAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setVideoAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public function getNarrationAudioAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setNarrationAudioAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public static function onAfterRead($model)
|
||||
{
|
||||
$model->image_state = PluginModelTask::processing(['alias_id' => $model->id, 'scene' => ModelScene::STORYBOARD_IMAGE['value']]);
|
||||
$model->video_state = PluginModelTask::processing(['alias_id' => $model->id, 'scene' => ModelScene::STORYBOARD_VIDEO['value']]);
|
||||
$model->narration_state = PluginModelTask::processing(['alias_id' => $model->id, 'scene' => ModelScene::STORYBOARD_NARRATION_VOICE['value']]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\shortplay\app\model;
|
||||
|
||||
use app\model\Basic;
|
||||
use plugin\control\expose\helper\Uploads;
|
||||
use plugin\model\app\model\PluginModelTask;
|
||||
use plugin\model\utils\enum\ModelScene;
|
||||
|
||||
class PluginShortplayDramaStoryboardActor extends Basic
|
||||
{
|
||||
protected function getOptions(): array
|
||||
{
|
||||
return [
|
||||
'type' => [
|
||||
// 设置JSON字段的类型
|
||||
'voice' => 'json',
|
||||
]
|
||||
];
|
||||
}
|
||||
public function actor()
|
||||
{
|
||||
return $this->hasOne(PluginShortplayActor::class, 'id', 'actor_id');
|
||||
}
|
||||
public function getThreeViewImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setThreeViewImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public function getHeadimgAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setHeadimgAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public static function onAfterRead($model)
|
||||
{
|
||||
|
||||
$model->character_look_state = 0;
|
||||
if ($model->character_look_id) {
|
||||
$params['drama_id'] = $model->drama_id;
|
||||
$params['episode_id'] = $model->episode_id;
|
||||
$params['storyboard_id'] = $model->storyboard_id;
|
||||
$params['actor_id'] = $model->actor_id;
|
||||
$model->character_look_state = PluginShortplayActorCharacterLook::processing($params);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\shortplay\app\model;
|
||||
|
||||
use app\model\Basic;
|
||||
use plugin\control\expose\helper\Uploads;
|
||||
use plugin\model\app\model\PluginModelTask;
|
||||
use plugin\model\utils\enum\ModelScene;
|
||||
|
||||
class PluginShortplayDramaStoryboardDialogue extends Basic
|
||||
{
|
||||
protected function getOptions(): array
|
||||
{
|
||||
return [
|
||||
'type' => [
|
||||
// 设置JSON字段的类型
|
||||
'prosody_speed' => 'float',
|
||||
'prosody_volume' => 'float',
|
||||
'voice' => 'json',
|
||||
]
|
||||
];
|
||||
}
|
||||
public function getAudioAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setAudioAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public function actor()
|
||||
{
|
||||
return $this->hasOne(PluginShortplayActor::class, 'id', 'actor_id');
|
||||
}
|
||||
public function storyboard()
|
||||
{
|
||||
return $this->hasOne(PluginShortplayDramaStoryboard::class, 'id', 'storyboard_id');
|
||||
}
|
||||
public static function onAfterRead($model)
|
||||
{
|
||||
$model->voice_state = PluginModelTask::processing(['alias_id' => $model->id, 'scene' => ModelScene::DIALOGUE_VOICE['value']]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\shortplay\app\model;
|
||||
|
||||
use app\model\Basic;
|
||||
|
||||
class PluginShortplayDramaStoryboardProp extends Basic
|
||||
{
|
||||
public function prop()
|
||||
{
|
||||
return $this->hasOne(PluginShortplayProp::class, 'id', 'prop_id');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\shortplay\app\model;
|
||||
|
||||
use plugin\control\expose\helper\Uploads;
|
||||
use app\model\Basic;
|
||||
use plugin\model\app\model\PluginModelTask;
|
||||
use plugin\model\utils\enum\ModelScene;
|
||||
use plugin\shortplay\utils\enum\PropStatus;
|
||||
|
||||
class PluginShortplayProp extends Basic
|
||||
{
|
||||
public function getThreeViewImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setThreeViewImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public function getImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public static function onAfterRead($model)
|
||||
{
|
||||
$model->status_enum =PropStatus::get($model->status);
|
||||
if ($model->status != PropStatus::GENERATED['value']) {
|
||||
$imageState = PluginModelTask::processing(['alias_id' => $model->id, 'scene' => ModelScene::PROP_IMAGE['value']]);
|
||||
$threeViewImageState = PluginModelTask::processing(['alias_id' => $model->id, 'scene' => ModelScene::PROP_THREE_VIEW_IMAGE['value']]);
|
||||
if ($imageState > 0 || $threeViewImageState > 0) {
|
||||
$model->status_enum = PropStatus::PENDING;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\shortplay\app\model;
|
||||
|
||||
use app\model\Basic;
|
||||
use plugin\control\app\model\PluginChannelsUser;
|
||||
use plugin\user\app\model\PluginUser;
|
||||
|
||||
class PluginShortplayShare extends Basic
|
||||
{
|
||||
public function channels()
|
||||
{
|
||||
return $this->hasOne(PluginChannelsUser::class, 'id', 'channels_uid');
|
||||
}
|
||||
public function user()
|
||||
{
|
||||
return $this->hasOne(PluginUser::class, 'id', 'uid');
|
||||
}
|
||||
public function drama()
|
||||
{
|
||||
return $this->hasOne(PluginShortplayDrama::class, 'id', 'drama_id');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\shortplay\app\model;
|
||||
|
||||
use app\model\Basic;
|
||||
use plugin\control\app\model\PluginChannelsUser;
|
||||
|
||||
class PluginShortplayShareEpisode extends Basic
|
||||
{
|
||||
public function channels()
|
||||
{
|
||||
return $this->hasOne(PluginChannelsUser::class, 'id', 'channels_uid');
|
||||
}
|
||||
public function drama()
|
||||
{
|
||||
return $this->hasOne(PluginShortplayDrama::class, 'id', 'drama_id');
|
||||
}
|
||||
public function episode()
|
||||
{
|
||||
return $this->hasOne(PluginShortplayDramaEpisode::class, 'id', 'episode_id');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\shortplay\app\model;
|
||||
|
||||
use app\model\Basic;
|
||||
|
||||
class PluginShortplayShareLikes extends Basic
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\shortplay\app\model;
|
||||
|
||||
use plugin\control\expose\helper\Uploads;
|
||||
use app\model\Basic;
|
||||
use plugin\control\app\model\PluginChannelsUser;
|
||||
|
||||
class PluginShortplayStyle extends Basic
|
||||
{
|
||||
public function getImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setImageAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public function channels()
|
||||
{
|
||||
return $this->hasOne(PluginChannelsUser::class, 'id', 'channels_uid');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\shortplay\app\model;
|
||||
|
||||
use plugin\control\expose\helper\Uploads;
|
||||
use app\model\Basic;
|
||||
use plugin\control\app\model\PluginChannelsUser;
|
||||
|
||||
class PluginShortplayVoice extends Basic
|
||||
{
|
||||
public function getHeadimgAttr($value, $data)
|
||||
{
|
||||
return Uploads::url($data['channels_uid'], $value);
|
||||
}
|
||||
public function setHeadimgAttr($value, $data)
|
||||
{
|
||||
return Uploads::path($data['channels_uid'], $value);
|
||||
}
|
||||
public function channels()
|
||||
{
|
||||
return $this->hasOne(PluginChannelsUser::class, 'id', 'channels_uid');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user