PageRenderTime 47ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/wp-content/plugins/shashin/Public/ShashinDataObjectDisplayer.php

https://bitbucket.org/zachisit/zachis.it-m
PHP | 330 lines | 269 code | 56 blank | 5 comment | 19 complexity | 3693178f6e0e905efd04f65394397dd9 MD5 | raw file
  1. <?php
  2. abstract class Public_ShashinDataObjectDisplayer {
  3. protected $settings;
  4. protected $shortcode;
  5. protected $functionsFacade;
  6. protected $dataObject;
  7. protected $thumbnail;
  8. protected $sessionManager;
  9. protected $albumIdForAjaxHighslideDisplay;
  10. protected $actualThumbnailSize;
  11. protected $displayThumbnailSize;
  12. protected $actualExpandedSize;
  13. protected $displayCropped = false;
  14. protected $imgHeight;
  15. protected $imgWidth;
  16. protected $imgSrc;
  17. protected $imgAlt;
  18. protected $imgTitle;
  19. protected $imgClass;
  20. protected $imgStyle;
  21. protected $imgTag;
  22. protected $linkHref;
  23. protected $linkOnClick;
  24. protected $linkRel;
  25. protected $linkTitle;
  26. protected $linkIdForImg;
  27. protected $linkIdForCaption;
  28. protected $linkClass;
  29. protected $linkTagForImg;
  30. protected $linkTagForCaption;
  31. protected $caption;
  32. protected $combinedTags;
  33. protected $validThumbnailSizes = array();
  34. protected $validCropSizes = array();
  35. protected $validExpandedSizes = array();
  36. protected $expandedSizesMap = array();
  37. protected $thumbnailSizesMap = array(
  38. 'xsmall' => 72,
  39. 'small' => 150,
  40. 'medium' => 300,
  41. 'large' => 600,
  42. 'xlarge' => 800,
  43. );
  44. public function __construct() {
  45. }
  46. public function setSettings(Lib_ShashinSettings $settings) {
  47. $this->settings = $settings;
  48. return $this->settings;
  49. }
  50. public function setShortcode(Public_ShashinShortcode $shortcode) {
  51. $this->shortcode = $shortcode;
  52. }
  53. public function setFunctionsFacade(ToppaFunctionsFacade $functionsFacade) {
  54. $this->functionsFacade = $functionsFacade;
  55. }
  56. public function setDataObject(Lib_ShashinDataObject $dataObject) {
  57. $this->dataObject = $dataObject;
  58. }
  59. public function setThumbnail(Lib_ShashinDataObject $thumbnail = null) {
  60. $this->thumbnail = $thumbnail ? $thumbnail : $this->dataObject;
  61. }
  62. public function setSessionManager(Public_ShashinSessionManager $sessionManager) {
  63. $this->sessionManager = $sessionManager;
  64. return $this->sessionManager;
  65. }
  66. public function setAlbumIdForAjaxHighslideDisplay($albumIdForAjaxHighslideDisplay = null) {
  67. $this->albumIdForAjaxHighslideDisplay = $albumIdForAjaxHighslideDisplay;
  68. return $this->albumIdForAjaxHighslideDisplay;
  69. }
  70. public function run($albumIdForAjaxHighslideDisplay = null) {
  71. $this->initializeSessionIdCounter();
  72. $requestedSize = $this->shortcode->size ? $this->shortcode->size : 'xsmall';
  73. $this->setDisplayThumbnailSize($requestedSize);
  74. $this->setActualThumbnailSize();
  75. $this->setActualExpandedSize();
  76. $this->setDisplayCropped();
  77. $this->setImgWidthAndHeight();
  78. $this->setImgSrc();
  79. $this->setImgAlt();
  80. $this->setImgTitle();
  81. $this->setImgClass();
  82. $this->setImgStyle();
  83. $this->setImgTag();
  84. if ($this->dataObject->isVideo()) {
  85. $this->setLinkHrefVideo();
  86. $this->setLinkOnClickVideo($albumIdForAjaxHighslideDisplay);
  87. $this->setLinkRelVideo();
  88. }
  89. else {
  90. $this->setLinkHref();
  91. $this->setLinkOnClick($albumIdForAjaxHighslideDisplay);
  92. $this->setLinkRel();
  93. }
  94. $this->setLinkTitle();
  95. $this->setLinkIdForImg();
  96. $this->setLinkIdForCaption();
  97. $this->setLinkClass();
  98. $this->setLinkTagForImg();
  99. $this->setLinkTagForCaption();
  100. $this->setCaption();
  101. $this->setCombinedTags();
  102. $this->incrementSessionIdCounter();
  103. return $this->combinedTags;
  104. }
  105. public function initializeSessionIdCounter() {
  106. if (!$this->sessionManager->getThumbnailCounter()) {
  107. $this->sessionManager->setThumbnailCounter(1);
  108. }
  109. }
  110. public function setDisplayThumbnailSize($requestedSize = 'xsmall') {
  111. if (array_key_exists($requestedSize, $this->thumbnailSizesMap)) {
  112. $this->displayThumbnailSize = $this->thumbnailSizesMap[$requestedSize];
  113. }
  114. elseif ($requestedSize == 'max') {
  115. $this->displayThumbnailSize = floor($this->settings->themeMaxSize / $this->shortcode->columns);
  116. $this->displayThumbnailSize -= 10; // guess for padding/margins per image
  117. }
  118. else {
  119. $this->displayThumbnailSize = $requestedSize;
  120. }
  121. if (!is_numeric($this->displayThumbnailSize)) {
  122. throw New Exception(__('invalid size requested', 'shashin'));
  123. }
  124. return $this->displayThumbnailSize;
  125. }
  126. public function getDisplayThumbnailSize() {
  127. return $this->displayThumbnailSize;
  128. }
  129. public function setActualThumbnailSize() {
  130. for ($i = 0; $i < count($this->validThumbnailSizes); $i++) {
  131. if ($this->validThumbnailSizes[$i] >= $this->displayThumbnailSize) {
  132. $this->actualThumbnailSize = $this->validThumbnailSizes[$i];
  133. break;
  134. }
  135. }
  136. if (!$this->actualThumbnailSize) {
  137. $this->actualThumbnailSize = $this->validThumbnailSizes[0];
  138. }
  139. return $this->actualThumbnailSize;
  140. }
  141. abstract public function setActualExpandedSize();
  142. public function setDisplayCropped() {
  143. if ($this->shortcode->crop == 'y' && in_array($this->actualThumbnailSize, $this->validCropSizes)) {
  144. $this->displayCropped = true;
  145. }
  146. return $this->displayCropped;
  147. }
  148. public function setImgWidthAndHeight() {
  149. if ($this->displayCropped) {
  150. $this->imgWidth = $this->displayThumbnailSize;
  151. $this->imgHeight = $this->displayThumbnailSize;
  152. }
  153. elseif (!$this->thumbnail->width || !$this->thumbnail->height) {
  154. $this->imgWidth = null;
  155. $this->imgHeight = null;
  156. }
  157. elseif ($this->thumbnail->width > $this->thumbnail->height) {
  158. $this->imgWidth = $this->displayThumbnailSize;
  159. $percentage = $this->displayThumbnailSize / $this->thumbnail->width;
  160. $this->imgHeight = $percentage * $this->thumbnail->height;
  161. settype($this->imgHeight, 'int');
  162. }
  163. else {
  164. $this->imgHeight = $this->displayThumbnailSize;
  165. $percentage = $this->displayThumbnailSize / $this->thumbnail->height;
  166. $this->imgWidth = $percentage * $this->thumbnail->width;
  167. settype($this->imgWidth, 'int');
  168. }
  169. return array($this->imgWidth, $this->imgHeight);
  170. }
  171. abstract public function setImgSrc();
  172. abstract public function setImgAlt();
  173. abstract public function setImgTitle();
  174. public function makeTextQuotable($text) {
  175. // there may already be entities in the text, so we want to be very
  176. // conservative with what we replace
  177. return str_replace('"', '&quot;', $text);
  178. }
  179. public function setImgClass() {
  180. $this->imgClass = 'shashinThumbnailImage';
  181. return $this->imgClass;
  182. }
  183. // I'm not sure why, but when using max-width, we need to knock
  184. // a couple pixels off the padding to get it right (there's an extra 2px
  185. // coming from somewhere)
  186. public function setImgStyle() {
  187. if (!$this->imgWidth) {
  188. $this->imgStyle = 'max-width: '
  189. . $this->displayThumbnailSize . 'px; padding: '
  190. . floor(($this->settings->thumbPadding / 2) - 2)
  191. . 'px;';
  192. }
  193. return $this->imgStyle;
  194. }
  195. public function setImgTag() {
  196. $this->imgTag =
  197. '<img src="' . $this->imgSrc . '"'
  198. . ' alt="' . $this->imgAlt . '"'
  199. . ($this->imgTitle ? (' title="' . $this->imgTitle . '"') : '')
  200. . ($this->imgWidth ? (' width="' . $this->imgWidth . '"') : '')
  201. . ($this->imgHeight ? (' height="' . $this->imgHeight . '"') : '')
  202. . ($this->imgStyle ? (' style="' . $this->imgStyle . '"') : '')
  203. . ' class="' . $this->imgClass . '"'
  204. . ' id="shashinThumbnailImage_' . $this->sessionManager->getThumbnailCounter() . '" />';
  205. return $this->imgTag;
  206. }
  207. abstract public function setLinkHref();
  208. abstract public function setLinkHrefVideo();
  209. public function setLinkOnClick() {
  210. $this->linkOnClick = null;
  211. return $this->linkOnClick;
  212. }
  213. public function setLinkOnClickVideo() {
  214. $this->linkOnClick = null;
  215. return $this->linkOnClick;
  216. }
  217. public function setLinkRel() {
  218. $this->linkRel = null;
  219. return $this->linkRel;
  220. }
  221. public function setLinkRelVideo() {
  222. $this->linkRel = null;
  223. return $this->linkRel;
  224. }
  225. public function setLinkTitle() {
  226. $this->linkTitle = null;
  227. return $this->linkTitle;
  228. }
  229. public function setLinkClass() {
  230. $this->linkClass = null;
  231. return $this->linkClass;
  232. }
  233. abstract public function setLinkIdForImg();
  234. abstract public function setLinkIdForCaption();
  235. public function setLinkTagForImg() {
  236. $this->linkTagForImg = $this->setLinkTag($this->linkIdForImg);
  237. return $this->linkTagForImg;
  238. }
  239. public function setLinkTagForCaption() {
  240. $this->linkTagForCaption = $this->setLinkTag($this->linkIdForCaption);
  241. return $this->linkIdForCaption;
  242. }
  243. abstract public function setCaption();
  244. private function setLinkTag($linkId) {
  245. $linkTag =
  246. '<a href="' . $this->linkHref . '"'
  247. . ' id="' . $linkId . '"'
  248. . ($this->linkOnClick ? (' onclick="' . $this->linkOnClick . '"') : '')
  249. . ($this->linkClass ? (' class="' . $this->linkClass . '"') : '')
  250. . ($this->linkRel ? (' rel="' . $this->linkRel . '"') : '')
  251. . ($this->linkTitle ? (' title="' . $this->linkTitle . '"') : '')
  252. . '>';
  253. return $linkTag;
  254. }
  255. public function setCombinedTags() {
  256. $this->combinedTags = $this->linkTagForImg . $this->imgTag;
  257. if ($this->linkTagForImg) {
  258. $this->combinedTags .= '</a>';
  259. }
  260. if ($this->caption) {
  261. $this->combinedTags .= $this->caption . PHP_EOL;
  262. }
  263. return $this->combinedTags;
  264. }
  265. public function incrementSessionIdCounter() {
  266. $thumbnailCounter = $this->sessionManager->getThumbnailCounter();
  267. $this->sessionManager->setThumbnailCounter(++$thumbnailCounter);
  268. }
  269. public function getImgWidth() {
  270. return $this->imgWidth;
  271. }
  272. abstract public function formatExifDataForHighslideCaption();
  273. abstract public function formatDateForHighslideCaption($date = null);
  274. }