PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, 3D PDF FlipBook, Google Reviews, YouTube Videos, Upload & Embed PDF documents / 2.0.3
EmbedPress – PDF Embedder, 3D PDF FlipBook, Google Reviews, YouTube Videos, Upload & Embed PDF documents v2.0.3
4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 trunk 1.0.0 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.5.0 1.6.0 1.6.1 1.6.2 1.6.3 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 2.0.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.2.0 2.2.1 2.2.2 2.3.0 2.3.1 2.3.2 2.3.3 2.4.0 2.4.1 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.1.3 3.2.0 3.2.1 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.6.8 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 3.9.1 3.9.10 3.9.11 3.9.12 3.9.13 3.9.14 3.9.15 3.9.16 3.9.17 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.8 3.9.9 4.0.0 4.0.1 4.0.10 4.0.11 4.0.12 4.0.13 4.0.14 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.0.9 4.1.0 4.1.1 4.1.10 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9 4.2.0 4.2.1 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.8 4.2.9 4.3.0 4.3.1 4.4.0 4.4.1 4.4.10 4.4.11 4.4.2 4.4.3 4.4.4 4.4.5 4.4.6 4.4.7 4.4.8 4.4.9 4.5.0 4.5.1
embedpress / vendor / ostraining / embera / Lib / Embera / Formatter.php
embedpress / vendor / ostraining / embera / Lib / Embera Last commit date
Adapters 8 years ago Providers 8 years ago Autoload.php 8 years ago Embera.php 8 years ago FakeResponse.php 8 years ago Formatter.php 8 years ago HtmlProcessor.php 8 years ago HttpRequest.php 8 years ago Oembed.php 8 years ago Providers.php 8 years ago Url.php 8 years ago
Formatter.php
169 lines
1 <?php
2 /**
3 * Formatter.php
4 *
5 * @package Embera
6 * @author Michael Pratt <pratt@hablarmierda.net>
7 * @link http://www.michael-pratt.com/
8 *
9 * For the full copyright and license information, please view the LICENSE
10 * file that was distributed with this source code.
11 *
12 */
13 namespace Embera;
14
15 /**
16 * A formatter that acts as a Decorator for the main library.
17 * It outputs the oembed data as a custom string.
18 */
19 class Formatter
20 {
21 /** @var object Instance of \Embera\Embera */
22 protected $embera;
23
24 /** @var bool Wether or not to allow offline responses */
25 protected $allowOffline;
26
27 /** @var array Fetched errors */
28 protected $errors = array();
29
30 /** @var string The template with placeholders to be replaced with the data from an ombed response */
31 protected $template;
32
33 /**
34 * Constructor
35 *
36 * @param object $embera Instance of \Embera\Embera
37 * @param bool $allowOffline Wether or not to allow offline embera
38 */
39 public function __construct(\Embera\Embera $embera, $allowOffline = false)
40 {
41 $this->embera = $embera;
42 $this->allowOffline = $allowOffline;
43 }
44
45 /**
46 * Sets a template with placeholders, that should be
47 * replaced by the data from an oembed response.
48 *
49 *
50 * @param string $template
51 * @param string|array $body An array or string with Urls
52 * @return string
53 */
54 public function setTemplate($template, $body = null)
55 {
56 $this->template = $template;
57
58 if (!is_null($body)) {
59 return $this->transform($body);
60 }
61
62 return '';
63 }
64
65 /**
66 * This method transforms an array or a string with urls
67 * into another string using a specified template.
68 *
69 * @param string|array $body An array or string with Urls
70 * @return string
71 */
72 public function transform($body = null)
73 {
74 $providers = array();
75 if ($urls = $this->embera->getUrlInfo($body)) {
76
77 foreach ($urls as $url => $data) {
78 if (!$this->allowOffline && (int) $data['embera_using_fake'] === 1) {
79 $this->errors[] = 'Using fake oembed response on ' . $url;
80 continue;
81 }
82
83 $providers[$url] = $this->replace($data, $this->template);
84 }
85 }
86
87 if (is_array($body)) {
88 $return = implode('', $providers);
89 } else {
90 $return = str_replace(array_keys($providers), array_values($providers), $body);
91 }
92
93 // Remove unchanged placeholders
94 return preg_replace('~{([\w\d\-_]+)}~i', '', $return);
95 }
96
97 /**
98 * Replaces the given $data inside the $template
99 *
100 * @param array $data
101 * @param string $template
102 * @param string $prefix
103 * @return string
104 */
105 protected function replace(array $data, $template, $prefix = null)
106 {
107 foreach ($data as $k => $d) {
108 if (is_array($d)) {
109 return $this->replace($d, $template, $k . '.');
110 } else {
111 $template = str_replace('{' . (!empty($prefix) ? $prefix . $k : $k) . '}', $d, $template);
112 }
113 }
114
115 return $template;
116 }
117
118 /**
119 * Gets the last error found
120 *
121 * @return string
122 */
123 public function getLastError()
124 {
125 $errors = $this->getErrors();
126 return end($errors);
127 }
128
129 /**
130 * Returns an array with all the errors
131 *
132 * @return array
133 */
134 public function getErrors()
135 {
136 return array_merge($this->embera->getErrors(), $this->errors);
137 }
138
139 /**
140 * Checks if there were errors
141 *
142 * @return bool
143 */
144 public function hasErrors()
145 {
146 return ($this->embera->hasErrors() || !empty($this->errors));
147 }
148
149 /**
150 * Truly decorate the embera object. With this
151 * method Im preserving compatability with the
152 * API of the decorated object.
153 *
154 * @param string $method
155 * @param array $args
156 * @return mixed
157 *
158 * @throws InvalidArgumentException when a method was not found
159 */
160 public function __call($method, $args)
161 {
162 if (is_callable(array($this->embera, $method))) {
163 return call_user_func_array(array($this->embera, $method), $args);
164 }
165
166 throw new \InvalidArgumentException('No method ' . $method . ' was found');
167 }
168 }
169