9c161ac05708c4b59688c363f2b4e1dd12162847
[GitHub/WoltLab/WCF.git] /
1 <?php
2 declare(strict_types=1);
3 namespace wcf\system\message\embedded\object;
4 use wcf\data\media\Media;
5 use wcf\data\media\MediaList;
6 use wcf\system\cache\runtime\ViewableMediaRuntimeCache;
7 use wcf\system\database\util\PreparedStatementConditionBuilder;
8 use wcf\system\html\input\HtmlInputProcessor;
9 use wcf\system\WCF;
10 use wcf\util\ArrayUtil;
11
12 /**
13 * IMessageEmbeddedObjectHandler implementation for shared media.
14 *
15 * @author Alexander Ebert
16 * @copyright 2001-2018 WoltLab GmbH
17 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
18 * @package WoltLabSuite\Core\System\Message\Embedded\Object
19 */
20 class MediaMessageEmbeddedObjectHandler extends AbstractSimpleMessageEmbeddedObjectHandler {
21 /**
22 * @inheritDoc
23 */
24 public function parse(HtmlInputProcessor $htmlInputProcessor, array $embeddedData) {
25 $mediaIDs = [];
26 foreach (['wsm', 'wsmg'] as $name) {
27 if (empty($embeddedData[$name])) {
28 continue;
29 }
30
31 for ($i = 0, $length = count($embeddedData[$name]); $i < $length; $i++) {
32 $parsedIDs = ArrayUtil::toIntegerArray(explode(',', $embeddedData[$name][$i][0]));
33
34 $mediaIDs = array_merge($mediaIDs, $parsedIDs);
35 }
36 }
37
38 return $mediaIDs;
39 }
40
41 /**
42 * @inheritDoc
43 */
44 public function loadObjects(array $objectIDs) {
45 $viewableMedia = ViewableMediaRuntimeCache::getInstance()->getObjects($objectIDs);
46 $contentLanguageID = MessageEmbeddedObjectManager::getInstance()->getContentLanguageID();
47 if ($contentLanguageID !== null) {
48 $mediaIDs = [];
49 foreach ($viewableMedia as $media) {
50 if ($media->localizedLanguageID != $contentLanguageID) {
51 $mediaIDs[] = $media->getDecoratedObject()->mediaID;
52 }
53 }
54
55 if (!empty($mediaIDs)) {
56 $conditions = new PreparedStatementConditionBuilder();
57 $conditions->add("mediaID IN (?)", [$mediaIDs]);
58 $conditions->add("languageID = ?", [$contentLanguageID]);
59
60 $sql = "SELECT *
61 FROM wcf".WCF_N."_media_content
62 ".$conditions;
63 $statement = WCF::getDB()->prepareStatement($sql);
64 $statement->execute($conditions->getParameters());
65 while ($row = $statement->fetchArray()) {
66 $viewableMedia[$row['mediaID']]->setLocalizedContent($row['languageID'], $row);
67 }
68 }
69 }
70
71 return $viewableMedia;
72 }
73
74 /**
75 * @inheritDoc
76 */
77 public function validateValues($objectType, $objectID, array $values) {
78 $mediaList = new MediaList();
79 $mediaList->getConditionBuilder()->add("media.mediaID IN (?)", [$values]);
80 $mediaList->readObjectIDs();
81
82 return $mediaList->getObjectIDs();
83 }
84
85 /**
86 * @inheritDoc
87 */
88 public function replaceSimple($objectType, $objectID, $value, array $attributes) {
89 /** @var Media $media */
90 $media = MessageEmbeddedObjectManager::getInstance()->getObject('com.woltlab.wcf.media', $value);
91 if ($media === null) {
92 return null;
93 }
94
95 $return = (!empty($attributes['return'])) ? $attributes['return'] : 'link';
96 switch ($return) {
97 case 'title':
98 return $media->getTitle();
99 break;
100
101 case 'link':
102 default:
103 $size = (!empty($attributes['size'])) ? $attributes['size'] : 'original';
104 switch ($size) {
105 case 'small':
106 case 'medium':
107 case 'large':
108 return $media->getThumbnailLink($size);
109 break;
110
111 case 'original':
112 default:
113 return $media->getLink();
114 break;
115 }
116
117 break;
118 }
119 }
120
121 }