2amigos /
yii2-gallery-widget
This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | /** |
||
| 3 | * @link https://github.com/2amigos/yii2-gallery-widget |
||
| 4 | * @copyright Copyright (c) 2013-2016 2amigOS! Consulting Group LLC |
||
| 5 | * @license http://opensource.org/licenses/BSD-3-Clause |
||
| 6 | */ |
||
| 7 | |||
| 8 | namespace dosamigos\gallery; |
||
| 9 | |||
| 10 | use yii\base\Widget; |
||
| 11 | use yii\helpers\ArrayHelper; |
||
| 12 | use yii\helpers\Html; |
||
| 13 | use yii\helpers\Json; |
||
| 14 | use yii\web\JsExpression; |
||
| 15 | |||
| 16 | /** |
||
| 17 | * Gallery renders a BlueImp Gallery items |
||
| 18 | * |
||
| 19 | * @author Alexander Kochetov <[email protected]> |
||
| 20 | */ |
||
| 21 | class Gallery extends Widget |
||
| 22 | { |
||
| 23 | /** |
||
| 24 | * @var array the HTML attributes for the links container tag. |
||
| 25 | * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. |
||
| 26 | */ |
||
| 27 | public $options = []; |
||
| 28 | /** |
||
| 29 | * @var array the HTML attributes for the lightbox container tag. |
||
| 30 | * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. |
||
| 31 | */ |
||
| 32 | public $templateOptions = []; |
||
| 33 | /** |
||
| 34 | * @var array the options for the BlueImp Gallery plugin. |
||
| 35 | * Please refer to the BlueImp Gallery plugin Web page for possible options. |
||
| 36 | * @see https://github.com/blueimp/Gallery/blob/master/README.md#setup |
||
| 37 | */ |
||
| 38 | public $clientOptions = []; |
||
| 39 | /** |
||
| 40 | * @var array the event handlers for the underlying Bootstrap Switch 3 input JS plugin. |
||
| 41 | * Please refer to the [BlueImp Gallery plugin](https://github.com/blueimp/Gallery/blob/master/README.md#event-callbacks) |
||
| 42 | * for information about their callbacks. |
||
| 43 | */ |
||
| 44 | public $clientEvents = []; |
||
| 45 | /** |
||
| 46 | * @var array The array of items that compound the gallery. The syntax is as follows: |
||
| 47 | * |
||
| 48 | * - src: string, the image to display |
||
| 49 | * - url: string, the image to display on the lightbox. If none found, will display `src` |
||
| 50 | * - options: HTML attributes of the link |
||
| 51 | * - imageOptions: HTML attributes of the image to be displayed |
||
| 52 | */ |
||
| 53 | public $items = array(); |
||
| 54 | /** |
||
| 55 | * @var bool whether to display the controls on initialization |
||
| 56 | */ |
||
| 57 | public $showControls = true; |
||
| 58 | |||
| 59 | /** |
||
| 60 | * @inheritdoc |
||
| 61 | */ |
||
| 62 | 6 | public function init() |
|
| 63 | { |
||
| 64 | 6 | parent::init(); |
|
| 65 | 6 | if (!isset($this->options['id'])) { |
|
| 66 | 6 | $this->options['id'] = $this->getId(); |
|
| 67 | 6 | } |
|
| 68 | 6 | $this->templateOptions['id'] = ArrayHelper::getValue($this->templateOptions, 'id', 'blueimp-gallery'); |
|
| 69 | 6 | Html::addCssClass($this->templateOptions, 'blueimp-gallery'); |
|
| 70 | 6 | if ($this->showControls) { |
|
| 71 | 6 | Html::addCssClass($this->templateOptions, 'blueimp-gallery-controls'); |
|
| 72 | 6 | } |
|
| 73 | |||
| 74 | 6 | foreach($this->clientEvents as $key => $event) { |
|
| 75 | 6 | if(!($event instanceof JsExpression)) { |
|
| 76 | 6 | $this->clientOptions[$key] = new JsExpression($event); |
|
| 77 | 6 | } |
|
| 78 | 6 | } |
|
| 79 | 6 | } |
|
| 80 | |||
| 81 | /** |
||
| 82 | * @inheritdoc |
||
| 83 | */ |
||
| 84 | 6 | public function run() |
|
| 85 | { |
||
| 86 | 6 | if (empty($this->items)) { |
|
| 87 | 6 | return null; |
|
| 88 | } |
||
| 89 | 6 | echo $this->renderItems(); |
|
| 90 | 6 | echo $this->renderTemplate(); |
|
| 91 | 6 | $this->registerClientScript(); |
|
| 92 | 6 | } |
|
| 93 | |||
| 94 | /** |
||
| 95 | * @return string the items that are need to be rendered. |
||
| 96 | */ |
||
| 97 | 6 | public function renderItems() |
|
| 98 | { |
||
| 99 | 6 | $items = []; |
|
| 100 | 6 | foreach ($this->items as $item) { |
|
| 101 | 6 | $items[] = $this->renderItem($item); |
|
| 102 | 6 | } |
|
| 103 | 6 | return Html::tag('div', implode("\n", array_filter($items)), $this->options); |
|
| 104 | } |
||
| 105 | |||
| 106 | /** |
||
| 107 | * @param mixed $item |
||
| 108 | * @return null|string the item to render |
||
| 109 | */ |
||
| 110 | 6 | public function renderItem($item) |
|
| 111 | { |
||
| 112 | 6 | if (is_string($item)) { |
|
| 113 | 3 | return Html::a(Html::img($item), $item, ['class' => 'gallery-item']); |
|
| 114 | } |
||
| 115 | 6 | $src = ArrayHelper::getValue($item, 'src'); |
|
| 116 | 6 | if ($src === null) { |
|
| 117 | 3 | return null; |
|
| 118 | } |
||
| 119 | 6 | $url = ArrayHelper::getValue($item, 'url', $src); |
|
| 120 | 6 | $options = ArrayHelper::getValue($item, 'options', []); |
|
| 121 | 6 | $imageOptions = ArrayHelper::getValue($item, 'imageOptions', []); |
|
| 122 | 6 | Html::addCssClass($options, 'gallery-item'); |
|
| 123 | |||
| 124 | 6 | return Html::a(Html::img($src, $imageOptions), $url, $options); |
|
| 125 | } |
||
| 126 | |||
| 127 | /** |
||
| 128 | * Renders the template to display the images on a lightbox |
||
| 129 | * @return string the template |
||
| 130 | */ |
||
| 131 | 3 | public function renderTemplate() |
|
| 132 | { |
||
| 133 | 3 | $template[] = '<div class="slides"></div>'; |
|
|
0 ignored issues
–
show
|
|||
| 134 | 3 | $template[] = '<h3 class="title"></h3>'; |
|
| 135 | 3 | $template[] = '<a class="prev">‹</a>'; |
|
| 136 | 3 | $template[] = '<a class="next">›</a>'; |
|
| 137 | 3 | $template[] = '<a class="close">×</a>'; |
|
| 138 | 3 | $template[] = '<a class="play-pause"></a>'; |
|
| 139 | 3 | $template[] = '<ol class="indicator"></ol>'; |
|
| 140 | |||
| 141 | 3 | return Html::tag('div', implode("\n", $template), $this->templateOptions); |
|
| 142 | } |
||
| 143 | |||
| 144 | /** |
||
| 145 | * Registers the client script required for the plugin |
||
| 146 | */ |
||
| 147 | 3 | public function registerClientScript() |
|
| 148 | { |
||
| 149 | 3 | $view = $this->getView(); |
|
| 150 | 3 | GalleryAsset::register($view); |
|
| 151 | 3 | DosamigosAsset::register($view); |
|
| 152 | |||
| 153 | 3 | $id = $this->options['id']; |
|
| 154 | 3 | $options = Json::encode($this->clientOptions); |
|
| 155 | 3 | $js = "dosamigos.gallery.registerLightBoxHandlers('#$id a', $options);"; |
|
| 156 | 3 | $view->registerJs($js); |
|
| 157 | |||
| 158 | 3 | if (!empty($this->clientEvents)) { |
|
| 159 | 3 | $js = []; |
|
| 160 | 3 | foreach ($this->clientEvents as $event => $handler) { |
|
| 161 | 3 | $js[] = "jQuery('$id').on('$event', $handler);"; |
|
| 162 | 3 | } |
|
| 163 | 3 | $view->registerJs(implode("\n", $js)); |
|
| 164 | 3 | } |
|
| 165 | 3 | } |
|
| 166 | } |
||
| 167 |
Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.
Let’s take a look at an example:
As you can see in this example, the array
$myArrayis initialized the first time when the foreach loop is entered. You can also see that the value of thebarkey is only written conditionally; thus, its value might result from a previous iteration.This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.