PluginProbe ʕ •ᴥ•ʔ
Presto Player / 2.2.3-beta1
Presto Player v2.2.3-beta1
4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / inc / Models / Video.php
presto-player / inc / Models Last commit date
AudioPreset.php 2 years ago Block.php 2 years ago CurrentUser.php 5 years ago EmailCollection.php 5 years ago LicensedProduct.php 5 years ago Model.php 4 years ago ModelInterface.php 5 years ago Player.php 5 years ago Post.php 2 years ago Preset.php 2 years ago ReusableVideo.php 3 years ago Setting.php 5 years ago Video.php 2 years ago Webhook.php 3 years ago
Video.php
174 lines
1 <?php
2
3 namespace PrestoPlayer\Models;
4
5 use PrestoPlayer\Services\Blocks\VimeoBlockService;
6 use PrestoPlayer\Services\Blocks\YoutubeBlockService;
7
8 class Video extends Model
9 {
10 /**
11 * Table used to access db
12 *
13 * @var string
14 */
15 protected $table = 'presto_player_videos';
16
17 /**
18 * Model Schema
19 *
20 * @var array
21 */
22 public function schema()
23 {
24 return [
25 'id' => [
26 'type' => 'integer',
27 ],
28 'title' => [
29 'type' => 'string',
30 'sanitize_callback' => 'wp_kses_post'
31 ],
32 'type' => [
33 'type' => 'string',
34 'sanitize_callback' => 'sanitize_text_field'
35 ],
36 'src' => [
37 'type' => 'string',
38 'sanitize_callback' => 'esc_url_raw'
39 ],
40 'external_id' => [
41 'type' => 'string',
42 'sanitize_callback' => 'sanitize_text_field'
43 ],
44 'attachment_id' => [
45 'type' => 'integer',
46 ],
47 'post_id' => [
48 'type' => 'integer'
49 ],
50 'created_by' => [
51 'type' => 'integer',
52 'default' => get_current_user_id()
53 ],
54 'created_at' => [
55 'type' => 'string'
56 ],
57 'updated_at' => [
58 'type' => 'string',
59 ],
60 'deleted_at' => [
61 'type' => 'string'
62 ]
63 ];
64 }
65
66 /**
67 * These attributes are queryable
68 *
69 * @var array
70 */
71 protected $queryable = [
72 'src',
73 'video_id',
74 'title',
75 'type',
76 'attachment_id',
77 'external_id'
78 ];
79
80 public function set($args)
81 {
82 parent::set($args);
83
84 if (!empty($this->attributes->attachment_id)) {
85 $title = get_the_title($this->attributes->attachment_id);
86 $src = wp_get_attachment_url($this->attributes->attachment_id);
87 $this->attributes->title = $title ? $title : $this->attributes->title;
88 $this->attributes->src = $src ? $src : $this->attributes->src;
89 }
90
91 return $this;
92 }
93
94 public function maybeAutoCreateTitle($args)
95 {
96 // remotely get the title if not provided
97 if (empty($args['title'])) {
98 // youtube
99 if ($args['type'] === 'youtube') {
100 $youtube = new YoutubeBlockService();
101 if (isset($args['external_id'])) {
102 $api_response = $youtube->getRemoteVideoData($args['external_id']);
103 if (!empty($api_response['title'])) {
104 $args['title'] = $api_response['title'];
105 }
106 }
107 }
108 // vimeo
109 if ($args['type'] === 'vimeo') {
110 $vimeo = new VimeoBlockService();
111 if (isset($args['external_id'])) {
112 $api_response = $vimeo->getRemoteVideoData($args['external_id']);
113 if (!empty($api_response['title'])) {
114 $args['title'] = $api_response['title'];
115 }
116 }
117 }
118 }
119
120 // fallback to url
121 $args['title'] = empty($args['title']) ? $args['src'] : $args['title'];
122
123 return $args;
124 }
125
126 /**
127 * Create a new video
128 *
129 * @param array $args
130 * @return integer
131 */
132 public function create($args = [])
133 {
134 // required params
135 if (empty($args['external_id']) && empty($args['attachment_id']) && empty($args['src'])) {
136 return new \WP_Error('invalid_parameters', 'You must enter an attachment_id, external_id or src.');
137 }
138
139 $args = $this->maybeAutoCreateTitle($args);
140
141 // create
142 return parent::create($args);
143 }
144
145 /**
146 * Maybe auto-create title if not set
147 *
148 * @param array $args
149 * @return void
150 */
151 public function update($args = [])
152 {
153 if (!empty($args['attachment_id']) && !empty($args['title'])) {
154 wp_update_post(
155 [
156 'ID' => $args['attachment_id'],
157 'post_title' => $args['title']
158 ]
159 );
160 }
161 return parent::update($args);
162 }
163
164 /**
165 * Get the video's created at date.
166 *
167 * @return int Attachment ID
168 */
169 public function getCreatedAt()
170 {
171 return $this->created_at;
172 }
173 }
174