Version Description
Download this release
Release Info
Developer | supsystic.com |
Plugin | Photo Gallery by Supsystic |
Version | 1.12.3 |
Comparing to | |
See all releases |
Code changes from version 1.12.1 to 1.12.3
- app/assets/css/supsystic-ui.css +8 -1
- app/templates/grid-gallery.twig +1 -1
- index.php +2 -2
- readme.txt +56 -243
- src/GridGallery/Core/views/form.twig +7 -2
- src/GridGallery/Galleries/assets/css/grid-gallery.galleries.effects.css +4 -0
- src/GridGallery/Galleries/assets/css/grid-gallery.galleries.frontend.css +3 -2
- src/GridGallery/Galleries/assets/css/grid-gallery.galleries.style.css +7 -3
- src/GridGallery/Galleries/assets/css/photobox.css +1 -1
- src/GridGallery/Galleries/assets/css/prettyPhoto.css +3 -1
- src/GridGallery/Galleries/assets/js/frontend.js +51 -21
- src/GridGallery/Galleries/assets/js/jquery.photobox.js +4 -1
- src/GridGallery/Galleries/assets/js/lib/jquery.prettyphoto.js +14 -2
- src/GridGallery/Galleries/assets/js/settings.js +391 -144
- src/GridGallery/Galleries/configs/presets.php +6 -6
- src/GridGallery/Galleries/configs/tooltips.php +95 -46
- src/GridGallery/Galleries/views/gallery_preset.twig +47 -12
- src/GridGallery/Galleries/views/helpers/pagination_view.twig +5 -0
- src/GridGallery/Galleries/views/index.twig +1 -1
- src/GridGallery/Galleries/views/r314/shortcode/helpers.twig +2 -2
- src/GridGallery/Galleries/views/r314/shortcode/post_helpers.twig +2 -2
- src/GridGallery/Galleries/views/settings.twig +158 -74
- src/GridGallery/Galleries/views/shortcode/gallery.twig +3 -3
- src/GridGallery/Galleries/views/shortcode/helpers.twig +12 -4
- src/GridGallery/Galleries/views/view.twig +4 -4
- src/GridGallery/Optimization/views/index.twig +59 -7
- src/GridGallery/Promo/Model/classes/lib/Base/MixpanelBase.php +64 -64
- src/GridGallery/Promo/Model/classes/lib/ConsumerStrategies/AbstractConsumer.php +56 -56
- src/GridGallery/Promo/Model/classes/lib/ConsumerStrategies/CurlConsumer.php +220 -220
- src/GridGallery/Promo/Model/classes/lib/ConsumerStrategies/FileConsumer.php +37 -37
- src/GridGallery/Promo/Model/classes/lib/ConsumerStrategies/SocketConsumer.php +307 -307
- src/GridGallery/Promo/Model/classes/lib/Mixpanel.php +302 -302
- src/GridGallery/Promo/Model/classes/lib/Producers/MixpanelBaseProducer.php +228 -228
- src/GridGallery/Promo/Model/classes/lib/Producers/MixpanelEvents.php +163 -163
- src/GridGallery/Promo/Model/classes/lib/Producers/MixpanelPeople.php +147 -147
- src/GridGallery/Settings/views/index.twig +5 -5
- src/GridGallery/Ui/views/type.twig +65 -9
app/assets/css/supsystic-ui.css
CHANGED
@@ -589,6 +589,13 @@ h2 .nav-tab.active{
|
|
589 |
.supsystic-plugin .fa-question.supsystic-tooltip.fa-2x {
|
590 |
padding: 0 6px;
|
591 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
592 |
/*sticky items*/
|
593 |
.supsystic-sticky-active {
|
594 |
position: fixed !important;
|
@@ -853,7 +860,7 @@ table[name="cats"] {
|
|
853 |
}
|
854 |
|
855 |
/* Fix for WP 4.4 */
|
856 |
-
.supsystic-plugin a,
|
857 |
.supsystic-plugin .button-primary,
|
858 |
.supsystic-plugin .button-primary.button-hero,
|
859 |
.ui-dialog a,
|
589 |
.supsystic-plugin .fa-question.supsystic-tooltip.fa-2x {
|
590 |
padding: 0 6px;
|
591 |
}
|
592 |
+
.buttons-edit-preset-dialog .fa-question.supsystic-tooltip {
|
593 |
+
border: 1px solid #28282a;
|
594 |
+
border-radius: 50%;
|
595 |
+
margin-top: 1px;
|
596 |
+
padding: 1px 4px;
|
597 |
+
font-size: 14px;
|
598 |
+
}
|
599 |
/*sticky items*/
|
600 |
.supsystic-sticky-active {
|
601 |
position: fixed !important;
|
860 |
}
|
861 |
|
862 |
/* Fix for WP 4.4 */
|
863 |
+
.supsystic-plugin a:not(.hi-icon),
|
864 |
.supsystic-plugin .button-primary,
|
865 |
.supsystic-plugin .button-primary.button-hero,
|
866 |
.ui-dialog a,
|
app/templates/grid-gallery.twig
CHANGED
@@ -45,7 +45,7 @@
|
|
45 |
<li class="supsystic-sticky {% if request.query.module == 'settings' %}active{% endif %}">
|
46 |
<a href="{{ environment.generateUrl('settings') }}">
|
47 |
<i class="fa fa-gear"></i>
|
48 |
-
<span class="gg-sps-sticky-link">{{ translate('Settings') }}</span>
|
49 |
</a>
|
50 |
</li>
|
51 |
|
45 |
<li class="supsystic-sticky {% if request.query.module == 'settings' %}active{% endif %}">
|
46 |
<a href="{{ environment.generateUrl('settings') }}">
|
47 |
<i class="fa fa-gear"></i>
|
48 |
+
<span class="gg-sps-sticky-link">{{ translate('Advanced Settings') }}</span>
|
49 |
</a>
|
50 |
</li>
|
51 |
|
index.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
/**
|
4 |
* Plugin Name: Photo Gallery by Supsystic
|
5 |
* Description: Easy to use Gallery by Supsystic with professional gallery templates. Show off your best design, photography and creative work
|
6 |
-
* Version: 1.12.
|
7 |
* Author: supsystic.com
|
8 |
* Author URI: https://supsystic.com
|
9 |
* Text Domain: grid-gallery
|
@@ -11,5 +11,5 @@
|
|
11 |
|
12 |
require_once dirname(__FILE__) . '/app/SupsysticGallery.php';
|
13 |
|
14 |
-
$supsysticGallery = new SupsysticGallery('1.12.
|
15 |
$supsysticGallery->run();
|
3 |
/**
|
4 |
* Plugin Name: Photo Gallery by Supsystic
|
5 |
* Description: Easy to use Gallery by Supsystic with professional gallery templates. Show off your best design, photography and creative work
|
6 |
+
* Version: 1.12.3
|
7 |
* Author: supsystic.com
|
8 |
* Author URI: https://supsystic.com
|
9 |
* Text Domain: grid-gallery
|
11 |
|
12 |
require_once dirname(__FILE__) . '/app/SupsysticGallery.php';
|
13 |
|
14 |
+
$supsysticGallery = new SupsysticGallery('1.12.3');
|
15 |
$supsysticGallery->run();
|
readme.txt
CHANGED
@@ -1,54 +1,61 @@
|
|
1 |
=== Photo Gallery by Supsystic ===
|
2 |
Contributors: supsystic.com
|
3 |
Donate link: http://supsystic.com/plugins/gallery
|
4 |
-
Tags: gallery,
|
5 |
Tested up to: 4.9.6
|
6 |
-
Stable tag: 1.12.
|
7 |
|
8 |
-
Photo Gallery with
|
9 |
|
10 |
== Description ==
|
11 |
|
12 |
-
|
|
|
|
|
13 |
|
14 |
-
|
15 |
-
* [Photo Gallery Demo](http://supsystic.com/gallery-examples?utm_source=wordpress&utm_medium=demo&utm_campaign=gallery "WordPress Photo Gallery")
|
16 |
-
* [Grid Gallery FAQ and Documentation](http://supsystic.com/plugins/photo-gallery/#faq "Grid Gallery FAQ and Documentation")
|
17 |
|
18 |
-
|
19 |
|
20 |
-
*
|
21 |
-
*
|
22 |
-
*
|
23 |
-
*
|
24 |
-
* [Post Feed
|
25 |
* [Carousel Gallery](http://supsystic.com/gallery-horizontal-scroll/ "Carousel Gallery")
|
26 |
-
*
|
27 |
-
*
|
28 |
-
* [Polaroid Gallery](http://supsystic.com/polaroid-gallery/ "Polaroid Gallery Style")
|
29 |
-
* [Full Width Gallery](supsystic.com/full-width-gallery-example/ "Full Width Gallery")
|
30 |
-
* [Mosaic Gallery](https://supsystic.com/mosaic-gallery-example/ "Mosaic Gallery")
|
31 |
-
* Add Images to the Gallery from FTP and Social Networks (Facebook, Instagram and more)
|
32 |
-
* Excellent feature [Caption builder](https://supsystic.com/documentation/caption-builder/ "Caption Builder") to make captions for images
|
33 |
-
* Compatible with any WordPress Theme
|
34 |
|
35 |
-
|
36 |
|
37 |
-
|
38 |
|
39 |
-
[
|
|
|
40 |
|
41 |
-
|
42 |
|
43 |
-
|
|
|
44 |
|
45 |
-
|
|
|
46 |
|
47 |
-
|
|
|
|
|
48 |
|
49 |
-
|
|
|
|
|
50 |
|
51 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
|
53 |
= Translate Photo Gallery by Supsystic to Your Language =
|
54 |
|
@@ -72,219 +79,6 @@ You have an incredible opportunity to get PRO version of the photo gallery for f
|
|
72 |
* Spanish
|
73 |
* Turkish
|
74 |
|
75 |
-
Photo Gallery by Supsystic is a cornerstone of many websites today, allowing you to showcase photographs, screenshots, illustrations, videos and more with amazing gallery. A portfolio website without a gallery is like pizza without cheese. A gallery adds an instant professional touch to any website. But it doesn’t just enhance your site’s looks, it also makes gallery image management a breeze, by allowing bulk uploading and photo gallery publishing. Choose the best to suit your particular needs!
|
76 |
-
|
77 |
-
The gallery by Supsystic available today have come a long way from a simple static image display tool. We offered wide range from animated effects, branding possibilities, inclusion of sub-galleries, social network accessibility, and much more. You can use a gallery or slider to feature your posts, and add slow motion effects, icons and post feed gallery. Don't forget photo gallery with slideshow function.
|
78 |
-
|
79 |
-
== Frequently Asked Questions ==
|
80 |
-
|
81 |
-
= First time Photo Gallery by Supsystic user =
|
82 |
-
|
83 |
-
Complete tutorial [How to create your first WordPress Gallery](https://supsystic.com/documentation/gallery-getting-started/ "How to create your first gallery in WordPress")
|
84 |
-
|
85 |
-
= Where is documentation for Gallery by Supsystic WP plugin? =
|
86 |
-
|
87 |
-
Here it is [Gallery Documentation](https://supsystic.com/docs/gallery/ "WordPress Gallery plugin documentation")
|
88 |
-
|
89 |
-
= How to import images to the Gallery by Supsystic plugin? =
|
90 |
-
|
91 |
-
You can see all import methods [here](https://supsystic.com/docs/import-images/ "Import images")
|
92 |
-
|
93 |
-
= How to add gallery into site content? =
|
94 |
-
|
95 |
-
You can add gallery via shortcode or PHP code. More info [here](https://supsystic.com/documentation/add-gallery-site-content/ "Add gallery in to WordPress")
|
96 |
-
|
97 |
-
== Other Notes ==
|
98 |
-
|
99 |
-
= How to Create Photo Gallery in WordPress =
|
100 |
-
|
101 |
-
= Step 1: Creating Responsive Grid Gallery =
|
102 |
-
|
103 |
-
1. On the left navigation menu click “New Photo Gallery”.
|
104 |
-
|
105 |
-
2. Enter the name of photo grid gallery.
|
106 |
-
|
107 |
-
3. Choose image gallery template. You have the ability to choose one of templates:
|
108 |
-
|
109 |
-
* Standard Image Gallery (with fixed grid).
|
110 |
-
* Vertical Photo Grid Gallery (without distance between images).
|
111 |
-
* Rounded Grid Gallery (with fixed grid and border option).
|
112 |
-
* Horizontal Image Gallery (with shadow option).
|
113 |
-
* Categories and Icons (PRO gallery template).
|
114 |
-
* Post Feed and Pagination (PRO gallery template).
|
115 |
-
* Post Feed Slide Up (PRO gallery template).
|
116 |
-
* Post Feed Description (PRO gallery template).
|
117 |
-
* Mozaic Gallery (PRO gallery template).
|
118 |
-
|
119 |
-
4. Click "Save" button.
|
120 |
-
|
121 |
-
On the next steps you can change the settings of photo gallery template.
|
122 |
-
|
123 |
-
= Step 2: Adding images to the Grid Photo Gallery =
|
124 |
-
|
125 |
-
With responsive photo gallery plugin you can import images from -
|
126 |
-
|
127 |
-
* WordPress Media Library
|
128 |
-
* Instagram Account
|
129 |
-
* Flickr Account (PRO gallery feature)
|
130 |
-
* Tumblr Account (PRO gallery feature)
|
131 |
-
* Facebook Account (PRO gallery feature)
|
132 |
-
|
133 |
-
1. Click on "Add Images" gallery button
|
134 |
-
|
135 |
-
2. Choose images from WordPress Media Library - mark those images that you like for the photo gallery. If there are no images that you need, click the Upload Files tab - here you can drop files anywhere to upload or select files from your computer to the gallery.
|
136 |
-
|
137 |
-
3. Click on “Choose Image” gallery button.
|
138 |
-
|
139 |
-
4. To manage or change properties of the photo gallery of images click “Image List” button. Here you can:
|
140 |
-
|
141 |
-
- change the order of photo gallery images - simply by dragging them manually;
|
142 |
-
- delete gallery photos;
|
143 |
-
- add new images from different sources to the grid gallery - click “Add Images” button and select source to import from;
|
144 |
-
- add caption to photo gallery image - it will be displayed on the gallery images caption effect of the photo gallery;
|
145 |
-
- add SEO photo gallery - tags for search requests;
|
146 |
-
- attach links to gallery image - it will go to the link when you click the gallery image;
|
147 |
-
- add video to the gallery - it will be displayed in a pop-up image when you click on a gallery picture;
|
148 |
-
- add tags for gallery image categories.
|
149 |
-
|
150 |
-
= Step3: Editing of Photo Gallery settings =
|
151 |
-
|
152 |
-
To get back to the settings of gallery - click “Properties” button.
|
153 |
-
|
154 |
-
Here you can change default options of photo gallery template. Simply navigate the corresponding tab of gallery properties - Main, Captions, Categories and Posts of the photo gallery. Important! After changing the settings of gallery don’t forget to click “Save” button.
|
155 |
-
|
156 |
-
= 1. Main tab of the photo gallery =
|
157 |
-
|
158 |
-
1.1. Photo Gallery Type - here you can:
|
159 |
-
|
160 |
-
- choose the type of photo gallery - there are 5 gallery types: Fixed, Horizontal, Vertical, Fixed Column and Mozaic (Available in PRO);
|
161 |
-
- set the distance between photo gallery images;
|
162 |
-
- set the width of the responsive image gallery;
|
163 |
-
- set the width and height of gallery images;
|
164 |
-
- set the radius for picture - thanks to this option will turn out wonderful rounded or circular galleries.
|
165 |
-
|
166 |
-
All the values of these gallery options, except for images distance, can be set in pixels or in percent. Gallery images distance set only in pixels.
|
167 |
-
|
168 |
-
1.2. Image Gallery border type - here you have the opportunity:
|
169 |
-
|
170 |
-
- select 8 different types of photo gallery border - Solid, Dotted, Dashed, Double, Groove, Ridge, Inset, Outset;
|
171 |
-
- select the colour of border for images;
|
172 |
-
- define the image border width.
|
173 |
-
|
174 |
-
This gallery option can be disabled. Simply select value - “None” for Border Type.
|
175 |
-
|
176 |
-
1.3. Photo Shadow
|
177 |
-
|
178 |
-
Activate “Available” radio button to see the settings of this gallery option. Shadow option of photo Gallery by Supsystic allows you:
|
179 |
-
|
180 |
-
- show the shadow when mouse is over the gallery image. there are two types of this option: show / hide the shadow when mouse is on picture;
|
181 |
-
- overlay image with shadow ;
|
182 |
-
- choose the colour of image shadow;
|
183 |
-
- set the image gallery shadow blur in percent;
|
184 |
-
- specify the offset of the gallery shadow by X and Y.
|
185 |
-
|
186 |
-
1.4. Pop-up Gallery Image:
|
187 |
-
|
188 |
-
- choose the “Big Image” gallery theme for popup image of grid gallery - to do this you need simply click a “Choose theme” button and select one of the popup gallery themes. One of the themes include the gallery navigation control with thumbnails of images, which is much simplify and speed up access to all gallery images of the photo gallery.
|
189 |
-
- select the transition of popup gallery image - Fade, Elastic, None.
|
190 |
-
- enable the gallery slideshow option - you need activate “Available” radio button to see the settings of this option. here you can set speed of slideshow and activate slideshow autostart. If you activate it - slideshow starts when big image open in popup, if don’t - you have the ability to start gallery slideshow whenever you want. In any case, on the big image will be slideshow controls.
|
191 |
-
|
192 |
-
= 2. Image Gallery Captions Tab =
|
193 |
-
|
194 |
-
2.1. Captions - this option contains such features as:
|
195 |
-
|
196 |
-
- a huge variety of gallery caption effects. Simply click “Choose effect” button and select the overlay effect
|
197 |
-
- the ability to choose background colour of caption
|
198 |
-
- text colour of caption photo gallery
|
199 |
-
- the ability to set the level of transparency for caption option
|
200 |
-
- the ability to specify the font size of the text. (in pixels, percent, ems)
|
201 |
-
- the ability to choose the text alignment of caption - left, center, right, auto.
|
202 |
-
|
203 |
-
2.2. Icons - show amazing icons on the images with different gallery options. There are several types of gallery icons, it all depends on what exactly is attached to the picture - link, video on the gallery images
|
204 |
-
|
205 |
-
- select the effect for animation of gallery icons - you need to click ”Animation” button and choose the effect photo gallery
|
206 |
-
- select the gallery icons color
|
207 |
-
- select the gallery icons hover color - colour of the gallery icon when mouse is over
|
208 |
-
- choose the image gallery background colour for icons
|
209 |
-
- choose the photo gallery background hover colour for icons
|
210 |
-
- set the size of photo gallery icons
|
211 |
-
- set the distance between gallery icons
|
212 |
-
- enable the overlay gallery effect - image will fade under the overlay
|
213 |
-
- set the colour and level of transparency for overlay effect of gallery icons
|
214 |
-
|
215 |
-
You have the opportunity to enable photo gallery Captions and Icons options at the same time, but then you can not choose caption effect for gallery. “Appear” effect always will be by default.
|
216 |
-
|
217 |
-
= 3. Photo Gallery Categories Tab =
|
218 |
-
|
219 |
-
3.1. Show slideshow gallery categories (PRO feature) - categorize images in the grid gallery.
|
220 |
-
|
221 |
-
First you need to add tags for the gallery categories:
|
222 |
-
|
223 |
-
1. Click on “Images list”.
|
224 |
-
2. For each photo choose Categories tab.
|
225 |
-
3. Add a tag for all images.
|
226 |
-
4. Go back to the settings - click “Properties” button.
|
227 |
-
|
228 |
-
Further activate “Available” radio button responsive photo gallery and definitely select the preset (without it categories not displayed). You have the ability to choose one of the default presets or create your own.
|
229 |
-
|
230 |
-
In order to create the gallery preset click “Show preset editor” button. Provide a name for your photo gallery template and specify the settings that you need. Here you can:
|
231 |
-
|
232 |
-
- Select the background colour for gallery images and video container or hide it. Сontainer - the area where will be shown the categories of the image gallery.
|
233 |
-
- Select the background colour for gallery photos text or hide it.
|
234 |
-
- Select the colour of text or use colour, based on your theme.
|
235 |
-
- Set overall vertical and horizontal padding for the categories of image gallery.
|
236 |
-
- Set the font weight and size.
|
237 |
-
- Define the border width for the categories.
|
238 |
-
- Select gallery border type.
|
239 |
-
- Choose photo gallery border colour.
|
240 |
-
- Define image gallery border radius for the categories.
|
241 |
-
|
242 |
-
After configuring the image gallery settings click “Save” button. Select your preset in the “Choose preset” dropdown box.
|
243 |
-
|
244 |
-
Also Categories option includes such capabilities:
|
245 |
-
|
246 |
-
* Enable shuffling animation of gallery images. (If you enable posts layout on the Posts tab - this feature will not be available).
|
247 |
-
* Set the duration of animation (include video gallery).
|
248 |
-
* Define the position of categories - over or under the media gallery.
|
249 |
-
* Determine the alignment of gallery categories (video gallery or photo gallery).
|
250 |
-
|
251 |
-
3.2. Pagination (PRO feature) - make your image gallery easier to use with grid gallery wordpress plugin.
|
252 |
-
|
253 |
-
At first you need to set the number of images per page and choose the preset. You can choose one of the default presets or create your own. In order to create the preset click “Show preset editor” button. Enter the name of your preset and specify the settings that you need. They are exactly the same as in the previous option. After configuring the settings click “Save” button. Select your preset in the “Choose preset” dropdown box.
|
254 |
-
|
255 |
-
As well you have the opportunity:
|
256 |
-
|
257 |
-
* Set the position of gallery buttons - top or bottom of photo gallery
|
258 |
-
* Define the alignment of gallery pagination
|
259 |
-
* You can select only the one of these gallery two options (Categories or Pagination) for one gallery
|
260 |
-
* Pagination gallery option is not available, when is set vertical gallery type of photo gallery
|
261 |
-
|
262 |
-
= 4. Posts tab (PRO feature) - show posts and pages with Gallery by Supsystic! =
|
263 |
-
|
264 |
-
This tab is completely about the capabilities to display the posts and pages in the gallery. To activate the posts option - select “Enable” in Posts Layout dropdown list. Here you find such features as:
|
265 |
-
|
266 |
-
- the ability to choose one of gallery post layout styles - Fixed, Animated, Cover;
|
267 |
-
- the ability to add pages and posts to the polaroid gallery - simply select post / page from corresponding dropdown list and click “Add post” / “Add page” button - it will appear on the bottom of the page;
|
268 |
-
- the opportunity to choose gallery what to show on the posts layout in the gallery and what not to show - author of the post, date, contents and categories of the posts;
|
269 |
-
- the ability to delete a post or page from the grid gallery.
|
270 |
-
|
271 |
-
= Step 4: Photo gallery preview settings =
|
272 |
-
|
273 |
-
After you change some settings - with responsive photo gallery plugin, you can immediately see the result in a live preview in the left top corner. You have the ability to choose image for preview - simply click the “Choose gallery image for preview” button under the window of live preview.
|
274 |
-
|
275 |
-
Live photo gallery preview allows you to view the setting of such features:
|
276 |
-
|
277 |
-
* Images gallery radius
|
278 |
-
* Border gallery option
|
279 |
-
* Shadow gallery option
|
280 |
-
* Caption gallery effect
|
281 |
-
|
282 |
-
In order to see how the other gallery options of responsive image gallery look - you should to click on “Preview” button and will be able to see the whole gallery in a new tab of your browser.
|
283 |
-
|
284 |
-
= Step 5: Displaying the Photo Gallery on the website =
|
285 |
-
|
286 |
-
Under the gallery window with image preview you can see the shortcode of photo gallery. Copy and paste the shortcode into your post or page and Gallery by Supsystic plugin will automatically create the gallery on your page using the settings you choose above.
|
287 |
-
Important! Photo gallery plugin shortcode must be added in a text editor page, and not in the visual.
|
288 |
|
289 |
== Screenshots ==
|
290 |
|
@@ -298,6 +92,25 @@ Important! Photo gallery plugin shortcode must be added in a text editor page, a
|
|
298 |
|
299 |
== Changelog ==
|
300 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
301 |
= Gallery 1.12.1 / 30.05.2018 =
|
302 |
* Fixed "Full screen width" parameter, when "Gallery Position" is "right"
|
303 |
* Added parameter "Strict use of images order"
|
1 |
=== Photo Gallery by Supsystic ===
|
2 |
Contributors: supsystic.com
|
3 |
Donate link: http://supsystic.com/plugins/gallery
|
4 |
+
Tags: gallery, wordpress gallery plugin, photo gallery, grid gallery, image gallery, video gallery, responsive gallery, polaroid gallery
|
5 |
Tested up to: 4.9.6
|
6 |
+
Stable tag: 1.12.3
|
7 |
|
8 |
+
Photo Gallery with template editor to build amazing media gallery. Responsive mobile gallery with grid, masonry, carousel, polaroid and more gallery
|
9 |
|
10 |
== Description ==
|
11 |
|
12 |
+
* [WordPress Photo Gallery](http://supsystic.com/plugins/photo-gallery?utm_source=wordpress&utm_medium=responsive&utm_campaign=gallery "WordPress Photo Gallery")
|
13 |
+
* [Media Gallery Demos](http://supsystic.com/gallery-examples?utm_source=wordpress&utm_medium=demo&utm_campaign=gallery "Media Gallery Demos")
|
14 |
+
* [Plugin FAQ and Documentation](http://supsystic.com/plugins/photo-gallery/#faq "Plugin FAQ and Documentation")
|
15 |
|
16 |
+
[Photo Gallery WordPress Plugin](http://supsystic.com/plugins/photo-gallery?utm_source=wordpress&utm_medium=description&utm_campaign=gallery "Photo Gallery WordPress Plugin") by Supsystic is the best way to create responsive media galleries and albums on your website.
|
|
|
|
|
17 |
|
18 |
+
= Gallery types =
|
19 |
|
20 |
+
* [Full Width Gallery](https://supsystic.com/example/full-width-gallery-example/ "Full Width Gallery")
|
21 |
+
* [Polaroid Gallery](https://supsystic.com/example/polaroid-gallery/ "Polaroid Gallery Style")
|
22 |
+
* [Video Gallery](https://supsystic.com/example/video-gallery/ "Video gallery")
|
23 |
+
* [Fixed Gallery](https://supsystic.com/documentation/fixed-type/ "Fixed Gallery")
|
24 |
+
* [Post Feed Gallery](https://supsystic.com/documentation/gallery-posts-feature/ "Post Feed Gallery")
|
25 |
* [Carousel Gallery](http://supsystic.com/gallery-horizontal-scroll/ "Carousel Gallery")
|
26 |
+
* Masonry Gallery
|
27 |
+
* Grid Gallery
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
|
29 |
+
**[Check all gallery types](https://supsystic.com/gallery-examples/ "Check all gallery types")**
|
30 |
|
31 |
+
= Main Features =
|
32 |
|
33 |
+
* **Fully customization gallery styles: [shadow](https://supsystic.com/example/shadow-gallery-example/ "Shadow"), [border](https://supsystic.com/documentation/border-type/ "border"), [caption and icons](https://supsystic.com/example/captionsicons-gallery-example/ "caption and icons")**
|
34 |
+
WordPress Gallery by Supsystic plugin gives you the versatility to create any type of gallery you want. Choose the shadow preset and set the color and thickness as you like, highlight your images and photos. Use different types of border, give photo description and icon on each image of the gallery.
|
35 |
|
36 |
+
* **[Load More button](https://supsystic.com/documentation/load-more-button/ "Load More button")**, [Paginations](https://supsystic.com/example/pagination-gallery-example/ "Paginations") and **[Lazy Load](https://supsystic.com/documentation/lazy-load/ "Lazy Load")**
|
37 |
|
38 |
+
* **[Social Sharing](https://supsystic.com/example/social-sharing/ "Social Sharing")**
|
39 |
+
We integrated our [Social Share Buttons](https://supsystic.com/plugins/social-share-plugin/ "Social Share Buttons") plugin with Gallery. Now you can share the photos, gather likes of your followers on Facebook, Pinterest, Twitter or any other social media. Stay in touch with your audience and keep contact with them.
|
40 |
|
41 |
+
* **SEO Friendly**
|
42 |
+
Set title and desctiption of the gallery media so gallery become SEO friendly.
|
43 |
|
44 |
+
* **[Watermark option](https://supsystic.com/example/gallery-watermark-example/ "Watermark
|
45 |
+
option")**
|
46 |
+
Protect photos from theft and make them unique using Watermark (PRO feature). You can also reflect a logo of your organization on each photos and this helps to build branded gallery
|
47 |
|
48 |
+
* **[CDN options](https://supsystic.com/documentation/transfer-to-cdn/ "CDN options")**, **[Image compression and optimization](https://supsystic.com/documentation/optimization-gallery-images/ "Image compression and optimization")**.
|
49 |
+
Transfer to CDN function can maintain and accelerate images loading.
|
50 |
+
Images compression and optimization speed up your website and improve your visitors' experience.
|
51 |
|
52 |
+
* **[Add Images to the Gallery from FTP and Social Networks](https://supsystic.com/docs/import-images/ "Import images")**
|
53 |
+
|
54 |
+
* **[Responsive Mobile Friendly](https://supsystic.com/documentation/gallery-responsive-mode/ "Responsive Mobile Friendly WordPress Gallery")**
|
55 |
+
|
56 |
+
= Support =
|
57 |
+
|
58 |
+
Ask your questions in the [support forum](https://wordpress.org/support/plugin/gallery-by-supsystic), or [contact us](https://supsystic.com/contact-us/ "Contact Us") directly.
|
59 |
|
60 |
= Translate Photo Gallery by Supsystic to Your Language =
|
61 |
|
79 |
* Spanish
|
80 |
* Turkish
|
81 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
|
83 |
== Screenshots ==
|
84 |
|
92 |
|
93 |
== Changelog ==
|
94 |
|
95 |
+
= Gallery 1.12.3 / 03.07.2018 =
|
96 |
+
* Add options to change the size of the Watermark
|
97 |
+
* Fixed the work of the Load More option in conjunction with Categories
|
98 |
+
* Minor issues fixes
|
99 |
+
|
100 |
+
= Gallery 1.12.2 / 21.06.2018 =
|
101 |
+
* Fixed popup-rotate for "portrait images"
|
102 |
+
* Fixed labels text and styles in admin
|
103 |
+
* Improve admin page
|
104 |
+
* Added slimScroll position to admin page, to restore scroll postion, after gallery save
|
105 |
+
* Fixed LazyLoad compatibility with "Fixed columns"
|
106 |
+
* Fixed bug with some Mosaic gallery empty places
|
107 |
+
* Fixed "Load More Button" text, to "Load More"
|
108 |
+
* Removed "Use old icons and overlay" option from Caption Builder
|
109 |
+
* Fixed option "Mobile - show always caption". Now popup opened in one click
|
110 |
+
* Improved render "Strict use of images order" script for mosaic Gallery
|
111 |
+
* Fixed tooltips
|
112 |
+
* Minor issues fixes
|
113 |
+
|
114 |
= Gallery 1.12.1 / 30.05.2018 =
|
115 |
* Fixed "Full screen width" parameter, when "Gallery Position" is "right"
|
116 |
* Added parameter "Strict use of images order"
|
src/GridGallery/Core/views/form.twig
CHANGED
@@ -27,12 +27,17 @@
|
|
27 |
<tr>
|
28 |
{% endif %}
|
29 |
<th scope="row">
|
30 |
-
|
|
|
|
|
|
|
|
|
|
|
31 |
<h3 style="margin: 0 !important;" {% if id is not empty %}id="label-{{ id }}"{% endif %}>
|
32 |
{{ label | raw }}
|
33 |
{{ form.show_tooltip(id) }}
|
34 |
</h3>
|
35 |
-
|
36 |
<label {% if id is not empty %}id="label-{{ id }}" for="{{ id }}"{% endif %}>
|
37 |
{{ label }}
|
38 |
{{ form.show_tooltip(id) }}
|
27 |
<tr>
|
28 |
{% endif %}
|
29 |
<th scope="row">
|
30 |
+
{% if titleRow | length == 2 and titleRow == "h4" %}
|
31 |
+
<h4 style="margin: 0 !important;" {% if id is not empty %}id="label-{{ id }}"{% endif %}>
|
32 |
+
{{ label | raw }}
|
33 |
+
{{ form.show_tooltip(id) }}
|
34 |
+
</h4>
|
35 |
+
{% elseif titleRow is not empty %}
|
36 |
<h3 style="margin: 0 !important;" {% if id is not empty %}id="label-{{ id }}"{% endif %}>
|
37 |
{{ label | raw }}
|
38 |
{{ form.show_tooltip(id) }}
|
39 |
</h3>
|
40 |
+
{% else %}
|
41 |
<label {% if id is not empty %}id="label-{{ id }}" for="{{ id }}"{% endif %}>
|
42 |
{{ label }}
|
43 |
{{ form.show_tooltip(id) }}
|
src/GridGallery/Galleries/assets/css/grid-gallery.galleries.effects.css
CHANGED
@@ -45,6 +45,10 @@ a.post .grid-gallery-caption {
|
|
45 |
padding: 0;
|
46 |
}
|
47 |
|
|
|
|
|
|
|
|
|
48 |
.grid-gallery-caption figcaption {
|
49 |
-webkit-box-sizing: border-box;
|
50 |
-moz-box-sizing: border-box;
|
45 |
padding: 0;
|
46 |
}
|
47 |
|
48 |
+
.ggLazyImg {
|
49 |
+
width: 150px !important;
|
50 |
+
}
|
51 |
+
|
52 |
.grid-gallery-caption figcaption {
|
53 |
-webkit-box-sizing: border-box;
|
54 |
-moz-box-sizing: border-box;
|
src/GridGallery/Galleries/assets/css/grid-gallery.galleries.frontend.css
CHANGED
@@ -259,7 +259,8 @@
|
|
259 |
.supsystic-grid-gallery-image-sharing {
|
260 |
position: absolute;
|
261 |
}
|
262 |
-
|
|
|
263 |
text-align: center !important;
|
264 |
}
|
265 |
.supsystic-grid-gallery-image-sharing .supsystic-social-sharing .social-sharing-button{
|
@@ -442,7 +443,7 @@
|
|
442 |
Colorbox Core Style:
|
443 |
The following CSS is consistent between example themes and should not be altered.
|
444 |
*/
|
445 |
-
#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:
|
446 |
#cboxWrapper {max-width:none;}
|
447 |
#cboxOverlay{position:fixed; width:100%; height:100%;}
|
448 |
#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
|
259 |
.supsystic-grid-gallery-image-sharing {
|
260 |
position: absolute;
|
261 |
}
|
262 |
+
.gallery-sharing-top .supsystic-social-sharing,
|
263 |
+
.gallery-sharing-bottom .supsystic-social-sharing{
|
264 |
text-align: center !important;
|
265 |
}
|
266 |
.supsystic-grid-gallery-image-sharing .supsystic-social-sharing .social-sharing-button{
|
443 |
Colorbox Core Style:
|
444 |
The following CSS is consistent between example themes and should not be altered.
|
445 |
*/
|
446 |
+
#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:99999; overflow:hidden;}
|
447 |
#cboxWrapper {max-width:none;}
|
448 |
#cboxOverlay{position:fixed; width:100%; height:100%;}
|
449 |
#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
|
src/GridGallery/Galleries/assets/css/grid-gallery.galleries.style.css
CHANGED
@@ -256,6 +256,7 @@ input.cmn-toggle-round:checked + label:after {
|
|
256 |
white-space: pre;
|
257 |
margin: 1em 0px;
|
258 |
cursor: pointer;
|
|
|
259 |
}
|
260 |
|
261 |
.delete-gallery {
|
@@ -443,9 +444,6 @@ div .image img {
|
|
443 |
top: -10px;
|
444 |
box-shadow: 1px 1px 5px #aaa;
|
445 |
}
|
446 |
-
.gallery-shortcode {
|
447 |
-
width: 200px;
|
448 |
-
}
|
449 |
div.shortcode {
|
450 |
display: inline-block;
|
451 |
line-height: 4;
|
@@ -853,6 +851,9 @@ div.gg-shortcode {
|
|
853 |
.ggSettingsDisplNone {
|
854 |
display: none !important;
|
855 |
}
|
|
|
|
|
|
|
856 |
.gg-tab-links.gg-image-params {
|
857 |
border-bottom: 1px solid #ccc;
|
858 |
}
|
@@ -953,4 +954,7 @@ label[for="captEffShrinkType"] {
|
|
953 |
|
954 |
label.sggCheckboxLabelInOneRow {
|
955 |
margin-right: 10px;
|
|
|
|
|
|
|
956 |
}
|
256 |
white-space: pre;
|
257 |
margin: 1em 0px;
|
258 |
cursor: pointer;
|
259 |
+
width: 185px;
|
260 |
}
|
261 |
|
262 |
.delete-gallery {
|
444 |
top: -10px;
|
445 |
box-shadow: 1px 1px 5px #aaa;
|
446 |
}
|
|
|
|
|
|
|
447 |
div.shortcode {
|
448 |
display: inline-block;
|
449 |
line-height: 4;
|
851 |
.ggSettingsDisplNone {
|
852 |
display: none !important;
|
853 |
}
|
854 |
+
.ggSettingsTop0 {
|
855 |
+
top: 0!important;
|
856 |
+
}
|
857 |
.gg-tab-links.gg-image-params {
|
858 |
border-bottom: 1px solid #ccc;
|
859 |
}
|
954 |
|
955 |
label.sggCheckboxLabelInOneRow {
|
956 |
margin-right: 10px;
|
957 |
+
}
|
958 |
+
.sggFigCaptionIconsEntry {
|
959 |
+
font-size: 0.8em;
|
960 |
}
|
src/GridGallery/Galleries/assets/css/photobox.css
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
#pbOverlay.show{ opacity:1; pointer-events:auto; }
|
2 |
#pbOverlay{
|
3 |
-
opacity:0; overflow:hidden; width:100%; height:100%; position:fixed; z-index:
|
4 |
-moz-user-select:none;
|
5 |
background:rgba(0,0,0,0.90);
|
6 |
// background:radial-gradient(rgba(0,0,0,.6) 0%, rgba(0,0,0,.9) 100%);
|
1 |
#pbOverlay.show{ opacity:1; pointer-events:auto; }
|
2 |
#pbOverlay{
|
3 |
+
opacity:0; overflow:hidden; width:100%; height:100%; position:fixed; z-index:99999; left:0; top:0; text-align:center; pointer-events:none;
|
4 |
-moz-user-select:none;
|
5 |
background:rgba(0,0,0,0.90);
|
6 |
// background:radial-gradient(rgba(0,0,0,.6) 0%, rgba(0,0,0,.9) 100%);
|
src/GridGallery/Galleries/assets/css/prettyPhoto.css
CHANGED
@@ -63,7 +63,8 @@
|
|
63 |
div.pp_details p {line-height: 1}
|
64 |
div.pp_details .pp_description {
|
65 |
margin: 3px 10px 0 0;
|
66 |
-
padding-top:
|
|
|
67 |
}
|
68 |
|
69 |
|
@@ -186,6 +187,7 @@
|
|
186 |
Light Square Theme
|
187 |
----------------------------------- */
|
188 |
|
|
|
189 |
div.light_square .pp_left ,
|
190 |
div.light_square .pp_middle,
|
191 |
div.light_square .pp_right,
|
63 |
div.pp_details p {line-height: 1}
|
64 |
div.pp_details .pp_description {
|
65 |
margin: 3px 10px 0 0;
|
66 |
+
padding-top: 0px;
|
67 |
+
font-size: 1em;
|
68 |
}
|
69 |
|
70 |
|
187 |
Light Square Theme
|
188 |
----------------------------------- */
|
189 |
|
190 |
+
div.light_square,
|
191 |
div.light_square .pp_left ,
|
192 |
div.light_square .pp_middle,
|
193 |
div.light_square .pp_right,
|
src/GridGallery/Galleries/assets/js/frontend.js
CHANGED
@@ -522,6 +522,9 @@
|
|
522 |
onLoad: function(e){
|
523 |
if(self.popup_opened_image == e.el) return;
|
524 |
self.popup_opened_image = e.el;
|
|
|
|
|
|
|
525 |
},
|
526 |
onOpen: function(e) {
|
527 |
//Enable/Disable stop slideshow on mouse hover
|
@@ -643,8 +646,7 @@
|
|
643 |
desc_height = parseInt($_desc.height()),
|
644 |
desc_line_height = parseInt($_desc.css('font-size'));
|
645 |
if(desc_line_height < desc_height){
|
646 |
-
$('.pp_content').height($('.
|
647 |
-
desc_height - desc_line_height);
|
648 |
}
|
649 |
|
650 |
if(hideLongTooltipTitles == 0) {
|
@@ -661,6 +663,7 @@
|
|
661 |
});
|
662 |
$(window).resize(function(){
|
663 |
if(!self.popup_opened_image || !self.$prettyPhoto) return;
|
|
|
664 |
self.$prettyPhoto.open(self.popup_opened_image);
|
665 |
});
|
666 |
} else {
|
@@ -1382,6 +1385,7 @@
|
|
1382 |
var caption = this,
|
1383 |
$caption = $(caption),
|
1384 |
hammer = new Hammer_gg(this),
|
|
|
1385 |
preventClick = false;
|
1386 |
|
1387 |
$caption.on('click', function(event) {
|
@@ -1402,7 +1406,9 @@
|
|
1402 |
if (!$caption.hasClass('hovered')) {
|
1403 |
self.$container.find('.grid-gallery-caption').not(caption).removeClass('hovered');
|
1404 |
$(caption).addClass('hovered');
|
1405 |
-
|
|
|
|
|
1406 |
}
|
1407 |
|
1408 |
}
|
@@ -1514,7 +1520,7 @@
|
|
1514 |
title = '';
|
1515 |
this.$container.find('a, img, div:not(.grid-gallery-photos)').on('mouseenter', function() {
|
1516 |
title = $(this).attr('title');
|
1517 |
-
$(this).attr({'title':''});
|
1518 |
}).mouseout(function() {
|
1519 |
$(this).attr({'title':title});
|
1520 |
});
|
@@ -1700,6 +1706,7 @@
|
|
1700 |
'min-height': height,
|
1701 |
});
|
1702 |
}
|
|
|
1703 |
});
|
1704 |
|
1705 |
Gallery.prototype.hidePreloader = function() {
|
@@ -1883,20 +1890,20 @@
|
|
1883 |
|
1884 |
|
1885 |
if (gallerySharing.position == 'top' || gallerySharing.position == 'all') {
|
1886 |
-
var buttons = this.$container.find('
|
1887 |
.html($socialButtons.html())
|
1888 |
.find('.supsystic-social-sharing');
|
1889 |
window.initSupsysticSocialSharing(buttons);
|
1890 |
}
|
1891 |
|
1892 |
if (gallerySharing.position == 'bottom' || gallerySharing.position == 'all'){
|
1893 |
-
var buttons = this.$container.find('
|
1894 |
.html($socialButtons.html())
|
1895 |
.find('.supsystic-social-sharing');
|
1896 |
window.initSupsysticSocialSharing(buttons);
|
1897 |
}
|
1898 |
|
1899 |
-
this.initEvent(this.$container.find('
|
1900 |
};
|
1901 |
|
1902 |
//init social share for all images in gallery
|
@@ -2300,20 +2307,27 @@
|
|
2300 |
clearTimeout(self.ggLazyTimeOut);
|
2301 |
}
|
2302 |
self.ggLazyTimeOut = setTimeout(function() {
|
2303 |
-
|
2304 |
-
|
2305 |
-
|
2306 |
-
|
2307 |
-
|
2308 |
-
|
2309 |
-
|
2310 |
-
|
2311 |
-
|
2312 |
-
|
2313 |
-
|
2314 |
-
|
2315 |
-
|
2316 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2317 |
}
|
2318 |
}, 200);
|
2319 |
});
|
@@ -2331,6 +2345,7 @@
|
|
2331 |
'threshold': 200,
|
2332 |
'load': function(event) {
|
2333 |
self.lazyLoadDistanceRefresh();
|
|
|
2334 |
},
|
2335 |
});
|
2336 |
});
|
@@ -2497,9 +2512,24 @@
|
|
2497 |
|
2498 |
$(window).on('resize', $.proxy(function () {
|
2499 |
this.correctMargin();
|
|
|
2500 |
}, this));
|
2501 |
});
|
2502 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2503 |
window.initGridGallery = (function (el, autoInit) {
|
2504 |
var makeSelector = (function (el) {
|
2505 |
return '#' + el.id;
|
522 |
onLoad: function(e){
|
523 |
if(self.popup_opened_image == e.el) return;
|
524 |
self.popup_opened_image = e.el;
|
525 |
+
var dimensions = getColorboxImageDimension();
|
526 |
+
$(self.popup_opened_image).data('colorbox').maxWidth = dimensions.width;
|
527 |
+
$(self.popup_opened_image).data('colorbox').maxHeight = dimensions.height;
|
528 |
},
|
529 |
onOpen: function(e) {
|
530 |
//Enable/Disable stop slideshow on mouse hover
|
646 |
desc_height = parseInt($_desc.height()),
|
647 |
desc_line_height = parseInt($_desc.css('font-size'));
|
648 |
if(desc_line_height < desc_height){
|
649 |
+
$('.pp_content').height($('.pp_fade').outerHeight(true) + $('.pp_details').outerHeight(true));
|
|
|
650 |
}
|
651 |
|
652 |
if(hideLongTooltipTitles == 0) {
|
663 |
});
|
664 |
$(window).resize(function(){
|
665 |
if(!self.popup_opened_image || !self.$prettyPhoto) return;
|
666 |
+
if(self.$prettyPhoto[0].closest('div') != self.popup_opened_image[0].closest('div')) return;
|
667 |
self.$prettyPhoto.open(self.popup_opened_image);
|
668 |
});
|
669 |
} else {
|
1385 |
var caption = this,
|
1386 |
$caption = $(caption),
|
1387 |
hammer = new Hammer_gg(this),
|
1388 |
+
captionIsMobile = self.$container.attr('data-caption-mobile'),
|
1389 |
preventClick = false;
|
1390 |
|
1391 |
$caption.on('click', function(event) {
|
1406 |
if (!$caption.hasClass('hovered')) {
|
1407 |
self.$container.find('.grid-gallery-caption').not(caption).removeClass('hovered');
|
1408 |
$(caption).addClass('hovered');
|
1409 |
+
if(captionIsMobile == 'false') {
|
1410 |
+
preventClick = true;
|
1411 |
+
}
|
1412 |
}
|
1413 |
|
1414 |
}
|
1520 |
title = '';
|
1521 |
this.$container.find('a, img, div:not(.grid-gallery-photos)').on('mouseenter', function() {
|
1522 |
title = $(this).attr('title');
|
1523 |
+
$(this).attr({'title':' '});
|
1524 |
}).mouseout(function() {
|
1525 |
$(this).attr({'title':title});
|
1526 |
});
|
1706 |
'min-height': height,
|
1707 |
});
|
1708 |
}
|
1709 |
+
this.resizeHorizontalElements();
|
1710 |
});
|
1711 |
|
1712 |
Gallery.prototype.hidePreloader = function() {
|
1890 |
|
1891 |
|
1892 |
if (gallerySharing.position == 'top' || gallerySharing.position == 'all') {
|
1893 |
+
var buttons = this.$container.find('.gallery-sharing-top')
|
1894 |
.html($socialButtons.html())
|
1895 |
.find('.supsystic-social-sharing');
|
1896 |
window.initSupsysticSocialSharing(buttons);
|
1897 |
}
|
1898 |
|
1899 |
if (gallerySharing.position == 'bottom' || gallerySharing.position == 'all'){
|
1900 |
+
var buttons = this.$container.find('.gallery-sharing-bottom')
|
1901 |
.html($socialButtons.html())
|
1902 |
.find('.supsystic-social-sharing');
|
1903 |
window.initSupsysticSocialSharing(buttons);
|
1904 |
}
|
1905 |
|
1906 |
+
this.initEvent(this.$container.find('.gallery-sharing-top,.gallery-sharing-bottom'));
|
1907 |
};
|
1908 |
|
1909 |
//init social share for all images in gallery
|
2307 |
clearTimeout(self.ggLazyTimeOut);
|
2308 |
}
|
2309 |
self.ggLazyTimeOut = setTimeout(function() {
|
2310 |
+
switch(galleryType) {
|
2311 |
+
case 4:
|
2312 |
+
$(document).trigger('ggMosaicResizedEvent');
|
2313 |
+
break;
|
2314 |
+
case 0:
|
2315 |
+
// if hidden images not showing
|
2316 |
+
setTimeout(function() {
|
2317 |
+
self.lazyLoadTriggerHandler();
|
2318 |
+
}, 450); // animation transition time
|
2319 |
+
break;
|
2320 |
+
case 1:
|
2321 |
+
case 2:
|
2322 |
+
case 3:
|
2323 |
+
default:
|
2324 |
+
self.initWookmark();
|
2325 |
+
// if hidden images not showing
|
2326 |
+
setTimeout(function() {
|
2327 |
+
self.lazyLoadTriggerHandler();
|
2328 |
+
self.initWookmark();
|
2329 |
+
}, 450); // animation transition time
|
2330 |
+
break;
|
2331 |
}
|
2332 |
}, 200);
|
2333 |
});
|
2345 |
'threshold': 200,
|
2346 |
'load': function(event) {
|
2347 |
self.lazyLoadDistanceRefresh();
|
2348 |
+
$(this).closest('div .crop').css('height', '');
|
2349 |
},
|
2350 |
});
|
2351 |
});
|
2512 |
|
2513 |
$(window).on('resize', $.proxy(function () {
|
2514 |
this.correctMargin();
|
2515 |
+
this.resizeHorizontalElements();
|
2516 |
}, this));
|
2517 |
});
|
2518 |
|
2519 |
+
Gallery.prototype.resizeHorizontalElements = (function () {
|
2520 |
+
if(this.$container.data('gridType') == 2 && this.$elements) {
|
2521 |
+
this.$elements.each(function(){
|
2522 |
+
var image = $(this).find('img');
|
2523 |
+
if(image) {
|
2524 |
+
var imageHeight = parseInt(image.css('height'));
|
2525 |
+
if(!isNaN(imageHeight)) {
|
2526 |
+
$(this).css('height', Math.floor(imageHeight - 1) + 'px');
|
2527 |
+
}
|
2528 |
+
}
|
2529 |
+
});
|
2530 |
+
}
|
2531 |
+
});
|
2532 |
+
|
2533 |
window.initGridGallery = (function (el, autoInit) {
|
2534 |
var makeSelector = (function (el) {
|
2535 |
return '#' + el.id;
|
src/GridGallery/Galleries/assets/js/jquery.photobox.js
CHANGED
@@ -739,7 +739,10 @@
|
|
739 |
}
|
740 |
})();
|
741 |
|
742 |
-
|
|
|
|
|
|
|
743 |
if(iframe){
|
744 |
var url = $(imageLinks[activeImage]).attr('href');
|
745 |
return url;
|
739 |
}
|
740 |
})();
|
741 |
|
742 |
+
function newVideo(iframe){
|
743 |
+
if(!iframe) {
|
744 |
+
iframe = false
|
745 |
+
}
|
746 |
if(iframe){
|
747 |
var url = $(imageLinks[activeImage]).attr('href');
|
748 |
return url;
|
src/GridGallery/Galleries/assets/js/lib/jquery.prettyphoto.js
CHANGED
@@ -778,8 +778,20 @@ Version: 3.1.6
|
|
778 |
|
779 |
var response = _fitToViewport(width,height);
|
780 |
|
781 |
-
|
782 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
783 |
|
784 |
return response;
|
785 |
}
|
778 |
|
779 |
var response = _fitToViewport(width,height);
|
780 |
|
781 |
+
winWidth = $(window).width();
|
782 |
+
winHeight = $(window).height();
|
783 |
+
|
784 |
+
if(response.containerWidth > winWidth || response.containerHeight > winHeight)
|
785 |
+
{
|
786 |
+
if(response.containerWidth > winWidth) {
|
787 |
+
windowWidth -= (response.containerWidth - winWidth);
|
788 |
+
} else if(response.containerHeight > winHeight) {
|
789 |
+
windowHeight -= (response.containerHeight - winHeight);
|
790 |
+
}
|
791 |
+
response = _fitToViewport(response.width, response.height);
|
792 |
+
}
|
793 |
+
windowWidth = winWidth;
|
794 |
+
windowHeight = winHeight;
|
795 |
|
796 |
return response;
|
797 |
}
|
src/GridGallery/Galleries/assets/js/settings.js
CHANGED
@@ -167,11 +167,20 @@ sggDataSelectorsCache.prototype.getFromArray = (function(key) {
|
|
167 |
};
|
168 |
|
169 |
Controller.prototype.saveButton = function() {
|
|
|
170 |
$('#btnSave').on('click', function() {
|
|
|
171 |
document.forms['form-settings'].submit();
|
172 |
});
|
173 |
}
|
174 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
175 |
Controller.prototype.setInputColor = (function() {
|
176 |
$('input[type="color"]').each(function() {
|
177 |
if(navigator.userAgent.match(/Trident\/7\./)) {
|
@@ -211,7 +220,8 @@ sggDataSelectorsCache.prototype.getFromArray = (function(key) {
|
|
211 |
$dialog.dialog('close');
|
212 |
$('#iconsEffectNameText').text(effectName);
|
213 |
$previewIcons.removeClass(prevEffectName).removeClass(prevBaseEffectName);
|
214 |
-
$('#iconsEffectName').val(effectName)
|
|
|
215 |
$previewIcons.addClass(effectName).addClass(baseEffectName);
|
216 |
});
|
217 |
|
@@ -548,12 +558,12 @@ sggDataSelectorsCache.prototype.getFromArray = (function(key) {
|
|
548 |
if($previewFigcaption.length) {
|
549 |
var cssProperties = {};
|
550 |
cssProperties['background-color'] = $previewFigcaption.css('background-color');
|
551 |
-
|
552 |
cssProperties['top'] = 0;
|
553 |
cssProperties['bottom'] = 0;
|
554 |
}
|
555 |
$.each($elementsWithEffects, function( i, val ) {
|
556 |
-
if($(
|
557 |
cssProperties['transform'] = 'none';
|
558 |
} else {
|
559 |
delete cssProperties['transform'];
|
@@ -671,10 +681,9 @@ sggDataSelectorsCache.prototype.getFromArray = (function(key) {
|
|
671 |
$('#preview [data-grid-gallery-type]')
|
672 |
.data('grid-gallery-type', $this.data('grid-gallery-type'));
|
673 |
|
|
|
674 |
$('#preview.gallery-preview').trigger('preview.refresh');
|
675 |
|
676 |
-
$effect.val($this.data('grid-gallery-type'));
|
677 |
-
|
678 |
if ($this.data('grid-gallery-type') == 'polaroid') {
|
679 |
$('.polaroid-effect-class:enabled').val('true').trigger('change');
|
680 |
}
|
@@ -897,12 +906,12 @@ sggDataSelectorsCache.prototype.getFromArray = (function(key) {
|
|
897 |
Controller.prototype.areaNotifications = function () {
|
898 |
var $photoWidth = $('input[name= "area[photo_width]"]'),
|
899 |
$photoHeight = $('input[name= "area[photo_height]"]'),
|
900 |
-
|
901 |
$overlay = $('[name="thumbnail[overlay][enabled]"], [name="icons[enabled]"]'),
|
902 |
self = this;
|
903 |
|
904 |
$photoWidth.on('change' , function() {
|
905 |
-
|
906 |
$.jGrowl('Low image width \n post feed content can be too small');
|
907 |
}
|
908 |
|
@@ -912,7 +921,7 @@ sggDataSelectorsCache.prototype.getFromArray = (function(key) {
|
|
912 |
});
|
913 |
|
914 |
$photoHeight.on('change', function() {
|
915 |
-
|
916 |
$.jGrowl('Low image height \n post feed content can be too small');
|
917 |
}
|
918 |
|
@@ -940,14 +949,17 @@ sggDataSelectorsCache.prototype.getFromArray = (function(key) {
|
|
940 |
|
941 |
Controller.prototype.togglePostsTable = (function() {
|
942 |
var $navButtons = $('.form-tabs'),
|
|
|
943 |
$table = $('#gbox_ui-jqgrid-htable');
|
944 |
|
945 |
$navButtons.on('click', function() {
|
946 |
var currHref = $(this).find('a.active').attr('href');
|
947 |
if(currHref == 'post') {
|
948 |
$table.show();
|
|
|
949 |
} else {
|
950 |
-
|
|
|
951 |
}
|
952 |
if(currHref == 'area') {
|
953 |
$('.gg-wraper-anchor-nav-links').show();
|
@@ -989,23 +1001,25 @@ sggDataSelectorsCache.prototype.getFromArray = (function(key) {
|
|
989 |
});
|
990 |
|
991 |
Controller.prototype.togglePosts = function () {
|
992 |
-
|
993 |
$toggleRow = $('select[name="quicksand[enabled]"]'),
|
994 |
value = 0;
|
995 |
|
996 |
-
|
997 |
-
|
998 |
-
|
999 |
-
|
1000 |
-
|
1001 |
-
|
1002 |
-
|
1003 |
-
|
1004 |
-
|
1005 |
-
|
1006 |
-
|
1007 |
-
|
1008 |
-
|
|
|
|
|
1009 |
};
|
1010 |
|
1011 |
Controller.prototype.toggleAutoPosts = function() {
|
@@ -1615,7 +1629,7 @@ sggDataSelectorsCache.prototype.getFromArray = (function(key) {
|
|
1615 |
self.slimScrollOnSizeEvent(self);
|
1616 |
});
|
1617 |
|
1618 |
-
$('.gg-anchor-nav-links').on('click', function(e1) {
|
1619 |
e1.preventDefault();
|
1620 |
var $settingsWrap = $('.settings-wrap')
|
1621 |
, urlLink = $(this).attr('href')
|
@@ -1625,6 +1639,10 @@ sggDataSelectorsCache.prototype.getFromArray = (function(key) {
|
|
1625 |
var offsetLink = $linkItem.offset().top
|
1626 |
, offsetTop = $topItem.offset().top
|
1627 |
, offsetAbs = Math.abs(offsetLink -offsetTop);
|
|
|
|
|
|
|
|
|
1628 |
if(!isNaN(offsetAbs)) {
|
1629 |
$settingsWrap.slimScroll({ scrollTo: offsetAbs + 'px' });
|
1630 |
}
|
@@ -1633,7 +1651,8 @@ sggDataSelectorsCache.prototype.getFromArray = (function(key) {
|
|
1633 |
|
1634 |
// init anchor link
|
1635 |
setTimeout(function() {
|
1636 |
-
$('
|
|
|
1637 |
}, 500);
|
1638 |
});
|
1639 |
|
@@ -2233,6 +2252,10 @@ sggDataSelectorsCache.prototype.getFromArray = (function(key) {
|
|
2233 |
controller.initSubMenuFastLinks();
|
2234 |
$(document).trigger('sggInitGallerySettingsPro', controller);
|
2235 |
//controller.callExtenedFunc('initExtendedGallerySettings', ['params1', 'params2']);
|
|
|
|
|
|
|
|
|
2236 |
$(document).one('input ifClicked', '.supsystic-plugin :input',function(event) {
|
2237 |
controller.settingsChanged = true;
|
2238 |
});
|
@@ -2402,7 +2425,7 @@ sggDataSelectorsCache.prototype.getFromArray = (function(key) {
|
|
2402 |
});
|
2403 |
|
2404 |
ImagePreview.prototype.updateIcons = (function() {
|
2405 |
-
var captBuilderVal = $('
|
2406 |
, captionBuilderIconsEnable = $('#captionBuilderIconsEnable:checked').length
|
2407 |
, captionIconsEnable = $('#icons-enable:checked').length
|
2408 |
, showFewIconsSel = $('#showFewIconsSel').val()
|
@@ -2477,94 +2500,6 @@ sggDataSelectorsCache.prototype.getFromArray = (function(key) {
|
|
2477 |
$('#showFewIconsSel').trigger('change');
|
2478 |
});
|
2479 |
|
2480 |
-
ImagePreview.prototype.initIcons = (function () {
|
2481 |
-
var fields = {
|
2482 |
-
iconsColor: 'icons[color]',
|
2483 |
-
hoverIconsColor: 'icons[hover_color]',
|
2484 |
-
bgColor: 'icons[background]',
|
2485 |
-
hoverBgColor: 'icons[background_hover]',
|
2486 |
-
iconsSize : 'icons[size]'
|
2487 |
-
};
|
2488 |
-
|
2489 |
-
if($.parseJSON($('#showIcons').val())) {
|
2490 |
-
$('#preview figure.grid-gallery-caption').attr('data-grid-gallery-type', 'icons');
|
2491 |
-
$('#preview figcaption').show();
|
2492 |
-
}
|
2493 |
-
$('#showIcons').on('change', $.proxy(function() {
|
2494 |
-
if($.parseJSON($('#showIcons').val())){
|
2495 |
-
this.setDataset('figure', 'data-grid-gallery-type', 'icons');
|
2496 |
-
$('#preview figcaption').show();
|
2497 |
-
} else {
|
2498 |
-
$('#preview figcaption').hide();
|
2499 |
-
}
|
2500 |
-
}, this));
|
2501 |
-
|
2502 |
-
$(getSelector(fields.iconsColor)).bind('change paste keyup', $.proxy(function (e) {
|
2503 |
-
this.setProp('a.hi-icon', { color: $(e.currentTarget).val() });
|
2504 |
-
}, this))
|
2505 |
-
.trigger('change')
|
2506 |
-
.bind('change', $.proxy(function () {
|
2507 |
-
this.setProp('figcaption', { opacity: 1 });
|
2508 |
-
}, this))
|
2509 |
-
.on('focusout', $.proxy(function () {
|
2510 |
-
this.setProp('figcaption', { opacity: '' });
|
2511 |
-
}, this));
|
2512 |
-
|
2513 |
-
$(getSelector(fields.hoverIconsColor)).bind('change paste keyup', $.proxy(function (e) {
|
2514 |
-
$('a.hi-icon').on('mouseover', $.proxy(function() {
|
2515 |
-
this.setProp('a.hi-icon', { color: $(e.currentTarget).val() });
|
2516 |
-
}, this))
|
2517 |
-
$('a.hi-icon').on('mouseleave', $.proxy(function() {
|
2518 |
-
this.setProp('a.hi-icon', { color: $(getSelector(fields.iconsColor)).val() });
|
2519 |
-
}, this))
|
2520 |
-
}, this))
|
2521 |
-
.trigger('change')
|
2522 |
-
.bind('change', $.proxy(function () {
|
2523 |
-
this.setProp('figcaption', { opacity: 1 });
|
2524 |
-
}, this))
|
2525 |
-
.on('focusout', $.proxy(function () {
|
2526 |
-
this.setProp('figcaption', { opacity: '' });
|
2527 |
-
}, this));
|
2528 |
-
|
2529 |
-
$(getSelector(fields.bgColor)).bind('change paste keyup', $.proxy(function (e) {
|
2530 |
-
this.setProp('figcaption', { backgroundColor: $(e.currentTarget).val() });
|
2531 |
-
}, this))
|
2532 |
-
.trigger('change')
|
2533 |
-
.bind('change', $.proxy(function () {
|
2534 |
-
this.setProp('figcaption', { opacity: 1 });
|
2535 |
-
}, this))
|
2536 |
-
.on('focusout', $.proxy(function () {
|
2537 |
-
this.setProp('figcaption', { opacity: '' });
|
2538 |
-
}, this));
|
2539 |
-
|
2540 |
-
$(getSelector(fields.hoverBgColor)).bind('change paste keyup', $.proxy(function (e) {
|
2541 |
-
$('a.hi-icon').on('mouseover', $.proxy(function() {
|
2542 |
-
this.setProp('figcaption', { backgroundColor: $(e.currentTarget).val() });
|
2543 |
-
}, this))
|
2544 |
-
$('a.hi-icon').on('mouseleave', $.proxy(function() {
|
2545 |
-
this.setProp('figcaption', { backgroundColor: $(getSelector(fields.bgColor)).val() });
|
2546 |
-
}, this))
|
2547 |
-
}, this))
|
2548 |
-
.trigger('change')
|
2549 |
-
.bind('change', $.proxy(function () {
|
2550 |
-
this.setProp('figcaption', { opacity: 1 });
|
2551 |
-
}, this))
|
2552 |
-
.on('focusout', $.proxy(function () {
|
2553 |
-
this.setProp('figcaption', { opacity: '' });
|
2554 |
-
}, this));
|
2555 |
-
|
2556 |
-
$(getSelector(fields.iconsSize)).bind('change paste keyup', $.proxy(function (e) {
|
2557 |
-
this.setProp('a.hi-icon', { width: $(e.currentTarget).val()*9, height: $(e.currentTarget).val()*9 });
|
2558 |
-
}, this))
|
2559 |
-
.trigger('change')
|
2560 |
-
.bind('change', $.proxy(function () {
|
2561 |
-
this.setProp('figcaption', { opacity: 1 });
|
2562 |
-
}, this))
|
2563 |
-
.on('focusout', $.proxy(function () {
|
2564 |
-
this.setProp('figcaption', { opacity: '' });
|
2565 |
-
}, this));
|
2566 |
-
});
|
2567 |
-
|
2568 |
ImagePreview.prototype.initShadow = (function () {
|
2569 |
var _this = this;
|
2570 |
|
@@ -2823,25 +2758,325 @@ sggDataSelectorsCache.prototype.getFromArray = (function(key) {
|
|
2823 |
selfIp.previewCaptionHide();
|
2824 |
}
|
2825 |
}
|
2826 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2827 |
|
2828 |
this.previewSettingsKeys = {};
|
2829 |
this.objectsData = new sggDataSelectorsCache();
|
2830 |
this.objectsData.init({
|
2831 |
'keys': this.previewSettingsKeys,
|
2832 |
});
|
2833 |
-
});
|
2834 |
|
2835 |
-
|
2836 |
-
|
2837 |
-
|
2838 |
-
|
2839 |
-
|
2840 |
-
this.initOverlayShadow();
|
2841 |
-
//this.initIcons();
|
2842 |
-
this.initSharedPropsForIcons();
|
2843 |
-
this.initCaption();
|
2844 |
-
this.initCaptionEffects();
|
2845 |
});
|
2846 |
|
2847 |
ImagePreview.prototype.captionCalculations = (function() {
|
@@ -2914,7 +3149,7 @@ sggDataSelectorsCache.prototype.getFromArray = (function(key) {
|
|
2914 |
} else {
|
2915 |
// get preview figure params
|
2916 |
var figureWithStyle = $("#preview figure.grid-gallery-caption")
|
2917 |
-
|
2918 |
// remove image size properties
|
2919 |
if(imageStyleObj['height']) {
|
2920 |
delete imageStyleObj['height'];
|
@@ -2966,25 +3201,34 @@ sggDataSelectorsCache.prototype.getFromArray = (function(key) {
|
|
2966 |
if ($(this).data('grid-gallery-type') == 'polaroid' &&
|
2967 |
$(this).closest('#preview').length > 0) {
|
2968 |
|
2969 |
-
var
|
2970 |
-
|
2971 |
-
|
2972 |
-
|
2973 |
-
|
2974 |
-
|
2975 |
-
|
2976 |
-
|
2977 |
-
|
2978 |
-
|
2979 |
-
|
2980 |
-
|
2981 |
-
|
2982 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2983 |
}
|
2984 |
|
2985 |
-
$img.first().attr('data-width', imageWidth);
|
2986 |
-
$img.first().attr('data-height', imageHeight);
|
2987 |
-
|
2988 |
$img[0].style.setProperty('width', imageWidth + 'px', 'important');
|
2989 |
$img[0].style.setProperty('height', imageHeight + 'px', 'important');
|
2990 |
$img[0].style.setProperty('margin', '0 auto', 'important');
|
@@ -3114,6 +3358,9 @@ sggDataSelectorsCache.prototype.getFromArray = (function(key) {
|
|
3114 |
|
3115 |
// Init Caption: run only on One time
|
3116 |
$('[name="thumbnail[overlay][enabled]"]:checked').trigger('change');
|
|
|
|
|
|
|
3117 |
});
|
3118 |
|
3119 |
/* NOW its unusable Code created for mosaic[images][count]
|
167 |
};
|
168 |
|
169 |
Controller.prototype.saveButton = function() {
|
170 |
+
var selfC = this;
|
171 |
$('#btnSave').on('click', function() {
|
172 |
+
selfC.saveScrollPos();
|
173 |
document.forms['form-settings'].submit();
|
174 |
});
|
175 |
}
|
176 |
|
177 |
+
Controller.prototype.saveScrollPos = (function() {
|
178 |
+
var scrollTopPos = parseInt($('.settings-wrap').scrollTop());
|
179 |
+
if(!isNaN(scrollTopPos)) {
|
180 |
+
$('#slimScrollStartPos').val(scrollTopPos);
|
181 |
+
}
|
182 |
+
});
|
183 |
+
|
184 |
Controller.prototype.setInputColor = (function() {
|
185 |
$('input[type="color"]').each(function() {
|
186 |
if(navigator.userAgent.match(/Trident\/7\./)) {
|
220 |
$dialog.dialog('close');
|
221 |
$('#iconsEffectNameText').text(effectName);
|
222 |
$previewIcons.removeClass(prevEffectName).removeClass(prevBaseEffectName);
|
223 |
+
$('#iconsEffectName').val(effectName)
|
224 |
+
.trigger('change');
|
225 |
$previewIcons.addClass(effectName).addClass(baseEffectName);
|
226 |
});
|
227 |
|
558 |
if($previewFigcaption.length) {
|
559 |
var cssProperties = {};
|
560 |
cssProperties['background-color'] = $previewFigcaption.css('background-color');
|
561 |
+
if($('.ggUserCaptionBuilderCl:checked').val() == '1') {
|
562 |
cssProperties['top'] = 0;
|
563 |
cssProperties['bottom'] = 0;
|
564 |
}
|
565 |
$.each($elementsWithEffects, function( i, val ) {
|
566 |
+
if($('.ggUserCaptionBuilderCl:checked') == '1' && $(val).data('gridGalleryType') == 'center') {
|
567 |
cssProperties['transform'] = 'none';
|
568 |
} else {
|
569 |
delete cssProperties['transform'];
|
681 |
$('#preview [data-grid-gallery-type]')
|
682 |
.data('grid-gallery-type', $this.data('grid-gallery-type'));
|
683 |
|
684 |
+
$effect.val($this.data('grid-gallery-type'));
|
685 |
$('#preview.gallery-preview').trigger('preview.refresh');
|
686 |
|
|
|
|
|
687 |
if ($this.data('grid-gallery-type') == 'polaroid') {
|
688 |
$('.polaroid-effect-class:enabled').val('true').trigger('change');
|
689 |
}
|
906 |
Controller.prototype.areaNotifications = function () {
|
907 |
var $photoWidth = $('input[name= "area[photo_width]"]'),
|
908 |
$photoHeight = $('input[name= "area[photo_height]"]'),
|
909 |
+
isPostFeedEnabled = $('.ggPostsEnableCl:checked').val() == 1,
|
910 |
$overlay = $('[name="thumbnail[overlay][enabled]"], [name="icons[enabled]"]'),
|
911 |
self = this;
|
912 |
|
913 |
$photoWidth.on('change' , function() {
|
914 |
+
if($photoWidth.val() < 240 && isPostFeedEnabled) {
|
915 |
$.jGrowl('Low image width \n post feed content can be too small');
|
916 |
}
|
917 |
|
921 |
});
|
922 |
|
923 |
$photoHeight.on('change', function() {
|
924 |
+
if($photoHeight.val() < 240 && isPostFeedEnabled) {
|
925 |
$.jGrowl('Low image height \n post feed content can be too small');
|
926 |
}
|
927 |
|
949 |
|
950 |
Controller.prototype.togglePostsTable = (function() {
|
951 |
var $navButtons = $('.form-tabs'),
|
952 |
+
$prePostTableControls = $('.sggPostsPreTable'),
|
953 |
$table = $('#gbox_ui-jqgrid-htable');
|
954 |
|
955 |
$navButtons.on('click', function() {
|
956 |
var currHref = $(this).find('a.active').attr('href');
|
957 |
if(currHref == 'post') {
|
958 |
$table.show();
|
959 |
+
$prePostTableControls.show();
|
960 |
} else {
|
961 |
+
$table.hide();
|
962 |
+
$prePostTableControls.hide();
|
963 |
}
|
964 |
if(currHref == 'area') {
|
965 |
$('.gg-wraper-anchor-nav-links').show();
|
1001 |
});
|
1002 |
|
1003 |
Controller.prototype.togglePosts = function () {
|
1004 |
+
var $postsEnable = $('.ggPostsEnableCl'),
|
1005 |
$toggleRow = $('select[name="quicksand[enabled]"]'),
|
1006 |
value = 0;
|
1007 |
|
1008 |
+
$postsEnable.on('ifChanged', function () {
|
1009 |
+
var $currPostEnb = $(this);
|
1010 |
+
if($currPostEnb.is(':checked')) {
|
1011 |
+
value = parseInt($currPostEnb.val(), 10);
|
1012 |
+
if (value) {
|
1013 |
+
$toggleRow.attr('disabled', 'disabled');
|
1014 |
+
if ($toggleRow.val() > 0) {
|
1015 |
+
$.jGrowl('You cant use image shuffling option \n when post feed is enabled');
|
1016 |
+
$toggleRow.val('0');
|
1017 |
+
};
|
1018 |
+
} else {
|
1019 |
+
$toggleRow.removeAttr('disabled');
|
1020 |
+
}
|
1021 |
+
}
|
1022 |
+
}).trigger('ifChanged');
|
1023 |
};
|
1024 |
|
1025 |
Controller.prototype.toggleAutoPosts = function() {
|
1629 |
self.slimScrollOnSizeEvent(self);
|
1630 |
});
|
1631 |
|
1632 |
+
$('.gg-anchor-nav-links').on('click', function(e1, funcParams) {
|
1633 |
e1.preventDefault();
|
1634 |
var $settingsWrap = $('.settings-wrap')
|
1635 |
, urlLink = $(this).attr('href')
|
1639 |
var offsetLink = $linkItem.offset().top
|
1640 |
, offsetTop = $topItem.offset().top
|
1641 |
, offsetAbs = Math.abs(offsetLink -offsetTop);
|
1642 |
+
// if need to set start position
|
1643 |
+
if(funcParams && funcParams.offsetScTop) {
|
1644 |
+
offsetAbs = funcParams.offsetScTop;
|
1645 |
+
}
|
1646 |
if(!isNaN(offsetAbs)) {
|
1647 |
$settingsWrap.slimScroll({ scrollTo: offsetAbs + 'px' });
|
1648 |
}
|
1651 |
|
1652 |
// init anchor link
|
1653 |
setTimeout(function() {
|
1654 |
+
var slScrollTopPos = parseInt($('#slimScrollStartPos').val());
|
1655 |
+
$('.gg-anchor-nav-links[href="#gg-anl-main"]').trigger('click', {'offsetScTop':slScrollTopPos});
|
1656 |
}, 500);
|
1657 |
});
|
1658 |
|
2252 |
controller.initSubMenuFastLinks();
|
2253 |
$(document).trigger('sggInitGallerySettingsPro', controller);
|
2254 |
//controller.callExtenedFunc('initExtendedGallerySettings', ['params1', 'params2']);
|
2255 |
+
// prevent click for icons
|
2256 |
+
$(document).on('click', '#preview .hi-icon.fa', function(event) {
|
2257 |
+
event.preventDefault();
|
2258 |
+
});
|
2259 |
$(document).one('input ifClicked', '.supsystic-plugin :input',function(event) {
|
2260 |
controller.settingsChanged = true;
|
2261 |
});
|
2425 |
});
|
2426 |
|
2427 |
ImagePreview.prototype.updateIcons = (function() {
|
2428 |
+
var captBuilderVal = $('.ggUserCaptionBuilderCl:checked').val()
|
2429 |
, captionBuilderIconsEnable = $('#captionBuilderIconsEnable:checked').length
|
2430 |
, captionIconsEnable = $('#icons-enable:checked').length
|
2431 |
, showFewIconsSel = $('#showFewIconsSel').val()
|
2500 |
$('#showFewIconsSel').trigger('change');
|
2501 |
});
|
2502 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2503 |
ImagePreview.prototype.initShadow = (function () {
|
2504 |
var _this = this;
|
2505 |
|
2758 |
selfIp.previewCaptionHide();
|
2759 |
}
|
2760 |
}
|
2761 |
+
});
|
2762 |
+
$('[name="thumbnail[overlay][enabled]"]').off('ifChanged').on('ifChanged', function(event) {
|
2763 |
+
// code runnen twice
|
2764 |
+
var $overlayEnabled = $('[name="thumbnail[overlay][enabled]"]:checked');
|
2765 |
+
if($overlayEnabled.length) {
|
2766 |
+
selfIp.initCaptionsAndIcons();
|
2767 |
+
}
|
2768 |
+
});
|
2769 |
+
});
|
2770 |
+
|
2771 |
+
//ImagePreview.prototype.getCssParamsForCaption = (function() {
|
2772 |
+
//
|
2773 |
+
//});
|
2774 |
+
|
2775 |
+
ImagePreview.prototype.getCssParamsForIcons = (function(paramsToGet) {
|
2776 |
+
var returnObj = {};
|
2777 |
+
|
2778 |
+
if(!paramsToGet || paramsToGet.effectName) {
|
2779 |
+
var $iconEffectName = $('#iconsEffectName');
|
2780 |
+
returnObj['effectName'] = $iconEffectName.val();
|
2781 |
+
}
|
2782 |
+
if(!paramsToGet || paramsToGet.color) {
|
2783 |
+
var $iconsColor = $('#iconsColor');
|
2784 |
+
returnObj['color'] = $iconsColor.val();
|
2785 |
+
}
|
2786 |
+
if(!paramsToGet || paramsToGet.colorOnHover) {
|
2787 |
+
var $iconsHoverColor = $('#iconsHoverColor');
|
2788 |
+
returnObj['colorOnHover'] = $iconsHoverColor.val();
|
2789 |
+
}
|
2790 |
+
if(!paramsToGet || paramsToGet.bgColor) {
|
2791 |
+
var $iconsBgColor = $('#iconsBackgroundColor');
|
2792 |
+
returnObj['bgColor'] = $iconsBgColor.val();
|
2793 |
+
}
|
2794 |
+
if(!paramsToGet || paramsToGet.bgColorOnHover) {
|
2795 |
+
var $iconsHoverBgColor = $('#iconsBackgroundHoverColor');
|
2796 |
+
returnObj['bgColorOnHover'] = $iconsHoverBgColor.val();
|
2797 |
+
}
|
2798 |
+
if(!paramsToGet || paramsToGet.fontSize) {
|
2799 |
+
var $iconsSize = $('#iconsSize');
|
2800 |
+
returnObj['fontSize'] = $iconsSize.val();
|
2801 |
+
}
|
2802 |
+
if(!paramsToGet || paramsToGet.distance) {
|
2803 |
+
var $iconsDistance = $('#iconsMargin');
|
2804 |
+
returnObj['distance'] = $iconsDistance.val();
|
2805 |
+
}
|
2806 |
+
if(!paramsToGet || paramsToGet.overlayIsShowing) {
|
2807 |
+
var $iconsOverlayIsShowed = $('#iconsOverlay');
|
2808 |
+
returnObj['overlayIsShowing'] = $iconsOverlayIsShowed.val();
|
2809 |
+
}
|
2810 |
+
|
2811 |
+
if(!paramsToGet || paramsToGet.overlayColor) {
|
2812 |
+
var $iconsOverlayColor = $('#iconsOverlayColor');
|
2813 |
+
returnObj['overlayColor'] = $iconsOverlayColor.val();
|
2814 |
+
}
|
2815 |
+
if(!paramsToGet || paramsToGet.overlayTransparency) {
|
2816 |
+
var $iconsOverlayTransparency = $('#iconsOverlayTransparency')
|
2817 |
+
, transpVal = parseInt($iconsOverlayTransparency.val());
|
2818 |
+
;
|
2819 |
+
if(!isNaN(transpVal)) {
|
2820 |
+
returnObj['overlayTransparency'] = 1 - (transpVal / 10);
|
2821 |
+
} else {
|
2822 |
+
returnObj['overlayTransparency'] = 1;
|
2823 |
+
}
|
2824 |
+
}
|
2825 |
+
return returnObj;
|
2826 |
+
});
|
2827 |
+
|
2828 |
+
ImagePreview.prototype.initSimpleIcons = (function() {
|
2829 |
+
var selfIp = this
|
2830 |
+
, $iconEffectName = $('#iconsEffectName')
|
2831 |
+
, $iconsColor = $('#iconsColor')
|
2832 |
+
, $iconsHoverColor = $('#iconsHoverColor')
|
2833 |
+
, $iconsBgColor = $('#iconsBackgroundColor')
|
2834 |
+
, $iconsHoverBgColor = $('#iconsBackgroundHoverColor')
|
2835 |
+
, $iconsSize = $('#iconsSize')
|
2836 |
+
, $iconsDistance = $('#iconsMargin')
|
2837 |
+
, $figureIconsBlock = $('#preview .sggFigCaptionIconsEntry')
|
2838 |
+
;
|
2839 |
+
$iconEffectName.off('change').on('change', function() {
|
2840 |
+
selfIp.setIconParams($figureIconsBlock, {'effectName': $iconEffectName.val()});
|
2841 |
+
});
|
2842 |
+
$iconsColor.off('change').on('change', function() {
|
2843 |
+
selfIp.setIconParams($figureIconsBlock, {'color': $iconsColor.val()});
|
2844 |
+
});
|
2845 |
+
$iconsHoverColor.off('change').on('change', function() {
|
2846 |
+
selfIp.setIconParams($figureIconsBlock, {'colorOnHover': $iconsHoverColor.val()});
|
2847 |
+
});
|
2848 |
+
$iconsBgColor.off('change').on('change', function() {
|
2849 |
+
selfIp.setIconParams($figureIconsBlock, {'bgColor': $iconsBgColor.val()});
|
2850 |
+
});
|
2851 |
+
$iconsHoverBgColor.off('change').on('change', function() {
|
2852 |
+
selfIp.setIconParams($figureIconsBlock, {'bgColorOnHover': $iconsHoverBgColor.val()});
|
2853 |
+
});
|
2854 |
+
$iconsSize.off('change keyup paste').on('change keyup paste', function() {
|
2855 |
+
selfIp.setIconParams($figureIconsBlock, {'fontSize': $iconsSize.val()});
|
2856 |
+
});
|
2857 |
+
$iconsDistance.off('change keyup paste').on('change keyup paste', function() {
|
2858 |
+
selfIp.setIconParams($figureIconsBlock, {'distance': $iconsDistance.val()});
|
2859 |
+
});
|
2860 |
+
});
|
2861 |
+
|
2862 |
+
ImagePreview.prototype.initSimpleOverlay = (function($simpleOverlayBlock) {
|
2863 |
+
var $iconsOverlayIsShowed = $('#iconsOverlay')
|
2864 |
+
, $iconsOverlayTransparency = $('#iconsOverlayTransparency')
|
2865 |
+
, $iconsOverlayColor = $('#iconsOverlayColor')
|
2866 |
+
, selfIp = this
|
2867 |
+
;
|
2868 |
+
$iconsOverlayIsShowed.off('change').on('change', function() {
|
2869 |
+
selfIp.setSimpleOverlay($simpleOverlayBlock, {
|
2870 |
+
'overlayIsShowing': $iconsOverlayIsShowed.val(),
|
2871 |
+
'overlayColor': $iconsOverlayColor.val(),
|
2872 |
+
'overlayTransparency': $iconsOverlayTransparency.val(),
|
2873 |
+
});
|
2874 |
+
});
|
2875 |
+
$iconsOverlayColor.off('change').on('change', function() {
|
2876 |
+
selfIp.setSimpleOverlay($simpleOverlayBlock, {
|
2877 |
+
'overlayIsShowing': $iconsOverlayIsShowed.val(),
|
2878 |
+
'overlayColor': $iconsOverlayColor.val(),
|
2879 |
+
'overlayTransparency': $iconsOverlayTransparency.val(),
|
2880 |
+
});
|
2881 |
+
});
|
2882 |
+
$iconsOverlayTransparency.off('change').on('change', function() {
|
2883 |
+
selfIp.setSimpleOverlay($simpleOverlayBlock, {
|
2884 |
+
'overlayIsShowing': $iconsOverlayIsShowed.val(),
|
2885 |
+
'overlayColor': $iconsOverlayColor.val(),
|
2886 |
+
'overlayTransparency': $iconsOverlayTransparency.val(),
|
2887 |
+
});
|
2888 |
+
});
|
2889 |
+
});
|
2890 |
+
|
2891 |
+
ImagePreview.prototype.setSimpleOverlay = (function($overlayBlock, paramsToGet) {
|
2892 |
+
var isOverlayShow
|
2893 |
+
, color
|
2894 |
+
, transpVal
|
2895 |
+
, notSetted = true
|
2896 |
+
;
|
2897 |
+
if(!$overlayBlock || !$overlayBlock.length) {
|
2898 |
+
$overlayBlock = $('#preview .grid-gallery-caption')
|
2899 |
+
}
|
2900 |
+
if(paramsToGet && paramsToGet.overlayIsShowing == 'true' && paramsToGet.overlayColor) {
|
2901 |
+
transpVal = parseInt(paramsToGet.overlayTransparency);
|
2902 |
+
if(!isNaN(transpVal)) {
|
2903 |
+
transpVal = 1 - (transpVal / 10);
|
2904 |
+
color = hexToRgbA(paramsToGet.overlayColor, transpVal);
|
2905 |
+
$overlayBlock.css({'background-color': color});
|
2906 |
+
notSetted = false;
|
2907 |
+
}
|
2908 |
+
}
|
2909 |
+
|
2910 |
+
if(notSetted) {
|
2911 |
+
$overlayBlock.css({'background-color': 'transparent'});
|
2912 |
+
}
|
2913 |
+
});
|
2914 |
+
|
2915 |
+
ImagePreview.prototype.setIconParams = (function($iconWrapper, params) {
|
2916 |
+
var $iconList = $iconWrapper.find('.hi-icon');
|
2917 |
+
|
2918 |
+
if(params) {
|
2919 |
+
if(params.effectName) {
|
2920 |
+
var oldClassArr = this.findClassByStr($iconWrapper, 'hi-icon-effect')
|
2921 |
+
, tmpVal = params.effectName;
|
2922 |
+
for(var indTmpInd = 0; indTmpInd < oldClassArr.length; indTmpInd++) {
|
2923 |
+
$iconWrapper.removeClass(oldClassArr[indTmpInd]);
|
2924 |
+
}
|
2925 |
+
|
2926 |
+
$iconWrapper.addClass(tmpVal);
|
2927 |
+
tmpVal = tmpVal.substr(0, tmpVal.length - 1);
|
2928 |
+
$iconWrapper.addClass(tmpVal);
|
2929 |
+
}
|
2930 |
+
if(params.distance) {
|
2931 |
+
var distance = parseInt(params.distance);
|
2932 |
+
if(!isNaN(distance)) {
|
2933 |
+
$iconList.each(function(ind, item) {
|
2934 |
+
var $currItem = $(item);
|
2935 |
+
$currItem.css({
|
2936 |
+
'margin-left': distance + 'px',
|
2937 |
+
'margin-right': distance + 'px',
|
2938 |
+
});
|
2939 |
+
});
|
2940 |
+
}
|
2941 |
+
}
|
2942 |
+
if(params.color) {
|
2943 |
+
$('#sggSettingsIconColorStyle').html('.hi-icon {color: ' + params.color + ' !important;}');
|
2944 |
+
}
|
2945 |
+
if(params.colorOnHover) {
|
2946 |
+
$('#sggSettingHiIconHoverColorStyle').html('.hi-icon:hover { color: ' + params.colorOnHover + ' !important; }');
|
2947 |
+
}
|
2948 |
+
if(params.bgColor) {
|
2949 |
+
$('#sggSettingsIconBgColorStyle').html('.hi-icon { background: ' + params.bgColor + ' !important; }');
|
2950 |
+
}
|
2951 |
+
if(params.bgColorOnHover) {
|
2952 |
+
$('#sggSettingHiIconHoverBgStyle').html('.hi-icon:hover { background: ' + params.bgColorOnHover + ' !important; }');
|
2953 |
+
}
|
2954 |
+
if(params.fontSize) {
|
2955 |
+
var fontSize = parseInt(params.fontSize);
|
2956 |
+
if(!isNaN(fontSize)) {
|
2957 |
+
$('#sggSettingHiIconBeforeFontSizeStyle').html(
|
2958 |
+
'.hi-icon:before {font-size: ' + fontSize + 'px !important;' +
|
2959 |
+
'line-height: ' + 2*fontSize + 'px !important;}'
|
2960 |
+
);
|
2961 |
+
$('#sggSettingsIconSizeStyle').html(
|
2962 |
+
'.hi-icon {width: ' + 2*fontSize + 'px !important;' +
|
2963 |
+
'height: ' + 2*fontSize + 'px !important;}'
|
2964 |
+
);
|
2965 |
+
}
|
2966 |
+
}
|
2967 |
+
}
|
2968 |
+
});
|
2969 |
+
|
2970 |
+
ImagePreview.prototype.initCaptionsAndIcons = (function() {
|
2971 |
+
var captBuilderEnabled = $('input.ggUserCaptionBuilderCl:checked').val() == 1
|
2972 |
+
, captionEnabled = $('input[name="thumbnail[overlay][enabled]"]:checked').val() == 'true'
|
2973 |
+
, iconsEnabled = $('input[name="icons[enabled]"]:checked').val() == 'true'
|
2974 |
+
, $preview = $('#preview')
|
2975 |
+
, $iconsOverlayIsShowed = $('#iconsOverlay')
|
2976 |
+
, $iconsOverlayTransparency = $('#iconsOverlayTransparency')
|
2977 |
+
, $iconsOverlayColor = $('#iconsOverlayColor')
|
2978 |
+
, $figure = $preview.find('.grid-gallery-caption')
|
2979 |
+
// when use Icons and Captions then added 2nd block for effects
|
2980 |
+
, $figureNewCaptionBlock = $figure.find('.sggCcBlockAfter')
|
2981 |
+
, $figureIconsBlock = $figure.find('.sggFigCaptionIconsEntry')
|
2982 |
+
, $figureCaptionBlock = $figure.find('.sggFigcaptionCaptionWrapper')
|
2983 |
+
, $figcaptionBlock = $figure.find('figcaption')
|
2984 |
+
, effectCode = $('#overlayEffect').val()
|
2985 |
+
, previewInited = false
|
2986 |
+
, selfIp = this
|
2987 |
+
;
|
2988 |
+
if(!captBuilderEnabled) {
|
2989 |
+
if(captionEnabled && iconsEnabled) {
|
2990 |
+
|
2991 |
+
if(['icons-sodium-left', 'icons-sodium-top'].indexOf(effectCode) != -1) {
|
2992 |
+
// additional panel in figure
|
2993 |
+
$figureNewCaptionBlock.removeClass('ggSettingsDisplNone');
|
2994 |
+
$figureIconsBlock.removeClass('ggSettingsDisplNone');
|
2995 |
+
$figureCaptionBlock.addClass('ggSettingsDisplNone');
|
2996 |
+
|
2997 |
+
var iconSetts = this.getCssParamsForIcons(false)
|
2998 |
+
, oldClassObjArr = this.findClassByStr($figureNewCaptionBlock, 'caption-with-');
|
2999 |
+
selfIp.setIconParams($figureIconsBlock, iconSetts);
|
3000 |
+
|
3001 |
+
if(!selfIp.isInitSimpleIcons) {
|
3002 |
+
selfIp.initSimpleIcons();
|
3003 |
+
selfIp.isInitSimpleIcons = 1;
|
3004 |
+
}
|
3005 |
+
if(!selfIp.isInitSimpleOverlay) {
|
3006 |
+
selfIp.initSimpleOverlay($figcaptionBlock);
|
3007 |
+
selfIp.isInitSimpleOverlay = 1;
|
3008 |
+
}
|
3009 |
+
|
3010 |
+
// first init BgColor
|
3011 |
+
selfIp.setSimpleOverlay($figcaptionBlock, {
|
3012 |
+
'overlayIsShowing': $iconsOverlayIsShowed.val(),
|
3013 |
+
'overlayColor': $iconsOverlayColor.val(),
|
3014 |
+
'overlayTransparency': $iconsOverlayTransparency.val(),
|
3015 |
+
});
|
3016 |
+
// remove old class and set new
|
3017 |
+
for(var indTmpInd = 0; indTmpInd < oldClassObjArr.length; indTmpInd++) {
|
3018 |
+
$figureNewCaptionBlock.removeClass(oldClassObjArr[indTmpInd]);
|
3019 |
+
}
|
3020 |
+
$figureNewCaptionBlock.addClass('caption-with-' + effectCode);
|
3021 |
+
previewInited = true;
|
3022 |
+
} else {
|
3023 |
+
$figureNewCaptionBlock.addClass('ggSettingsDisplNone');
|
3024 |
+
$figureIconsBlock.addClass('ggSettingsDisplNone');
|
3025 |
+
$figureCaptionBlock.removeClass('ggSettingsDisplNone');
|
3026 |
+
}
|
3027 |
+
} else {
|
3028 |
+
$figureNewCaptionBlock.addClass('ggSettingsDisplNone');
|
3029 |
+
$figureIconsBlock.addClass('ggSettingsDisplNone');
|
3030 |
+
$figureCaptionBlock.removeClass('ggSettingsDisplNone');
|
3031 |
+
$figcaptionBlock.show();
|
3032 |
+
$figcaptionBlock.removeClass('ggSettingsTop0');
|
3033 |
+
if(captionEnabled) {
|
3034 |
+
|
3035 |
+
} else if(iconsEnabled) {
|
3036 |
+
$figureIconsBlock.removeClass('ggSettingsDisplNone');
|
3037 |
+
$figureCaptionBlock.addClass('ggSettingsDisplNone');
|
3038 |
+
$figcaptionBlock.addClass('ggSettingsTop0');
|
3039 |
+
// set bg
|
3040 |
+
selfIp.setSimpleOverlay($figcaptionBlock, {
|
3041 |
+
'overlayIsShowing': $iconsOverlayIsShowed.val(),
|
3042 |
+
'overlayColor': $iconsOverlayColor.val(),
|
3043 |
+
'overlayTransparency': $iconsOverlayTransparency.val(),
|
3044 |
+
});
|
3045 |
+
} else {
|
3046 |
+
$figcaptionBlock.hide();
|
3047 |
+
}
|
3048 |
+
}
|
3049 |
+
}
|
3050 |
+
$('input[name="icons[enabled]"]').off('ifChanged').on('ifChanged', function(event) {
|
3051 |
+
// runned twice
|
3052 |
+
var $checkedElem = $('input[name="icons[enabled]"]:checked');
|
3053 |
+
if($checkedElem.length) {
|
3054 |
+
selfIp.initCaptionsAndIcons();
|
3055 |
+
}
|
3056 |
+
});
|
3057 |
+
return previewInited;
|
3058 |
+
});
|
3059 |
+
|
3060 |
+
ImagePreview.prototype.init = (function () {
|
3061 |
+
var selfIp = this;
|
3062 |
+
//this.$window.draggable();
|
3063 |
+
this.initBorder();
|
3064 |
+
this.initShadow();
|
3065 |
+
this.initMouseShadow();
|
3066 |
+
this.initOverlayShadow();
|
3067 |
+
this.initSharedPropsForIcons();
|
3068 |
|
3069 |
this.previewSettingsKeys = {};
|
3070 |
this.objectsData = new sggDataSelectorsCache();
|
3071 |
this.objectsData.init({
|
3072 |
'keys': this.previewSettingsKeys,
|
3073 |
});
|
|
|
3074 |
|
3075 |
+
// ???
|
3076 |
+
this.initCaption();
|
3077 |
+
this.initCaptionEffects();
|
3078 |
+
|
3079 |
+
this.initCaptionsAndIcons();
|
|
|
|
|
|
|
|
|
|
|
3080 |
});
|
3081 |
|
3082 |
ImagePreview.prototype.captionCalculations = (function() {
|
3149 |
} else {
|
3150 |
// get preview figure params
|
3151 |
var figureWithStyle = $("#preview figure.grid-gallery-caption")
|
3152 |
+
, imageStyleObj = self.getCssFromString(figureWithStyle.find('img').attr('style'));
|
3153 |
// remove image size properties
|
3154 |
if(imageStyleObj['height']) {
|
3155 |
delete imageStyleObj['height'];
|
3201 |
if ($(this).data('grid-gallery-type') == 'polaroid' &&
|
3202 |
$(this).closest('#preview').length > 0) {
|
3203 |
|
3204 |
+
var $img = $(this).find('img')
|
3205 |
+
, $galleryType = $('select[name="area[grid]"]')
|
3206 |
+
, $imgGalleryWidth = $('input[name="area[photo_width]"]')
|
3207 |
+
, $imgGalleryHeight = $('input[name="area[photo_height]"]')
|
3208 |
+
, realImgHeight = $img[0].naturalHeight
|
3209 |
+
, realImgWidth = $img[0].naturalWidth
|
3210 |
+
, scaleRatio = realImgWidth / realImgHeight
|
3211 |
+
, frameWidth = parseInt($('.caption-type[data-gg-cb-type="captions-icons"] [name="thumbnail[overlay][polaroidFrameWidth]"]').val())
|
3212 |
+
, $figcaption = $(this).find('figcaption')
|
3213 |
+
, $polaroidWrapper = $('.polaroid-bg-wrap')
|
3214 |
+
, imageWidth
|
3215 |
+
, imageHeight
|
3216 |
+
;
|
3217 |
+
|
3218 |
+
if($galleryType.val() == 2) {
|
3219 |
+
// only image height
|
3220 |
+
//imageHeight = parseInt($polaroidWrapper.outerHeight());
|
3221 |
+
//imageWidth = imageHeight * scaleRatio;
|
3222 |
+
//// cal width with border
|
3223 |
+
//imageWidth = imageWidth - (2*frameWidth);
|
3224 |
+
//imageHeight = imageWidth/scaleRatio;
|
3225 |
+
imageWidth = parseInt($polaroidWrapper.outerWidth()) - (frameWidth*2);
|
3226 |
+
imageHeight = imageWidth / scaleRatio;
|
3227 |
+
} else {
|
3228 |
+
imageWidth = parseInt($polaroidWrapper.outerWidth()) - (frameWidth*2);
|
3229 |
+
imageHeight = imageWidth / scaleRatio;
|
3230 |
}
|
3231 |
|
|
|
|
|
|
|
3232 |
$img[0].style.setProperty('width', imageWidth + 'px', 'important');
|
3233 |
$img[0].style.setProperty('height', imageHeight + 'px', 'important');
|
3234 |
$img[0].style.setProperty('margin', '0 auto', 'important');
|
3358 |
|
3359 |
// Init Caption: run only on One time
|
3360 |
$('[name="thumbnail[overlay][enabled]"]:checked').trigger('change');
|
3361 |
+
setTimeout(function() {
|
3362 |
+
$('input[name="icons[enabled]"]:checked').trigger('ifChanged');
|
3363 |
+
}, 100);
|
3364 |
});
|
3365 |
|
3366 |
/* NOW its unusable Code created for mosaic[images][count]
|
src/GridGallery/Galleries/configs/presets.php
CHANGED
@@ -2,14 +2,14 @@
|
|
2 |
|
3 |
return array(
|
4 |
'gallery_presets' => array(
|
5 |
-
1 => 'a:26:{s:5:"title";s:11:"new_preset1";s:12:"previewImage";s:0:"";s:4:"sort";a:2:{s:6:"sortto";s:0:"";s:6:"sortby";s:0:"";}s:7:"plugins";a:1:{s:10:"membership";a:1:{s:6:"enable";s:0:"";}}s:4:"area";a:10:{s:4:"grid";s:1:"0";s:8:"position";s:1:"1";s:8:"distance";s:1:"5";s:5:"width";s:3:"100";s:10:"width_unit";s:1:"1";s:7:"padding";s:1:"0";s:11:"photo_width";s:3:"215";s:16:"photo_width_unit";s:1:"0";s:12:"photo_height";s:3:"215";s:17:"photo_height_unit";s:1:"0";}s:7:"general";a:2:{s:7:"columns";a:1:{s:6:"number";s:1:"3";}s:17:"responsiveColumns";a:3:{s:7:"desktop";a:2:{s:5:"width";s:4:"1200";s:7:"columns";s:1:"3";}s:6:"tablet";a:2:{s:5:"width";s:3:"768";s:7:"columns";s:1:"3";}s:6:"mobile";a:2:{s:5:"width";s:3:"320";s:7:"columns";s:1:"3";}}}s:9:"thumbnail";a:7:{s:6:"border";a:5:{s:6:"radius";s:1:"0";s:11:"radius_unit";s:1:"0";s:4:"type";s:4:"none";s:5:"color";s:7:"#fefefe";s:5:"width";s:2:"10";}s:11:"cropQuality";s:3:"100";s:6:"shadow";a:5:{s:7:"overlay";s:1:"0";s:5:"color";s:7:"#000000";s:4:"blur";s:1:"5";s:1:"x";s:1:"2";s:1:"y";s:1:"4";}s:7:"overlay";a:16:{s:10:"text_align";s:1:"2";s:8:"position";s:0:"";s:7:"enabled";s:4:"true";s:10:"background";s:7:"#6f0000";s:12:"transparency";s:1:"5";s:6:"effect";s:16:"quarter-slide-up";s:18:"imageOnHoverEnable";s:1:"0";s:12:"imageOnHover";s:0:"";s:8:"personal";s:5:"false";s:17:"polaroidAnimation";s:4:"true";s:18:"polaroidScattering";s:4:"true";s:18:"polaroidFrameWidth";s:2:"20";s:11:"font_family";s:7:"Default";s:9:"text_size";s:2:"14";s:14:"text_size_unit";s:1:"0";s:10:"foreground";s:7:"#ffffff";}s:7:"tooltip";s:5:"false";s:8:"isMobile";s:5:"false";s:22:"isDisableMobileCaption";s:5:"false";}s:13:"socialSharing";a:1:{s:7:"enabled";s:0:"";}s:8:"showMore";a:6:{s:7:"enabled";s:5:"false";s:12:"loadOnScroll";s:5:"false";s:10:"buttonText";s:
|
6 |
-
2 => 'a:26:{s:5:"title";s:12:"new-preset-2";s:12:"previewImage";s:0:"";s:4:"sort";a:2:{s:6:"sortto";s:0:"";s:6:"sortby";s:0:"";}s:7:"plugins";a:1:{s:10:"membership";a:1:{s:6:"enable";s:0:"";}}s:4:"area";a:8:{s:4:"grid";s:1:"1";s:8:"position";s:1:"1";s:8:"distance";s:1:"0";s:5:"width";s:3:"100";s:10:"width_unit";s:1:"1";s:7:"padding";s:1:"0";s:11:"photo_width";s:3:"215";s:16:"photo_width_unit";s:1:"0";}s:7:"general";a:2:{s:7:"columns";a:1:{s:6:"number";s:1:"3";}s:17:"responsiveColumns";a:3:{s:7:"desktop";a:2:{s:5:"width";s:4:"1200";s:7:"columns";s:1:"3";}s:6:"tablet";a:2:{s:5:"width";s:3:"768";s:7:"columns";s:1:"3";}s:6:"mobile";a:2:{s:5:"width";s:3:"320";s:7:"columns";s:1:"3";}}}s:9:"thumbnail";a:7:{s:6:"border";a:5:{s:6:"radius";s:1:"0";s:11:"radius_unit";s:1:"0";s:4:"type";s:4:"none";s:5:"color";s:5:"black";s:5:"width";s:1:"3";}s:11:"cropQuality";s:3:"100";s:6:"shadow";a:5:{s:7:"overlay";s:1:"0";s:5:"color";s:7:"#aaaaaa";s:4:"blur";s:2:"10";s:1:"x";s:1:"1";s:1:"y";s:1:"1";}s:7:"overlay";a:16:{s:10:"text_align";s:4:"left";s:8:"position";s:3:"top";s:7:"enabled";s:4:"true";s:10:"background";s:7:"#0a076d";s:12:"transparency";s:1:"5";s:6:"effect";s:19:"revolving-door-left";s:18:"imageOnHoverEnable";s:1:"0";s:12:"imageOnHover";s:0:"";s:8:"personal";s:5:"false";s:17:"polaroidAnimation";s:4:"true";s:18:"polaroidScattering";s:4:"true";s:18:"polaroidFrameWidth";s:2:"20";s:11:"font_family";s:7:"Default";s:9:"text_size";s:2:"14";s:14:"text_size_unit";s:1:"0";s:10:"foreground";s:7:"#ffffff";}s:7:"tooltip";s:5:"false";s:8:"isMobile";s:5:"false";s:22:"isDisableMobileCaption";s:5:"false";}s:13:"socialSharing";a:1:{s:7:"enabled";s:0:"";}s:8:"showMore";a:6:{s:7:"enabled";s:5:"false";s:12:"loadOnScroll";s:5:"false";s:10:"buttonText";s:
|
7 |
-
3 => 'a:26:{s:5:"title";s:12:"new-preset-3";s:12:"previewImage";s:0:"";s:4:"sort";a:2:{s:6:"sortto";s:0:"";s:6:"sortby";s:0:"";}s:7:"plugins";a:1:{s:10:"membership";a:1:{s:6:"enable";s:0:"";}}s:4:"area";a:10:{s:4:"grid";s:1:"0";s:8:"position";s:1:"1";s:8:"distance";s:1:"7";s:5:"width";s:3:"100";s:10:"width_unit";s:1:"1";s:7:"padding";s:1:"0";s:11:"photo_width";s:3:"215";s:16:"photo_width_unit";s:1:"0";s:12:"photo_height";s:3:"215";s:17:"photo_height_unit";s:1:"0";}s:7:"general";a:2:{s:7:"columns";a:1:{s:6:"number";s:1:"3";}s:17:"responsiveColumns";a:3:{s:7:"desktop";a:2:{s:5:"width";s:4:"1200";s:7:"columns";s:1:"3";}s:6:"tablet";a:2:{s:5:"width";s:3:"768";s:7:"columns";s:1:"3";}s:6:"mobile";a:2:{s:5:"width";s:3:"320";s:7:"columns";s:1:"3";}}}s:9:"thumbnail";a:7:{s:6:"border";a:5:{s:6:"radius";s:3:"100";s:11:"radius_unit";s:1:"1";s:4:"type";s:5:"solid";s:5:"color";s:7:"#ffffff";s:5:"width";s:1:"5";}s:11:"cropQuality";s:3:"100";s:6:"shadow";a:5:{s:7:"overlay";s:1:"0";s:5:"color";s:7:"#000000";s:4:"blur";s:2:"10";s:1:"x";s:1:"0";s:1:"y";s:1:"0";}s:7:"overlay";a:16:{s:10:"text_align";s:1:"2";s:8:"position";s:0:"";s:7:"enabled";s:4:"true";s:10:"background";s:7:"#3498db";s:12:"transparency";s:2:"10";s:6:"effect";s:6:"center";s:18:"imageOnHoverEnable";s:1:"0";s:12:"imageOnHover";s:0:"";s:8:"personal";s:5:"false";s:17:"polaroidAnimation";s:4:"true";s:18:"polaroidScattering";s:4:"true";s:18:"polaroidFrameWidth";s:2:"20";s:11:"font_family";s:7:"Default";s:9:"text_size";s:2:"14";s:14:"text_size_unit";s:1:"0";s:10:"foreground";s:7:"#ffffff";}s:7:"tooltip";s:5:"false";s:8:"isMobile";s:5:"false";s:22:"isDisableMobileCaption";s:5:"false";}s:13:"socialSharing";a:1:{s:7:"enabled";s:0:"";}s:8:"showMore";a:6:{s:7:"enabled";s:5:"false";s:12:"loadOnScroll";s:5:"false";s:10:"buttonText";s:
|
8 |
-
4 => 'a:26:{s:5:"title";s:12:"new preset 4";s:12:"previewImage";s:0:"";s:4:"sort";a:2:{s:6:"sortto";s:0:"";s:6:"sortby";s:0:"";}s:7:"plugins";a:1:{s:10:"membership";a:1:{s:6:"enable";s:0:"";}}s:4:"area";a:8:{s:4:"grid";s:1:"2";s:8:"position";s:1:"1";s:8:"distance";s:1:"5";s:5:"width";s:3:"100";s:10:"width_unit";s:1:"1";s:7:"padding";s:1:"0";s:12:"photo_height";s:3:"215";s:17:"photo_height_unit";s:1:"0";}s:7:"general";a:2:{s:7:"columns";a:1:{s:6:"number";s:1:"3";}s:17:"responsiveColumns";a:3:{s:7:"desktop";a:2:{s:5:"width";s:4:"1200";s:7:"columns";s:1:"3";}s:6:"tablet";a:2:{s:5:"width";s:3:"768";s:7:"columns";s:1:"3";}s:6:"mobile";a:2:{s:5:"width";s:3:"320";s:7:"columns";s:1:"3";}}}s:9:"thumbnail";a:7:{s:6:"border";a:5:{s:6:"radius";s:2:"20";s:11:"radius_unit";s:1:"0";s:4:"type";s:4:"none";s:5:"color";s:5:"black";s:5:"width";s:1:"3";}s:11:"cropQuality";s:3:"100";s:6:"shadow";a:5:{s:7:"overlay";s:1:"0";s:5:"color";s:7:"#000000";s:4:"blur";s:1:"5";s:1:"x";s:1:"2";s:1:"y";s:1:"4";}s:7:"overlay";a:16:{s:10:"text_align";s:1:"2";s:8:"position";s:0:"";s:7:"enabled";s:4:"true";s:10:"background";s:7:"#0c0000";s:12:"transparency";s:1:"5";s:6:"effect";s:16:"quarter-two-step";s:18:"imageOnHoverEnable";s:1:"0";s:12:"imageOnHover";s:0:"";s:8:"personal";s:5:"false";s:17:"polaroidAnimation";s:4:"true";s:18:"polaroidScattering";s:4:"true";s:18:"polaroidFrameWidth";s:2:"20";s:11:"font_family";s:7:"Default";s:9:"text_size";s:2:"14";s:14:"text_size_unit";s:1:"0";s:10:"foreground";s:7:"#ffffff";}s:7:"tooltip";s:5:"false";s:8:"isMobile";s:5:"false";s:22:"isDisableMobileCaption";s:5:"false";}s:13:"socialSharing";a:1:{s:7:"enabled";s:0:"";}s:8:"showMore";a:6:{s:7:"enabled";s:5:"false";s:12:"loadOnScroll";s:5:"false";s:10:"buttonText";s:
|
9 |
-
5 => 'a:26:{s:5:"title";s:12:"new-preset-5";s:12:"previewImage";s:0:"";s:4:"sort";a:2:{s:6:"sortto";s:0:"";s:6:"sortby";s:0:"";}s:7:"plugins";a:1:{s:10:"membership";a:1:{s:6:"enable";s:0:"";}}s:4:"area";a:10:{s:4:"grid";s:1:"0";s:8:"position";s:1:"1";s:8:"distance";s:1:"5";s:5:"width";s:3:"100";s:10:"width_unit";s:1:"1";s:7:"padding";s:1:"0";s:11:"photo_width";s:3:"215";s:16:"photo_width_unit";s:1:"0";s:12:"photo_height";s:3:"215";s:17:"photo_height_unit";s:1:"0";}s:7:"general";a:2:{s:7:"columns";a:1:{s:6:"number";s:1:"3";}s:17:"responsiveColumns";a:3:{s:7:"desktop";a:2:{s:5:"width";s:4:"1200";s:7:"columns";s:1:"3";}s:6:"tablet";a:2:{s:5:"width";s:3:"768";s:7:"columns";s:1:"3";}s:6:"mobile";a:2:{s:5:"width";s:3:"320";s:7:"columns";s:1:"3";}}}s:9:"thumbnail";a:7:{s:6:"border";a:5:{s:6:"radius";s:1:"0";s:11:"radius_unit";s:1:"0";s:4:"type";s:4:"none";s:5:"color";s:7:"#fefefe";s:5:"width";s:1:"0";}s:11:"cropQuality";s:3:"100";s:6:"shadow";a:5:{s:7:"overlay";s:1:"0";s:5:"color";s:7:"#aaaaaa";s:4:"blur";s:2:"10";s:1:"x";s:1:"1";s:1:"y";s:1:"1";}s:7:"overlay";a:17:{s:10:"text_align";s:1:"2";s:8:"position";s:0:"";s:7:"enabled";s:4:"true";s:10:"background";s:7:"#ffffff";s:12:"transparency";s:1:"4";s:6:"effect";s:16:"quarter-slide-up";s:18:"imageOnHoverEnable";s:1:"0";s:12:"imageOnHover";s:0:"";s:8:"personal";s:5:"false";s:17:"polaroidAnimation";s:4:"true";s:18:"polaroidScattering";s:4:"true";s:18:"polaroidFrameWidth";s:2:"20";s:11:"font_family";s:7:"Default";s:9:"text_size";s:2:"12";s:14:"text_size_unit";s:1:"0";s:10:"foreground";s:7:"#ffffff";s:9:"fontStyle";a:1:{i:0;s:4:"bold";}}s:7:"tooltip";s:5:"false";s:8:"isMobile";s:5:"false";s:22:"isDisableMobileCaption";s:5:"false";}s:13:"socialSharing";a:1:{s:7:"enabled";s:0:"";}s:8:"showMore";a:6:{s:7:"enabled";s:5:"false";s:12:"loadOnScroll";s:5:"false";s:10:"buttonText";s:
|
10 |
6 => 'a:14:{s:5:"title";s:0:"";s:4:"area";a:8:{s:4:"grid";s:1:"0";s:8:"distance";s:1:"5";s:5:"width";s:2:"75";s:10:"width_unit";s:1:"1";s:11:"photo_width";s:3:"250";s:16:"photo_width_unit";s:1:"0";s:12:"photo_height";s:3:"200";s:17:"photo_height_unit";s:1:"0";}s:9:"thumbnail";a:3:{s:6:"border";a:5:{s:6:"radius";s:2:"30";s:11:"radius_unit";s:1:"0";s:4:"type";s:4:"none";s:5:"color";s:7:"#fefefe";s:5:"width";s:1:"0";}s:6:"shadow";a:5:{s:7:"overlay";s:1:"0";s:5:"color";s:7:"#aaaaaa";s:4:"blur";s:2:"10";s:1:"x";s:1:"1";s:1:"y";s:1:"1";}s:7:"overlay";a:8:{s:7:"enabled";s:4:"true";s:6:"effect";s:14:"quarter-appear";s:10:"background";s:7:"#3498db";s:10:"foreground";s:7:"#ecf0f1";s:12:"transparency";s:1:"5";s:9:"text_size";s:2:"12";s:14:"text_size_unit";s:1:"0";s:10:"text_align";s:1:"3";}}s:11:"border-type";s:5:"Types";s:10:"use_shadow";s:1:"0";s:12:"mouse_shadow";s:1:"0";s:3:"box";a:6:{s:4:"type";s:1:"0";s:5:"theme";s:7:"theme_1";s:10:"transition";s:7:"elastic";s:9:"slideshow";s:5:"false";s:14:"slideshowSpeed";s:4:"2500";s:13:"slideshowAuto";s:5:"false";}s:5:"posts";a:7:{s:6:"enable";s:1:"1";s:5:"style";s:1:"2";s:7:"current";s:3:"233";s:6:"author";s:1:"1";s:4:"date";s:1:"1";s:8:"contents";s:1:"1";s:10:"categories";s:1:"1";}s:5:"pages";a:1:{s:7:"current";s:2:"33";}s:5:"icons";a:11:{s:7:"enabled";s:5:"false";s:6:"effect";s:17:"hi-icon-effect-5d";s:5:"color";s:7:"#ffffff";s:11:"hover_color";s:7:"#ffffff";s:10:"background";s:7:"#1e73be";s:16:"background_hover";s:7:"#1e73be";s:4:"size";s:2:"16";s:6:"margin";s:1:"5";s:15:"overlay_enabled";s:4:"true";s:13:"overlay_color";s:7:"#3498db";s:20:"overlay_transparency";s:1:"5";}s:10:"categories";a:13:{s:7:"enabled";s:5:"false";s:8:"position";s:3:"top";s:5:"align";s:6:"center";s:6:"preset";s:1:"0";s:6:"nav_bg";s:7:"#1e73be";s:11:"hide_nav_bg";s:2:"on";s:7:"text_bg";s:7:"#82a0bf";s:12:"hide_text_bg";s:2:"on";s:10:"text_color";s:7:"#1e73be";s:7:"padding";a:2:{s:4:"vert";s:1:"3";s:3:"hor";s:2:"10";}s:11:"font_weight";s:6:"normal";s:9:"font_size";s:2:"12";s:6:"border";a:5:{s:5:"width";s:1:"1";s:5:"style";s:5:"solid";s:5:"color";s:7:"#1e73be";s:6:"radius";s:1:"3";s:11:"radius_unit";s:2:"px";}}s:9:"quicksand";a:2:{s:7:"enabled";s:1:"0";s:8:"duration";s:0:"";}s:10:"pagination";a:10:{s:7:"enabled";s:4:"true";s:8:"per_page";s:1:"6";s:3:"pos";s:3:"top";s:5:"align";s:5:"right";s:6:"preset";s:1:"5";s:9:"container";a:2:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";}s:4:"text";a:3:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";s:5:"color";s:7:"#1e73be";}s:7:"padding";a:2:{s:8:"vertical";s:1:"6";s:10:"horizontal";s:2:"10";}s:4:"font";a:2:{s:6:"weight";s:6:"normal";s:4:"size";s:2:"10";}s:6:"border";a:5:{s:5:"width";s:1:"1";s:4:"type";s:5:"solid";s:5:"color";s:7:"#1e73be";s:6:"radius";s:1:"0";s:11:"radius_unit";s:2:"px";}}s:12:"previewImage";a:4:{i:0;s:85:"http://dev.supsystic.com/wp-content/uploads/2015/01/113917523_natyurmortuy_foto_2.jpg";i:1;i:280;i:2;i:420;i:3;b:0;}}',
|
11 |
7 => 'a:14:{s:5:"title";s:0:"";s:4:"area";a:8:{s:4:"grid";s:1:"0";s:8:"distance";s:2:"10";s:5:"width";s:3:"100";s:10:"width_unit";s:1:"1";s:11:"photo_width";s:3:"350";s:16:"photo_width_unit";s:1:"0";s:12:"photo_height";s:3:"200";s:17:"photo_height_unit";s:1:"0";}s:9:"thumbnail";a:3:{s:6:"border";a:5:{s:6:"radius";s:1:"0";s:11:"radius_unit";s:1:"0";s:4:"type";s:4:"none";s:5:"color";s:7:"#fefefe";s:5:"width";s:2:"10";}s:6:"shadow";a:5:{s:7:"overlay";s:1:"0";s:5:"color";s:7:"#c0c0c0";s:4:"blur";s:1:"3";s:1:"x";s:1:"4";s:1:"y";s:2:"-4";}s:7:"overlay";a:8:{s:7:"enabled";s:4:"true";s:6:"effect";s:16:"quarter-slide-up";s:10:"background";s:7:"#6f0000";s:10:"foreground";s:7:"#ffffff";s:12:"transparency";s:1:"5";s:9:"text_size";s:2:"14";s:14:"text_size_unit";s:1:"0";s:10:"text_align";s:1:"2";}}s:11:"border-type";s:5:"Types";s:10:"use_shadow";s:1:"1";s:12:"mouse_shadow";s:1:"0";s:3:"box";a:6:{s:4:"type";s:1:"1";s:5:"theme";s:7:"theme_6";s:10:"transition";s:4:"fade";s:9:"slideshow";s:5:"false";s:14:"slideshowSpeed";s:4:"2500";s:13:"slideshowAuto";s:5:"false";}s:5:"posts";a:7:{s:6:"enable";s:1:"1";s:5:"style";s:1:"5";s:7:"current";s:4:"1999";s:6:"author";s:1:"1";s:4:"date";s:1:"1";s:8:"contents";s:1:"0";s:10:"categories";s:1:"0";}s:5:"pages";a:1:{s:7:"current";s:2:"33";}s:5:"icons";a:11:{s:7:"enabled";s:5:"false";s:6:"effect";s:17:"hi-icon-effect-5d";s:5:"color";s:7:"#ffffff";s:11:"hover_color";s:7:"#ffffff";s:10:"background";s:7:"#1e73be";s:16:"background_hover";s:7:"#1e73be";s:4:"size";s:2:"16";s:6:"margin";s:1:"5";s:15:"overlay_enabled";s:4:"true";s:13:"overlay_color";s:7:"#3498db";s:20:"overlay_transparency";s:1:"5";}s:10:"categories";a:13:{s:7:"enabled";s:5:"false";s:8:"position";s:3:"top";s:5:"align";s:6:"center";s:6:"preset";s:1:"0";s:6:"nav_bg";s:7:"#1e73be";s:11:"hide_nav_bg";s:2:"on";s:7:"text_bg";s:7:"#82a0bf";s:12:"hide_text_bg";s:2:"on";s:10:"text_color";s:7:"#1e73be";s:7:"padding";a:2:{s:4:"vert";s:1:"3";s:3:"hor";s:2:"10";}s:11:"font_weight";s:6:"normal";s:9:"font_size";s:2:"12";s:6:"border";a:5:{s:5:"width";s:1:"1";s:5:"style";s:5:"solid";s:5:"color";s:7:"#1e73be";s:6:"radius";s:1:"3";s:11:"radius_unit";s:2:"px";}}s:9:"quicksand";a:2:{s:7:"enabled";s:1:"0";s:8:"duration";s:0:"";}s:10:"pagination";a:10:{s:7:"enabled";s:5:"false";s:8:"per_page";s:2:"10";s:3:"pos";s:3:"top";s:5:"align";s:4:"left";s:6:"preset";s:1:"0";s:9:"container";a:2:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";}s:4:"text";a:3:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";s:5:"color";s:7:"#0a0a0a";}s:7:"padding";a:2:{s:8:"vertical";s:1:"4";s:10:"horizontal";s:1:"8";}s:4:"font";a:2:{s:6:"weight";s:6:"normal";s:4:"size";s:2:"13";}s:6:"border";a:5:{s:5:"width";s:1:"1";s:4:"type";s:5:"solid";s:5:"color";s:7:"#999999";s:6:"radius";s:1:"4";s:11:"radius_unit";s:2:"px";}}s:12:"previewImage";a:4:{i:0;s:85:"http://dev.supsystic.com/wp-content/uploads/2015/01/113917523_natyurmortuy_foto_2.jpg";i:1;i:280;i:2;i:420;i:3;b:0;}}',
|
12 |
8 => 'a:14:{s:5:"title";s:0:"";s:4:"area";a:8:{s:4:"grid";s:1:"0";s:8:"distance";s:2:"10";s:5:"width";s:3:"100";s:10:"width_unit";s:1:"1";s:11:"photo_width";s:3:"500";s:16:"photo_width_unit";s:1:"0";s:12:"photo_height";s:3:"200";s:17:"photo_height_unit";s:1:"0";}s:9:"thumbnail";a:3:{s:6:"border";a:5:{s:6:"radius";s:1:"0";s:11:"radius_unit";s:1:"0";s:4:"type";s:4:"none";s:5:"color";s:7:"#fefefe";s:5:"width";s:1:"0";}s:6:"shadow";a:5:{s:7:"overlay";s:1:"0";s:5:"color";s:7:"#aaaaaa";s:4:"blur";s:2:"10";s:1:"x";s:1:"1";s:1:"y";s:1:"1";}s:7:"overlay";a:8:{s:7:"enabled";s:4:"true";s:6:"effect";s:14:"quarter-appear";s:10:"background";s:7:"#3498db";s:10:"foreground";s:7:"#ecf0f1";s:12:"transparency";s:1:"5";s:9:"text_size";s:2:"12";s:14:"text_size_unit";s:1:"0";s:10:"text_align";s:1:"3";}}s:11:"border-type";s:5:"Types";s:10:"use_shadow";s:1:"0";s:12:"mouse_shadow";s:1:"0";s:3:"box";a:6:{s:4:"type";s:1:"0";s:5:"theme";s:7:"theme_1";s:10:"transition";s:7:"elastic";s:9:"slideshow";s:5:"false";s:14:"slideshowSpeed";s:4:"2500";s:13:"slideshowAuto";s:5:"false";}s:5:"posts";a:7:{s:6:"enable";s:1:"1";s:5:"style";s:1:"3";s:7:"current";s:3:"233";s:6:"author";s:1:"1";s:4:"date";s:1:"1";s:8:"contents";s:1:"1";s:10:"categories";s:1:"1";}s:5:"pages";a:1:{s:7:"current";s:2:"33";}s:5:"icons";a:11:{s:7:"enabled";s:5:"false";s:6:"effect";s:17:"hi-icon-effect-5d";s:5:"color";s:7:"#ffffff";s:11:"hover_color";s:7:"#ffffff";s:10:"background";s:7:"#1e73be";s:16:"background_hover";s:7:"#1e73be";s:4:"size";s:2:"16";s:6:"margin";s:1:"5";s:15:"overlay_enabled";s:4:"true";s:13:"overlay_color";s:7:"#3498db";s:20:"overlay_transparency";s:1:"5";}s:10:"categories";a:13:{s:7:"enabled";s:5:"false";s:8:"position";s:3:"top";s:5:"align";s:6:"center";s:6:"preset";s:1:"0";s:6:"nav_bg";s:7:"#1e73be";s:11:"hide_nav_bg";s:2:"on";s:7:"text_bg";s:7:"#82a0bf";s:12:"hide_text_bg";s:2:"on";s:10:"text_color";s:7:"#1e73be";s:7:"padding";a:2:{s:4:"vert";s:1:"3";s:3:"hor";s:2:"10";}s:11:"font_weight";s:6:"normal";s:9:"font_size";s:2:"12";s:6:"border";a:5:{s:5:"width";s:1:"1";s:5:"style";s:5:"solid";s:5:"color";s:7:"#1e73be";s:6:"radius";s:1:"3";s:11:"radius_unit";s:2:"px";}}s:9:"quicksand";a:2:{s:7:"enabled";s:1:"0";s:8:"duration";s:0:"";}s:10:"pagination";a:10:{s:7:"enabled";s:5:"false";s:8:"per_page";s:1:"6";s:3:"pos";s:3:"top";s:5:"align";s:5:"right";s:6:"preset";s:1:"5";s:9:"container";a:2:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";}s:4:"text";a:3:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";s:5:"color";s:7:"#1e73be";}s:7:"padding";a:2:{s:8:"vertical";s:1:"6";s:10:"horizontal";s:2:"10";}s:4:"font";a:2:{s:6:"weight";s:6:"normal";s:4:"size";s:2:"10";}s:6:"border";a:5:{s:5:"width";s:1:"1";s:4:"type";s:5:"solid";s:5:"color";s:7:"#1e73be";s:6:"radius";s:1:"0";s:11:"radius_unit";s:2:"px";}}s:12:"previewImage";a:4:{i:0;s:85:"http://dev.supsystic.com/wp-content/uploads/2015/01/113917523_natyurmortuy_foto_2.jpg";i:1;i:280;i:2;i:420;i:3;b:0;}}',
|
13 |
-
9 => 'a:26:{s:5:"title";s:6:"mosaic";s:12:"previewImage";s:0:"";s:4:"sort";a:2:{s:6:"sortto";s:0:"";s:6:"sortby";s:0:"";}s:7:"plugins";a:1:{s:10:"membership";a:1:{s:6:"enable";s:0:"";}}s:4:"area";a:9:{s:4:"grid";s:1:"4";s:8:"position";s:1:"1";s:8:"distance";s:1:"5";s:5:"width";s:3:"100";s:10:"width_unit";s:1:"1";s:7:"padding";s:1:"0";s:11:"photo_width";s:3:"215";s:16:"photo_width_unit";s:1:"0";s:12:"ggMosaicType";a:7:{s:10:"fontFamily";s:7:"Default";s:8:"fontSize";s:2:"43";s:12:"fontSizeUnit";s:1:"0";s:10:"foreground";s:4:"#fff";s:9:"fontStyle";a:1:{i:0;s:4:"bold";}s:7:"bgColor";s:4:"#000";s:19:"bgColorTransparency";s:1:"4";}}s:7:"general";a:2:{s:7:"columns";a:1:{s:6:"number";s:1:"3";}s:17:"responsiveColumns";a:3:{s:7:"desktop";a:2:{s:5:"width";s:4:"1200";s:7:"columns";s:1:"3";}s:6:"tablet";a:2:{s:5:"width";s:3:"768";s:7:"columns";s:1:"3";}s:6:"mobile";a:2:{s:5:"width";s:3:"320";s:7:"columns";s:1:"3";}}}s:9:"thumbnail";a:7:{s:6:"border";a:5:{s:6:"radius";s:1:"0";s:11:"radius_unit";s:1:"0";s:4:"type";s:4:"none";s:5:"color";s:7:"#fefefe";s:5:"width";s:2:"10";}s:11:"cropQuality";s:3:"100";s:6:"shadow";a:5:{s:7:"overlay";s:1:"0";s:5:"color";s:7:"#000000";s:4:"blur";s:1:"5";s:1:"x";s:1:"2";s:1:"y";s:1:"4";}s:7:"overlay";a:16:{s:10:"text_align";s:1:"2";s:8:"position";s:0:"";s:7:"enabled";s:4:"true";s:10:"background";s:7:"#6f0000";s:12:"transparency";s:1:"5";s:6:"effect";s:16:"quarter-slide-up";s:18:"imageOnHoverEnable";s:1:"0";s:12:"imageOnHover";s:0:"";s:8:"personal";s:5:"false";s:17:"polaroidAnimation";s:4:"true";s:18:"polaroidScattering";s:4:"true";s:18:"polaroidFrameWidth";s:2:"20";s:11:"font_family";s:7:"Default";s:9:"text_size";s:2:"14";s:14:"text_size_unit";s:1:"0";s:10:"foreground";s:7:"#ffffff";}s:7:"tooltip";s:5:"false";s:8:"isMobile";s:5:"false";s:22:"isDisableMobileCaption";s:5:"false";}s:13:"socialSharing";a:1:{s:7:"enabled";s:0:"";}s:8:"showMore";a:6:{s:7:"enabled";s:5:"false";s:12:"loadOnScroll";s:5:"false";s:10:"buttonText";s:
|
14 |
),
|
15 |
);
|
2 |
|
3 |
return array(
|
4 |
'gallery_presets' => array(
|
5 |
+
1 => 'a:26:{s:5:"title";s:11:"new_preset1";s:12:"previewImage";s:0:"";s:4:"sort";a:2:{s:6:"sortto";s:0:"";s:6:"sortby";s:0:"";}s:7:"plugins";a:1:{s:10:"membership";a:1:{s:6:"enable";s:0:"";}}s:4:"area";a:10:{s:4:"grid";s:1:"0";s:8:"position";s:1:"1";s:8:"distance";s:1:"5";s:5:"width";s:3:"100";s:10:"width_unit";s:1:"1";s:7:"padding";s:1:"0";s:11:"photo_width";s:3:"215";s:16:"photo_width_unit";s:1:"0";s:12:"photo_height";s:3:"215";s:17:"photo_height_unit";s:1:"0";}s:7:"general";a:2:{s:7:"columns";a:1:{s:6:"number";s:1:"3";}s:17:"responsiveColumns";a:3:{s:7:"desktop";a:2:{s:5:"width";s:4:"1200";s:7:"columns";s:1:"3";}s:6:"tablet";a:2:{s:5:"width";s:3:"768";s:7:"columns";s:1:"3";}s:6:"mobile";a:2:{s:5:"width";s:3:"320";s:7:"columns";s:1:"3";}}}s:9:"thumbnail";a:7:{s:6:"border";a:5:{s:6:"radius";s:1:"0";s:11:"radius_unit";s:1:"0";s:4:"type";s:4:"none";s:5:"color";s:7:"#fefefe";s:5:"width";s:2:"10";}s:11:"cropQuality";s:3:"100";s:6:"shadow";a:5:{s:7:"overlay";s:1:"0";s:5:"color";s:7:"#000000";s:4:"blur";s:1:"5";s:1:"x";s:1:"2";s:1:"y";s:1:"4";}s:7:"overlay";a:16:{s:10:"text_align";s:1:"2";s:8:"position";s:0:"";s:7:"enabled";s:4:"true";s:10:"background";s:7:"#6f0000";s:12:"transparency";s:1:"5";s:6:"effect";s:16:"quarter-slide-up";s:18:"imageOnHoverEnable";s:1:"0";s:12:"imageOnHover";s:0:"";s:8:"personal";s:5:"false";s:17:"polaroidAnimation";s:4:"true";s:18:"polaroidScattering";s:4:"true";s:18:"polaroidFrameWidth";s:2:"20";s:11:"font_family";s:7:"Default";s:9:"text_size";s:2:"14";s:14:"text_size_unit";s:1:"0";s:10:"foreground";s:7:"#ffffff";}s:7:"tooltip";s:5:"false";s:8:"isMobile";s:5:"false";s:22:"isDisableMobileCaption";s:5:"false";}s:13:"socialSharing";a:1:{s:7:"enabled";s:0:"";}s:8:"showMore";a:6:{s:7:"enabled";s:5:"false";s:12:"loadOnScroll";s:5:"false";s:10:"buttonText";s:9:"Load More";s:11:"loadingText";s:10:"Loading...";s:12:"imagesAmount";s:2:"20";s:14:"showMoreAmount";s:2:"10";}s:16:"horizontalScroll";a:3:{s:7:"enabled";s:5:"false";s:5:"color";s:0:"";s:12:"transparency";s:2:"60";}s:11:"border-type";s:7:"Example";s:10:"use_shadow";s:1:"0";s:12:"mouse_shadow";s:1:"0";s:3:"box";a:13:{s:7:"enabled";s:4:"true";s:4:"type";s:1:"1";s:5:"theme";s:7:"theme_6";s:9:"imageText";s:16:"data-description";s:15:"linkedImageText";s:10:"data-title";s:10:"background";s:0:"";s:12:"transparency";s:2:"30";s:9:"slideshow";s:5:"false";s:14:"slideshowSpeed";s:4:"2500";s:14:"popupHoverStop";s:4:"true";s:13:"slideshowAuto";s:5:"false";s:10:"popupwidth";s:0:"";s:11:"popupheight";s:0:"";}s:5:"popup";a:1:{s:5:"video";a:4:{s:5:"width";s:3:"853";s:6:"height";s:3:"480";s:8:"autoplay";s:5:"false";s:5:"onEnd";s:1:"0";}}s:7:"preload";a:4:{s:7:"enabled";s:4:"true";s:10:"background";s:7:"#0073AA";s:9:"icon_name";s:7:"default";s:10:"icon_items";s:1:"0";}s:5:"posts";a:9:{s:6:"enable";s:1:"0";s:5:"style";s:1:"0";s:9:"autoposts";s:1:"0";s:15:"autopostsNumber";s:1:"5";s:7:"current";s:3:"671";s:6:"author";s:1:"0";s:4:"date";s:1:"0";s:8:"contents";s:1:"0";s:10:"categories";s:1:"0";}s:5:"pages";a:1:{s:7:"current";s:3:"655";}s:5:"icons";a:12:{s:7:"enabled";s:5:"false";s:13:"overlay_color";s:7:"#3498db";s:15:"overlay_enabled";s:4:"true";s:4:"size";s:2:"16";s:5:"color";s:7:"#ffffff";s:11:"hover_color";s:7:"#ffffff";s:20:"overlay_transparency";s:1:"5";s:10:"background";s:7:"#1e73be";s:16:"background_hover";s:7:"#1e73be";s:14:"bgTransparency";s:1:"0";s:6:"margin";s:1:"5";s:6:"effect";s:17:"hi-icon-effect-5d";}s:14:"captionBuilder";a:5:{s:10:"isOnceUsed";s:1:"1";s:10:"background";a:1:{s:6:"enable";s:1:"1";}s:5:"title";a:5:{s:6:"enable";s:1:"1";s:8:"position";s:13:"center_bottom";s:8:"paddings";a:4:{s:4:"left";s:2:"10";s:5:"right";s:2:"10";s:3:"top";s:2:"20";s:6:"bottom";s:1:"0";}s:7:"bgColor";s:0:"";s:19:"bgColorTransparency";s:1:"0";}s:11:"description";a:8:{s:8:"position";s:13:"center_center";s:8:"paddings";a:4:{s:4:"left";s:1:"0";s:5:"right";s:1:"0";s:3:"top";s:1:"0";s:6:"bottom";s:1:"0";}s:11:"font_family";s:7:"Default";s:9:"font_size";s:2:"14";s:14:"font_size_unit";s:1:"0";s:9:"fontColor";s:0:"";s:7:"bgColor";s:7:"#0c0c0c";s:19:"bgColorTransparency";s:1:"5";}s:5:"icons";a:7:{s:8:"position";s:10:"center_top";s:8:"paddings";a:4:{s:4:"left";s:1:"0";s:5:"right";s:1:"0";s:3:"top";s:1:"0";s:6:"bottom";s:1:"0";}s:21:"popupFontAwesomeClass";s:9:"fa-expand";s:21:"videoFontAwesomeClass";s:0:"";s:20:"linkFontAwesomeClass";s:0:"";s:7:"bgColor";s:0:"";s:19:"bgColorTransparency";s:1:"0";}}s:10:"categories";a:15:{s:6:"preset";s:1:"0";s:7:"enabled";s:5:"false";s:8:"position";s:3:"top";s:5:"align";s:6:"center";s:5:"order";a:1:{i:0;s:7:"__all__";}s:6:"nav_bg";s:7:"#1e73be";s:11:"hide_nav_bg";s:2:"on";s:7:"text_bg";s:7:"#82a0bf";s:12:"hide_text_bg";s:2:"on";s:10:"text_color";s:7:"#1e73be";s:11:"theme_color";s:3:"off";s:7:"padding";a:2:{s:4:"vert";s:1:"3";s:3:"hor";s:2:"10";}s:11:"font_weight";s:6:"normal";s:9:"font_size";s:2:"12";s:6:"border";a:5:{s:5:"width";s:1:"1";s:5:"style";s:5:"solid";s:5:"color";s:7:"#1e73be";s:6:"radius";s:1:"3";s:11:"radius_unit";s:2:"px";}}s:9:"quicksand";a:2:{s:7:"enabled";s:1:"0";s:8:"duration";s:4:"1800";}s:10:"pagination";a:10:{s:6:"preset";s:1:"0";s:7:"enabled";s:5:"false";s:8:"per_page";s:2:"10";s:3:"pos";s:3:"top";s:5:"align";s:4:"left";s:9:"container";a:2:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";}s:4:"text";a:4:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";s:5:"color";s:7:"#0a0a0a";s:10:"hide_color";s:3:"off";}s:7:"padding";a:2:{s:8:"vertical";s:1:"4";s:10:"horizontal";s:1:"8";}s:4:"font";a:2:{s:6:"weight";s:6:"normal";s:4:"size";s:2:"13";}s:6:"border";a:5:{s:5:"width";s:1:"1";s:4:"type";s:5:"solid";s:5:"color";s:7:"#999999";s:6:"radius";s:1:"4";s:11:"radius_unit";s:2:"px";}}s:9:"watermark";a:9:{s:7:"enabled";s:0:"";s:8:"show_for";s:1:"3";s:11:"all_img_sel";s:1:"1";s:4:"type";s:3:"img";s:3:"url";s:0:"";s:6:"margin";s:1:"0";s:8:"position";s:13:"center_center";s:6:"rotate";s:1:"0";s:12:"transparency";s:2:"50";}s:7:"buttons";a:12:{s:5:"class";s:0:"";s:5:"color";s:7:"#000000";s:15:"backgroundColor";s:0:"";s:10:"fontFamily";s:7:"Default";s:8:"fontSize";s:0:"";s:10:"fontWeight";s:6:"normal";s:8:"paddingV";s:1:"5";s:8:"paddingH";s:1:"8";s:11:"borderStyle";s:5:"solid";s:11:"borderWidth";s:1:"1";s:11:"borderColor";s:7:"#000000";s:12:"borderRadius";s:1:"2";}s:8:"lazyload";a:1:{s:7:"enabled";s:1:"1";}}',
|
6 |
+
2 => 'a:26:{s:5:"title";s:12:"new-preset-2";s:12:"previewImage";s:0:"";s:4:"sort";a:2:{s:6:"sortto";s:0:"";s:6:"sortby";s:0:"";}s:7:"plugins";a:1:{s:10:"membership";a:1:{s:6:"enable";s:0:"";}}s:4:"area";a:8:{s:4:"grid";s:1:"1";s:8:"position";s:1:"1";s:8:"distance";s:1:"0";s:5:"width";s:3:"100";s:10:"width_unit";s:1:"1";s:7:"padding";s:1:"0";s:11:"photo_width";s:3:"215";s:16:"photo_width_unit";s:1:"0";}s:7:"general";a:2:{s:7:"columns";a:1:{s:6:"number";s:1:"3";}s:17:"responsiveColumns";a:3:{s:7:"desktop";a:2:{s:5:"width";s:4:"1200";s:7:"columns";s:1:"3";}s:6:"tablet";a:2:{s:5:"width";s:3:"768";s:7:"columns";s:1:"3";}s:6:"mobile";a:2:{s:5:"width";s:3:"320";s:7:"columns";s:1:"3";}}}s:9:"thumbnail";a:7:{s:6:"border";a:5:{s:6:"radius";s:1:"0";s:11:"radius_unit";s:1:"0";s:4:"type";s:4:"none";s:5:"color";s:5:"black";s:5:"width";s:1:"3";}s:11:"cropQuality";s:3:"100";s:6:"shadow";a:5:{s:7:"overlay";s:1:"0";s:5:"color";s:7:"#aaaaaa";s:4:"blur";s:2:"10";s:1:"x";s:1:"1";s:1:"y";s:1:"1";}s:7:"overlay";a:16:{s:10:"text_align";s:4:"left";s:8:"position";s:3:"top";s:7:"enabled";s:4:"true";s:10:"background";s:7:"#0a076d";s:12:"transparency";s:1:"5";s:6:"effect";s:19:"revolving-door-left";s:18:"imageOnHoverEnable";s:1:"0";s:12:"imageOnHover";s:0:"";s:8:"personal";s:5:"false";s:17:"polaroidAnimation";s:4:"true";s:18:"polaroidScattering";s:4:"true";s:18:"polaroidFrameWidth";s:2:"20";s:11:"font_family";s:7:"Default";s:9:"text_size";s:2:"14";s:14:"text_size_unit";s:1:"0";s:10:"foreground";s:7:"#ffffff";}s:7:"tooltip";s:5:"false";s:8:"isMobile";s:5:"false";s:22:"isDisableMobileCaption";s:5:"false";}s:13:"socialSharing";a:1:{s:7:"enabled";s:0:"";}s:8:"showMore";a:6:{s:7:"enabled";s:5:"false";s:12:"loadOnScroll";s:5:"false";s:10:"buttonText";s:9:"Load More";s:11:"loadingText";s:10:"Loading...";s:12:"imagesAmount";s:2:"20";s:14:"showMoreAmount";s:2:"10";}s:16:"horizontalScroll";a:3:{s:7:"enabled";s:5:"false";s:5:"color";s:0:"";s:12:"transparency";s:2:"60";}s:11:"border-type";s:7:"Example";s:10:"use_shadow";s:1:"0";s:12:"mouse_shadow";s:1:"0";s:3:"box";a:13:{s:7:"enabled";s:4:"true";s:4:"type";s:1:"1";s:5:"theme";s:7:"theme_6";s:9:"imageText";s:12:"data-caption";s:15:"linkedImageText";s:10:"data-title";s:10:"background";s:0:"";s:12:"transparency";s:2:"30";s:9:"slideshow";s:5:"false";s:14:"slideshowSpeed";s:4:"2500";s:14:"popupHoverStop";s:4:"true";s:13:"slideshowAuto";s:5:"false";s:10:"popupwidth";s:0:"";s:11:"popupheight";s:0:"";}s:5:"popup";a:1:{s:5:"video";a:4:{s:5:"width";s:3:"853";s:6:"height";s:3:"480";s:8:"autoplay";s:5:"false";s:5:"onEnd";s:1:"0";}}s:7:"preload";a:4:{s:7:"enabled";s:4:"true";s:10:"background";s:7:"#0073AA";s:9:"icon_name";s:7:"default";s:10:"icon_items";s:1:"0";}s:5:"posts";a:9:{s:6:"enable";s:1:"0";s:5:"style";s:1:"0";s:9:"autoposts";s:1:"0";s:15:"autopostsNumber";s:1:"5";s:7:"current";s:3:"671";s:6:"author";s:1:"0";s:4:"date";s:1:"0";s:8:"contents";s:1:"0";s:10:"categories";s:1:"0";}s:5:"pages";a:1:{s:7:"current";s:3:"655";}s:5:"icons";a:12:{s:7:"enabled";s:5:"false";s:13:"overlay_color";s:7:"#3498db";s:15:"overlay_enabled";s:4:"true";s:4:"size";s:2:"16";s:5:"color";s:7:"#ffffff";s:11:"hover_color";s:7:"#ffffff";s:20:"overlay_transparency";s:1:"5";s:10:"background";s:7:"#1e73be";s:16:"background_hover";s:7:"#1e73be";s:14:"bgTransparency";s:1:"0";s:6:"margin";s:1:"5";s:6:"effect";s:17:"hi-icon-effect-5d";}s:14:"captionBuilder";a:5:{s:10:"isOnceUsed";s:1:"1";s:10:"background";a:1:{s:6:"enable";s:1:"1";}s:5:"title";a:5:{s:6:"enable";s:1:"1";s:8:"position";s:10:"center_top";s:8:"paddings";a:4:{s:4:"left";s:2:"10";s:5:"right";s:2:"10";s:3:"top";s:2:"10";s:6:"bottom";s:2:"10";}s:7:"bgColor";s:0:"";s:19:"bgColorTransparency";s:1:"0";}s:11:"description";a:8:{s:8:"position";s:13:"center_center";s:8:"paddings";a:4:{s:4:"left";s:1:"0";s:5:"right";s:1:"0";s:3:"top";s:1:"0";s:6:"bottom";s:1:"0";}s:11:"font_family";s:7:"Default";s:9:"font_size";s:2:"14";s:14:"font_size_unit";s:1:"0";s:9:"fontColor";s:0:"";s:7:"bgColor";s:0:"";s:19:"bgColorTransparency";s:1:"0";}s:5:"icons";a:7:{s:8:"position";s:13:"center_center";s:8:"paddings";a:4:{s:4:"left";s:1:"0";s:5:"right";s:1:"0";s:3:"top";s:1:"0";s:6:"bottom";s:1:"0";}s:21:"popupFontAwesomeClass";s:9:"fa-expand";s:21:"videoFontAwesomeClass";s:0:"";s:20:"linkFontAwesomeClass";s:0:"";s:7:"bgColor";s:0:"";s:19:"bgColorTransparency";s:1:"0";}}s:10:"categories";a:15:{s:6:"preset";s:1:"0";s:7:"enabled";s:5:"false";s:8:"position";s:3:"top";s:5:"align";s:6:"center";s:5:"order";a:1:{i:0;s:7:"__all__";}s:6:"nav_bg";s:7:"#1e73be";s:11:"hide_nav_bg";s:2:"on";s:7:"text_bg";s:7:"#82a0bf";s:12:"hide_text_bg";s:2:"on";s:10:"text_color";s:7:"#1e73be";s:11:"theme_color";s:3:"off";s:7:"padding";a:2:{s:4:"vert";s:1:"3";s:3:"hor";s:2:"10";}s:11:"font_weight";s:6:"normal";s:9:"font_size";s:2:"12";s:6:"border";a:5:{s:5:"width";s:1:"1";s:5:"style";s:5:"solid";s:5:"color";s:7:"#1e73be";s:6:"radius";s:1:"3";s:11:"radius_unit";s:2:"px";}}s:9:"quicksand";a:2:{s:7:"enabled";s:1:"0";s:8:"duration";s:4:"1800";}s:10:"pagination";a:10:{s:6:"preset";s:1:"0";s:7:"enabled";s:5:"false";s:8:"per_page";s:2:"10";s:3:"pos";s:3:"top";s:5:"align";s:4:"left";s:9:"container";a:2:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";}s:4:"text";a:4:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";s:5:"color";s:7:"#0a0a0a";s:10:"hide_color";s:3:"off";}s:7:"padding";a:2:{s:8:"vertical";s:1:"4";s:10:"horizontal";s:1:"8";}s:4:"font";a:2:{s:6:"weight";s:6:"normal";s:4:"size";s:2:"13";}s:6:"border";a:5:{s:5:"width";s:1:"1";s:4:"type";s:5:"solid";s:5:"color";s:7:"#999999";s:6:"radius";s:1:"4";s:11:"radius_unit";s:2:"px";}}s:9:"watermark";a:9:{s:7:"enabled";s:0:"";s:8:"show_for";s:1:"3";s:11:"all_img_sel";s:1:"1";s:4:"type";s:3:"img";s:3:"url";s:0:"";s:6:"margin";s:1:"0";s:8:"position";s:13:"center_center";s:6:"rotate";s:1:"0";s:12:"transparency";s:2:"50";}s:7:"buttons";a:12:{s:5:"class";s:0:"";s:5:"color";s:7:"#000000";s:15:"backgroundColor";s:0:"";s:10:"fontFamily";s:7:"Default";s:8:"fontSize";s:0:"";s:10:"fontWeight";s:6:"normal";s:8:"paddingV";s:1:"5";s:8:"paddingH";s:1:"8";s:11:"borderStyle";s:5:"solid";s:11:"borderWidth";s:1:"1";s:11:"borderColor";s:7:"#000000";s:12:"borderRadius";s:1:"2";}s:8:"lazyload";a:1:{s:7:"enabled";s:1:"1";}}',
|
7 |
+
3 => 'a:26:{s:5:"title";s:12:"new-preset-3";s:12:"previewImage";s:0:"";s:4:"sort";a:2:{s:6:"sortto";s:0:"";s:6:"sortby";s:0:"";}s:7:"plugins";a:1:{s:10:"membership";a:1:{s:6:"enable";s:0:"";}}s:4:"area";a:10:{s:4:"grid";s:1:"0";s:8:"position";s:1:"1";s:8:"distance";s:1:"7";s:5:"width";s:3:"100";s:10:"width_unit";s:1:"1";s:7:"padding";s:1:"0";s:11:"photo_width";s:3:"215";s:16:"photo_width_unit";s:1:"0";s:12:"photo_height";s:3:"215";s:17:"photo_height_unit";s:1:"0";}s:7:"general";a:2:{s:7:"columns";a:1:{s:6:"number";s:1:"3";}s:17:"responsiveColumns";a:3:{s:7:"desktop";a:2:{s:5:"width";s:4:"1200";s:7:"columns";s:1:"3";}s:6:"tablet";a:2:{s:5:"width";s:3:"768";s:7:"columns";s:1:"3";}s:6:"mobile";a:2:{s:5:"width";s:3:"320";s:7:"columns";s:1:"3";}}}s:9:"thumbnail";a:7:{s:6:"border";a:5:{s:6:"radius";s:3:"100";s:11:"radius_unit";s:1:"1";s:4:"type";s:5:"solid";s:5:"color";s:7:"#ffffff";s:5:"width";s:1:"5";}s:11:"cropQuality";s:3:"100";s:6:"shadow";a:5:{s:7:"overlay";s:1:"0";s:5:"color";s:7:"#000000";s:4:"blur";s:2:"10";s:1:"x";s:1:"0";s:1:"y";s:1:"0";}s:7:"overlay";a:16:{s:10:"text_align";s:1:"2";s:8:"position";s:0:"";s:7:"enabled";s:4:"true";s:10:"background";s:7:"#3498db";s:12:"transparency";s:2:"10";s:6:"effect";s:6:"center";s:18:"imageOnHoverEnable";s:1:"0";s:12:"imageOnHover";s:0:"";s:8:"personal";s:5:"false";s:17:"polaroidAnimation";s:4:"true";s:18:"polaroidScattering";s:4:"true";s:18:"polaroidFrameWidth";s:2:"20";s:11:"font_family";s:7:"Default";s:9:"text_size";s:2:"14";s:14:"text_size_unit";s:1:"0";s:10:"foreground";s:7:"#ffffff";}s:7:"tooltip";s:5:"false";s:8:"isMobile";s:5:"false";s:22:"isDisableMobileCaption";s:5:"false";}s:13:"socialSharing";a:1:{s:7:"enabled";s:0:"";}s:8:"showMore";a:6:{s:7:"enabled";s:5:"false";s:12:"loadOnScroll";s:5:"false";s:10:"buttonText";s:9:"Load More";s:11:"loadingText";s:10:"Loading...";s:12:"imagesAmount";s:2:"20";s:14:"showMoreAmount";s:2:"10";}s:16:"horizontalScroll";a:3:{s:7:"enabled";s:5:"false";s:5:"color";s:0:"";s:12:"transparency";s:2:"60";}s:11:"border-type";s:7:"Example";s:10:"use_shadow";s:1:"1";s:12:"mouse_shadow";s:1:"0";s:3:"box";a:13:{s:7:"enabled";s:4:"true";s:4:"type";s:1:"1";s:5:"theme";s:7:"theme_6";s:9:"imageText";s:16:"data-description";s:15:"linkedImageText";s:10:"data-title";s:10:"background";s:0:"";s:12:"transparency";s:2:"30";s:9:"slideshow";s:5:"false";s:14:"slideshowSpeed";s:4:"2500";s:14:"popupHoverStop";s:4:"true";s:13:"slideshowAuto";s:5:"false";s:10:"popupwidth";s:0:"";s:11:"popupheight";s:0:"";}s:5:"popup";a:1:{s:5:"video";a:4:{s:5:"width";s:3:"853";s:6:"height";s:3:"480";s:8:"autoplay";s:5:"false";s:5:"onEnd";s:1:"0";}}s:7:"preload";a:4:{s:7:"enabled";s:4:"true";s:10:"background";s:7:"#0073AA";s:9:"icon_name";s:7:"default";s:10:"icon_items";s:1:"0";}s:5:"posts";a:9:{s:6:"enable";s:1:"0";s:5:"style";s:1:"0";s:9:"autoposts";s:1:"0";s:15:"autopostsNumber";s:1:"5";s:7:"current";s:3:"671";s:6:"author";s:1:"0";s:4:"date";s:1:"0";s:8:"contents";s:1:"0";s:10:"categories";s:1:"0";}s:5:"pages";a:1:{s:7:"current";s:3:"655";}s:5:"icons";a:12:{s:7:"enabled";s:5:"false";s:13:"overlay_color";s:7:"#3498db";s:15:"overlay_enabled";s:4:"true";s:4:"size";s:2:"16";s:5:"color";s:7:"#ffffff";s:11:"hover_color";s:7:"#ffffff";s:20:"overlay_transparency";s:1:"5";s:10:"background";s:7:"#1e73be";s:16:"background_hover";s:7:"#1e73be";s:14:"bgTransparency";s:1:"0";s:6:"margin";s:1:"5";s:6:"effect";s:17:"hi-icon-effect-7a";}s:14:"captionBuilder";a:5:{s:10:"isOnceUsed";s:1:"1";s:10:"background";a:1:{s:6:"enable";s:1:"1";}s:5:"title";a:5:{s:6:"enable";s:1:"1";s:8:"position";s:13:"center_center";s:8:"paddings";a:4:{s:4:"left";s:1:"5";s:5:"right";s:1:"5";s:3:"top";s:1:"5";s:6:"bottom";s:1:"0";}s:7:"bgColor";s:0:"";s:19:"bgColorTransparency";s:1:"0";}s:11:"description";a:8:{s:8:"position";s:13:"center_center";s:8:"paddings";a:4:{s:4:"left";s:1:"0";s:5:"right";s:1:"0";s:3:"top";s:1:"0";s:6:"bottom";s:1:"0";}s:11:"font_family";s:7:"Default";s:9:"font_size";s:2:"14";s:14:"font_size_unit";s:1:"0";s:9:"fontColor";s:0:"";s:7:"bgColor";s:0:"";s:19:"bgColorTransparency";s:1:"0";}s:5:"icons";a:7:{s:8:"position";s:13:"center_center";s:8:"paddings";a:4:{s:4:"left";s:1:"0";s:5:"right";s:1:"0";s:3:"top";s:1:"0";s:6:"bottom";s:1:"0";}s:21:"popupFontAwesomeClass";s:9:"fa-expand";s:21:"videoFontAwesomeClass";s:0:"";s:20:"linkFontAwesomeClass";s:0:"";s:7:"bgColor";s:0:"";s:19:"bgColorTransparency";s:1:"0";}}s:10:"categories";a:15:{s:6:"preset";s:1:"0";s:7:"enabled";s:5:"false";s:8:"position";s:3:"top";s:5:"align";s:4:"left";s:5:"order";a:1:{i:0;s:7:"__all__";}s:6:"nav_bg";s:7:"#1e73be";s:11:"hide_nav_bg";s:2:"on";s:7:"text_bg";s:7:"#82a0bf";s:12:"hide_text_bg";s:2:"on";s:10:"text_color";s:7:"#1e73be";s:11:"theme_color";s:3:"off";s:7:"padding";a:2:{s:4:"vert";s:1:"3";s:3:"hor";s:2:"10";}s:11:"font_weight";s:6:"normal";s:9:"font_size";s:2:"12";s:6:"border";a:5:{s:5:"width";s:1:"1";s:5:"style";s:5:"solid";s:5:"color";s:7:"#1e73be";s:6:"radius";s:1:"3";s:11:"radius_unit";s:2:"px";}}s:9:"quicksand";a:2:{s:7:"enabled";s:1:"0";s:8:"duration";s:4:"1800";}s:10:"pagination";a:10:{s:6:"preset";s:1:"0";s:7:"enabled";s:5:"false";s:8:"per_page";s:1:"6";s:3:"pos";s:3:"top";s:5:"align";s:6:"center";s:9:"container";a:2:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";}s:4:"text";a:4:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";s:5:"color";s:7:"#0a0a0a";s:10:"hide_color";s:3:"off";}s:7:"padding";a:2:{s:8:"vertical";s:1:"4";s:10:"horizontal";s:1:"8";}s:4:"font";a:2:{s:6:"weight";s:6:"normal";s:4:"size";s:2:"13";}s:6:"border";a:5:{s:5:"width";s:1:"1";s:4:"type";s:5:"solid";s:5:"color";s:7:"#999999";s:6:"radius";s:1:"4";s:11:"radius_unit";s:2:"px";}}s:9:"watermark";a:9:{s:7:"enabled";s:0:"";s:8:"show_for";s:1:"3";s:11:"all_img_sel";s:1:"1";s:4:"type";s:3:"img";s:3:"url";s:0:"";s:6:"margin";s:1:"0";s:8:"position";s:13:"center_center";s:6:"rotate";s:1:"0";s:12:"transparency";s:2:"50";}s:7:"buttons";a:12:{s:5:"class";s:0:"";s:5:"color";s:7:"#000000";s:15:"backgroundColor";s:0:"";s:10:"fontFamily";s:7:"Default";s:8:"fontSize";s:0:"";s:10:"fontWeight";s:6:"normal";s:8:"paddingV";s:1:"5";s:8:"paddingH";s:1:"8";s:11:"borderStyle";s:5:"solid";s:11:"borderWidth";s:1:"1";s:11:"borderColor";s:7:"#000000";s:12:"borderRadius";s:1:"2";}s:8:"lazyload";a:1:{s:7:"enabled";s:1:"1";}}',
|
8 |
+
4 => 'a:26:{s:5:"title";s:12:"new preset 4";s:12:"previewImage";s:0:"";s:4:"sort";a:2:{s:6:"sortto";s:0:"";s:6:"sortby";s:0:"";}s:7:"plugins";a:1:{s:10:"membership";a:1:{s:6:"enable";s:0:"";}}s:4:"area";a:8:{s:4:"grid";s:1:"2";s:8:"position";s:1:"1";s:8:"distance";s:1:"5";s:5:"width";s:3:"100";s:10:"width_unit";s:1:"1";s:7:"padding";s:1:"0";s:12:"photo_height";s:3:"215";s:17:"photo_height_unit";s:1:"0";}s:7:"general";a:2:{s:7:"columns";a:1:{s:6:"number";s:1:"3";}s:17:"responsiveColumns";a:3:{s:7:"desktop";a:2:{s:5:"width";s:4:"1200";s:7:"columns";s:1:"3";}s:6:"tablet";a:2:{s:5:"width";s:3:"768";s:7:"columns";s:1:"3";}s:6:"mobile";a:2:{s:5:"width";s:3:"320";s:7:"columns";s:1:"3";}}}s:9:"thumbnail";a:7:{s:6:"border";a:5:{s:6:"radius";s:2:"20";s:11:"radius_unit";s:1:"0";s:4:"type";s:4:"none";s:5:"color";s:5:"black";s:5:"width";s:1:"3";}s:11:"cropQuality";s:3:"100";s:6:"shadow";a:5:{s:7:"overlay";s:1:"0";s:5:"color";s:7:"#000000";s:4:"blur";s:1:"5";s:1:"x";s:1:"2";s:1:"y";s:1:"4";}s:7:"overlay";a:16:{s:10:"text_align";s:1:"2";s:8:"position";s:0:"";s:7:"enabled";s:4:"true";s:10:"background";s:7:"#0c0000";s:12:"transparency";s:1:"5";s:6:"effect";s:16:"quarter-two-step";s:18:"imageOnHoverEnable";s:1:"0";s:12:"imageOnHover";s:0:"";s:8:"personal";s:5:"false";s:17:"polaroidAnimation";s:4:"true";s:18:"polaroidScattering";s:4:"true";s:18:"polaroidFrameWidth";s:2:"20";s:11:"font_family";s:7:"Default";s:9:"text_size";s:2:"14";s:14:"text_size_unit";s:1:"0";s:10:"foreground";s:7:"#ffffff";}s:7:"tooltip";s:5:"false";s:8:"isMobile";s:5:"false";s:22:"isDisableMobileCaption";s:5:"false";}s:13:"socialSharing";a:1:{s:7:"enabled";s:0:"";}s:8:"showMore";a:6:{s:7:"enabled";s:5:"false";s:12:"loadOnScroll";s:5:"false";s:10:"buttonText";s:9:"Load More";s:11:"loadingText";s:10:"Loading...";s:12:"imagesAmount";s:2:"20";s:14:"showMoreAmount";s:2:"10";}s:16:"horizontalScroll";a:3:{s:7:"enabled";s:5:"false";s:5:"color";s:0:"";s:12:"transparency";s:2:"60";}s:11:"border-type";s:7:"Example";s:10:"use_shadow";s:1:"1";s:12:"mouse_shadow";s:1:"1";s:3:"box";a:13:{s:7:"enabled";s:4:"true";s:4:"type";s:1:"1";s:5:"theme";s:7:"theme_6";s:9:"imageText";s:16:"data-description";s:15:"linkedImageText";s:10:"data-title";s:10:"background";s:0:"";s:12:"transparency";s:2:"30";s:9:"slideshow";s:5:"false";s:14:"slideshowSpeed";s:4:"2500";s:14:"popupHoverStop";s:4:"true";s:13:"slideshowAuto";s:5:"false";s:10:"popupwidth";s:0:"";s:11:"popupheight";s:0:"";}s:5:"popup";a:1:{s:5:"video";a:4:{s:5:"width";s:3:"853";s:6:"height";s:3:"480";s:8:"autoplay";s:5:"false";s:5:"onEnd";s:1:"0";}}s:7:"preload";a:4:{s:7:"enabled";s:4:"true";s:10:"background";s:7:"#0073AA";s:9:"icon_name";s:7:"default";s:10:"icon_items";s:1:"0";}s:5:"posts";a:9:{s:6:"enable";s:1:"0";s:5:"style";s:1:"0";s:9:"autoposts";s:1:"0";s:15:"autopostsNumber";s:1:"5";s:7:"current";s:3:"671";s:6:"author";s:1:"0";s:4:"date";s:1:"0";s:8:"contents";s:1:"0";s:10:"categories";s:1:"0";}s:5:"pages";a:1:{s:7:"current";s:3:"655";}s:5:"icons";a:12:{s:7:"enabled";s:5:"false";s:13:"overlay_color";s:7:"#3498db";s:15:"overlay_enabled";s:4:"true";s:4:"size";s:2:"16";s:5:"color";s:7:"#ffffff";s:11:"hover_color";s:7:"#ffffff";s:20:"overlay_transparency";s:1:"5";s:10:"background";s:7:"#1e73be";s:16:"background_hover";s:7:"#1e73be";s:14:"bgTransparency";s:1:"0";s:6:"margin";s:1:"5";s:6:"effect";s:17:"hi-icon-effect-5d";}s:14:"captionBuilder";a:5:{s:10:"isOnceUsed";s:1:"1";s:10:"background";a:1:{s:6:"enable";s:1:"1";}s:5:"title";a:5:{s:6:"enable";s:1:"1";s:8:"position";s:10:"center_top";s:8:"paddings";a:4:{s:4:"left";s:1:"7";s:5:"right";s:1:"7";s:3:"top";s:2:"20";s:6:"bottom";s:1:"0";}s:7:"bgColor";s:0:"";s:19:"bgColorTransparency";s:1:"0";}s:11:"description";a:8:{s:8:"position";s:13:"center_center";s:8:"paddings";a:4:{s:4:"left";s:1:"0";s:5:"right";s:1:"0";s:3:"top";s:1:"0";s:6:"bottom";s:1:"0";}s:11:"font_family";s:7:"Default";s:9:"font_size";s:2:"14";s:14:"font_size_unit";s:1:"0";s:9:"fontColor";s:0:"";s:7:"bgColor";s:0:"";s:19:"bgColorTransparency";s:1:"0";}s:5:"icons";a:7:{s:8:"position";s:13:"center_center";s:8:"paddings";a:4:{s:4:"left";s:1:"0";s:5:"right";s:1:"0";s:3:"top";s:1:"0";s:6:"bottom";s:1:"0";}s:21:"popupFontAwesomeClass";s:9:"fa-expand";s:21:"videoFontAwesomeClass";s:0:"";s:20:"linkFontAwesomeClass";s:0:"";s:7:"bgColor";s:0:"";s:19:"bgColorTransparency";s:1:"0";}}s:10:"categories";a:15:{s:6:"preset";s:1:"0";s:7:"enabled";s:5:"false";s:8:"position";s:3:"top";s:5:"align";s:6:"center";s:5:"order";a:1:{i:0;s:7:"__all__";}s:6:"nav_bg";s:7:"#1e73be";s:11:"hide_nav_bg";s:2:"on";s:7:"text_bg";s:7:"#82a0bf";s:12:"hide_text_bg";s:2:"on";s:10:"text_color";s:7:"#1e73be";s:11:"theme_color";s:3:"off";s:7:"padding";a:2:{s:4:"vert";s:1:"3";s:3:"hor";s:2:"10";}s:11:"font_weight";s:6:"normal";s:9:"font_size";s:2:"12";s:6:"border";a:5:{s:5:"width";s:1:"1";s:5:"style";s:5:"solid";s:5:"color";s:7:"#1e73be";s:6:"radius";s:1:"3";s:11:"radius_unit";s:2:"px";}}s:9:"quicksand";a:2:{s:7:"enabled";s:1:"0";s:8:"duration";s:4:"1800";}s:10:"pagination";a:10:{s:6:"preset";s:1:"0";s:7:"enabled";s:5:"false";s:8:"per_page";s:2:"10";s:3:"pos";s:3:"top";s:5:"align";s:4:"left";s:9:"container";a:2:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";}s:4:"text";a:4:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";s:5:"color";s:7:"#0a0a0a";s:10:"hide_color";s:3:"off";}s:7:"padding";a:2:{s:8:"vertical";s:1:"4";s:10:"horizontal";s:1:"8";}s:4:"font";a:2:{s:6:"weight";s:6:"normal";s:4:"size";s:2:"13";}s:6:"border";a:5:{s:5:"width";s:1:"1";s:4:"type";s:5:"solid";s:5:"color";s:7:"#999999";s:6:"radius";s:1:"4";s:11:"radius_unit";s:2:"px";}}s:9:"watermark";a:9:{s:7:"enabled";s:0:"";s:8:"show_for";s:1:"3";s:11:"all_img_sel";s:1:"1";s:4:"type";s:3:"img";s:3:"url";s:0:"";s:6:"margin";s:1:"0";s:8:"position";s:13:"center_center";s:6:"rotate";s:1:"0";s:12:"transparency";s:2:"50";}s:7:"buttons";a:12:{s:5:"class";s:0:"";s:5:"color";s:7:"#000000";s:15:"backgroundColor";s:0:"";s:10:"fontFamily";s:7:"Default";s:8:"fontSize";s:0:"";s:10:"fontWeight";s:6:"normal";s:8:"paddingV";s:1:"5";s:8:"paddingH";s:1:"8";s:11:"borderStyle";s:5:"solid";s:11:"borderWidth";s:1:"1";s:11:"borderColor";s:7:"#000000";s:12:"borderRadius";s:1:"2";}s:8:"lazyload";a:1:{s:7:"enabled";s:1:"1";}}',
|
9 |
+
5 => 'a:26:{s:5:"title";s:12:"new-preset-5";s:12:"previewImage";s:0:"";s:4:"sort";a:2:{s:6:"sortto";s:0:"";s:6:"sortby";s:0:"";}s:7:"plugins";a:1:{s:10:"membership";a:1:{s:6:"enable";s:0:"";}}s:4:"area";a:10:{s:4:"grid";s:1:"0";s:8:"position";s:1:"1";s:8:"distance";s:1:"5";s:5:"width";s:3:"100";s:10:"width_unit";s:1:"1";s:7:"padding";s:1:"0";s:11:"photo_width";s:3:"215";s:16:"photo_width_unit";s:1:"0";s:12:"photo_height";s:3:"215";s:17:"photo_height_unit";s:1:"0";}s:7:"general";a:2:{s:7:"columns";a:1:{s:6:"number";s:1:"3";}s:17:"responsiveColumns";a:3:{s:7:"desktop";a:2:{s:5:"width";s:4:"1200";s:7:"columns";s:1:"3";}s:6:"tablet";a:2:{s:5:"width";s:3:"768";s:7:"columns";s:1:"3";}s:6:"mobile";a:2:{s:5:"width";s:3:"320";s:7:"columns";s:1:"3";}}}s:9:"thumbnail";a:7:{s:6:"border";a:5:{s:6:"radius";s:1:"0";s:11:"radius_unit";s:1:"0";s:4:"type";s:4:"none";s:5:"color";s:7:"#fefefe";s:5:"width";s:1:"0";}s:11:"cropQuality";s:3:"100";s:6:"shadow";a:5:{s:7:"overlay";s:1:"0";s:5:"color";s:7:"#aaaaaa";s:4:"blur";s:2:"10";s:1:"x";s:1:"1";s:1:"y";s:1:"1";}s:7:"overlay";a:17:{s:10:"text_align";s:1:"2";s:8:"position";s:0:"";s:7:"enabled";s:4:"true";s:10:"background";s:7:"#ffffff";s:12:"transparency";s:1:"4";s:6:"effect";s:16:"quarter-slide-up";s:18:"imageOnHoverEnable";s:1:"0";s:12:"imageOnHover";s:0:"";s:8:"personal";s:5:"false";s:17:"polaroidAnimation";s:4:"true";s:18:"polaroidScattering";s:4:"true";s:18:"polaroidFrameWidth";s:2:"20";s:11:"font_family";s:7:"Default";s:9:"text_size";s:2:"12";s:14:"text_size_unit";s:1:"0";s:10:"foreground";s:7:"#ffffff";s:9:"fontStyle";a:1:{i:0;s:4:"bold";}}s:7:"tooltip";s:5:"false";s:8:"isMobile";s:5:"false";s:22:"isDisableMobileCaption";s:5:"false";}s:13:"socialSharing";a:1:{s:7:"enabled";s:0:"";}s:8:"showMore";a:6:{s:7:"enabled";s:5:"false";s:12:"loadOnScroll";s:5:"false";s:10:"buttonText";s:9:"Load More";s:11:"loadingText";s:10:"Loading...";s:12:"imagesAmount";s:2:"20";s:14:"showMoreAmount";s:2:"10";}s:16:"horizontalScroll";a:3:{s:7:"enabled";s:5:"false";s:5:"color";s:0:"";s:12:"transparency";s:2:"60";}s:11:"border-type";s:7:"Example";s:10:"use_shadow";s:1:"0";s:12:"mouse_shadow";s:1:"0";s:3:"box";a:13:{s:7:"enabled";s:4:"true";s:4:"type";s:1:"0";s:5:"theme";s:7:"theme_1";s:9:"imageText";s:16:"data-description";s:15:"linkedImageText";s:10:"data-title";s:10:"background";s:0:"";s:12:"transparency";s:2:"30";s:9:"slideshow";s:5:"false";s:14:"slideshowSpeed";s:4:"2500";s:14:"popupHoverStop";s:4:"true";s:13:"slideshowAuto";s:5:"false";s:10:"popupwidth";s:0:"";s:11:"popupheight";s:0:"";}s:5:"popup";a:1:{s:5:"video";a:4:{s:5:"width";s:3:"853";s:6:"height";s:3:"480";s:8:"autoplay";s:5:"false";s:5:"onEnd";s:1:"0";}}s:7:"preload";a:4:{s:7:"enabled";s:4:"true";s:10:"background";s:7:"#0073AA";s:9:"icon_name";s:7:"default";s:10:"icon_items";s:1:"0";}s:5:"posts";a:9:{s:6:"enable";s:1:"0";s:5:"style";s:1:"0";s:9:"autoposts";s:1:"0";s:15:"autopostsNumber";s:1:"5";s:7:"current";s:3:"671";s:6:"author";s:1:"0";s:4:"date";s:1:"0";s:8:"contents";s:1:"0";s:10:"categories";s:1:"0";}s:5:"pages";a:1:{s:7:"current";s:3:"655";}s:5:"icons";a:12:{s:7:"enabled";s:4:"true";s:13:"overlay_color";s:7:"#ffffff";s:15:"overlay_enabled";s:4:"true";s:4:"size";s:2:"20";s:5:"color";s:7:"#ffffff";s:11:"hover_color";s:7:"#ffffff";s:20:"overlay_transparency";s:1:"5";s:10:"background";s:7:"#000000";s:16:"background_hover";s:7:"#820101";s:14:"bgTransparency";s:1:"0";s:6:"margin";s:1:"5";s:6:"effect";s:17:"hi-icon-effect-7b";}s:14:"captionBuilder";a:5:{s:10:"isOnceUsed";s:1:"1";s:10:"background";a:1:{s:6:"enable";s:1:"1";}s:5:"title";a:5:{s:6:"enable";s:1:"1";s:8:"position";s:13:"center_bottom";s:8:"paddings";a:4:{s:4:"left";s:2:"10";s:5:"right";s:2:"10";s:3:"top";s:2:"10";s:6:"bottom";s:1:"0";}s:7:"bgColor";s:7:"#6f0000";s:19:"bgColorTransparency";s:1:"4";}s:11:"description";a:8:{s:8:"position";s:13:"center_center";s:8:"paddings";a:4:{s:4:"left";s:1:"0";s:5:"right";s:1:"0";s:3:"top";s:1:"0";s:6:"bottom";s:1:"0";}s:11:"font_family";s:7:"Default";s:9:"font_size";s:2:"12";s:14:"font_size_unit";s:1:"0";s:9:"fontColor";s:0:"";s:7:"bgColor";s:0:"";s:19:"bgColorTransparency";s:1:"0";}s:5:"icons";a:8:{s:6:"enable";s:1:"1";s:8:"position";s:13:"center_center";s:8:"paddings";a:4:{s:4:"left";s:1:"0";s:5:"right";s:1:"0";s:3:"top";s:1:"0";s:6:"bottom";s:1:"0";}s:21:"popupFontAwesomeClass";s:9:"fa-expand";s:21:"videoFontAwesomeClass";s:0:"";s:20:"linkFontAwesomeClass";s:0:"";s:7:"bgColor";s:0:"";s:19:"bgColorTransparency";s:1:"0";}}s:10:"categories";a:15:{s:6:"preset";s:1:"5";s:7:"enabled";s:4:"true";s:8:"position";s:3:"top";s:5:"align";s:6:"center";s:5:"order";a:1:{i:0;s:7:"__all__";}s:6:"nav_bg";s:7:"#1e73be";s:11:"hide_nav_bg";s:2:"on";s:7:"text_bg";s:7:"#82a0bf";s:12:"hide_text_bg";s:2:"on";s:10:"text_color";s:7:"#000000";s:11:"theme_color";s:3:"off";s:7:"padding";a:2:{s:4:"vert";s:1:"6";s:3:"hor";s:2:"10";}s:11:"font_weight";s:6:"normal";s:9:"font_size";s:2:"12";s:6:"border";a:5:{s:5:"width";s:1:"0";s:5:"style";s:5:"solid";s:5:"color";s:7:"#1e73be";s:6:"radius";s:2:"40";s:11:"radius_unit";s:2:"px";}}s:9:"quicksand";a:2:{s:7:"enabled";s:1:"0";s:8:"duration";s:4:"1800";}s:10:"pagination";a:10:{s:6:"preset";s:1:"0";s:7:"enabled";s:5:"false";s:8:"per_page";s:2:"10";s:3:"pos";s:3:"top";s:5:"align";s:4:"left";s:9:"container";a:2:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";}s:4:"text";a:4:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";s:5:"color";s:7:"#0a0a0a";s:10:"hide_color";s:3:"off";}s:7:"padding";a:2:{s:8:"vertical";s:1:"4";s:10:"horizontal";s:1:"8";}s:4:"font";a:2:{s:6:"weight";s:6:"normal";s:4:"size";s:2:"13";}s:6:"border";a:5:{s:5:"width";s:1:"1";s:4:"type";s:5:"solid";s:5:"color";s:7:"#999999";s:6:"radius";s:1:"4";s:11:"radius_unit";s:2:"px";}}s:9:"watermark";a:9:{s:7:"enabled";s:0:"";s:8:"show_for";s:1:"3";s:11:"all_img_sel";s:1:"1";s:4:"type";s:3:"img";s:3:"url";s:0:"";s:6:"margin";s:1:"0";s:8:"position";s:13:"center_center";s:6:"rotate";s:1:"0";s:12:"transparency";s:2:"50";}s:7:"buttons";a:12:{s:5:"class";s:0:"";s:5:"color";s:7:"#000000";s:15:"backgroundColor";s:0:"";s:10:"fontFamily";s:7:"Default";s:8:"fontSize";s:0:"";s:10:"fontWeight";s:6:"normal";s:8:"paddingV";s:1:"5";s:8:"paddingH";s:1:"8";s:11:"borderStyle";s:5:"solid";s:11:"borderWidth";s:1:"1";s:11:"borderColor";s:7:"#000000";s:12:"borderRadius";s:1:"2";}s:8:"lazyload";a:1:{s:7:"enabled";s:1:"1";}}',
|
10 |
6 => 'a:14:{s:5:"title";s:0:"";s:4:"area";a:8:{s:4:"grid";s:1:"0";s:8:"distance";s:1:"5";s:5:"width";s:2:"75";s:10:"width_unit";s:1:"1";s:11:"photo_width";s:3:"250";s:16:"photo_width_unit";s:1:"0";s:12:"photo_height";s:3:"200";s:17:"photo_height_unit";s:1:"0";}s:9:"thumbnail";a:3:{s:6:"border";a:5:{s:6:"radius";s:2:"30";s:11:"radius_unit";s:1:"0";s:4:"type";s:4:"none";s:5:"color";s:7:"#fefefe";s:5:"width";s:1:"0";}s:6:"shadow";a:5:{s:7:"overlay";s:1:"0";s:5:"color";s:7:"#aaaaaa";s:4:"blur";s:2:"10";s:1:"x";s:1:"1";s:1:"y";s:1:"1";}s:7:"overlay";a:8:{s:7:"enabled";s:4:"true";s:6:"effect";s:14:"quarter-appear";s:10:"background";s:7:"#3498db";s:10:"foreground";s:7:"#ecf0f1";s:12:"transparency";s:1:"5";s:9:"text_size";s:2:"12";s:14:"text_size_unit";s:1:"0";s:10:"text_align";s:1:"3";}}s:11:"border-type";s:5:"Types";s:10:"use_shadow";s:1:"0";s:12:"mouse_shadow";s:1:"0";s:3:"box";a:6:{s:4:"type";s:1:"0";s:5:"theme";s:7:"theme_1";s:10:"transition";s:7:"elastic";s:9:"slideshow";s:5:"false";s:14:"slideshowSpeed";s:4:"2500";s:13:"slideshowAuto";s:5:"false";}s:5:"posts";a:7:{s:6:"enable";s:1:"1";s:5:"style";s:1:"2";s:7:"current";s:3:"233";s:6:"author";s:1:"1";s:4:"date";s:1:"1";s:8:"contents";s:1:"1";s:10:"categories";s:1:"1";}s:5:"pages";a:1:{s:7:"current";s:2:"33";}s:5:"icons";a:11:{s:7:"enabled";s:5:"false";s:6:"effect";s:17:"hi-icon-effect-5d";s:5:"color";s:7:"#ffffff";s:11:"hover_color";s:7:"#ffffff";s:10:"background";s:7:"#1e73be";s:16:"background_hover";s:7:"#1e73be";s:4:"size";s:2:"16";s:6:"margin";s:1:"5";s:15:"overlay_enabled";s:4:"true";s:13:"overlay_color";s:7:"#3498db";s:20:"overlay_transparency";s:1:"5";}s:10:"categories";a:13:{s:7:"enabled";s:5:"false";s:8:"position";s:3:"top";s:5:"align";s:6:"center";s:6:"preset";s:1:"0";s:6:"nav_bg";s:7:"#1e73be";s:11:"hide_nav_bg";s:2:"on";s:7:"text_bg";s:7:"#82a0bf";s:12:"hide_text_bg";s:2:"on";s:10:"text_color";s:7:"#1e73be";s:7:"padding";a:2:{s:4:"vert";s:1:"3";s:3:"hor";s:2:"10";}s:11:"font_weight";s:6:"normal";s:9:"font_size";s:2:"12";s:6:"border";a:5:{s:5:"width";s:1:"1";s:5:"style";s:5:"solid";s:5:"color";s:7:"#1e73be";s:6:"radius";s:1:"3";s:11:"radius_unit";s:2:"px";}}s:9:"quicksand";a:2:{s:7:"enabled";s:1:"0";s:8:"duration";s:0:"";}s:10:"pagination";a:10:{s:7:"enabled";s:4:"true";s:8:"per_page";s:1:"6";s:3:"pos";s:3:"top";s:5:"align";s:5:"right";s:6:"preset";s:1:"5";s:9:"container";a:2:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";}s:4:"text";a:3:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";s:5:"color";s:7:"#1e73be";}s:7:"padding";a:2:{s:8:"vertical";s:1:"6";s:10:"horizontal";s:2:"10";}s:4:"font";a:2:{s:6:"weight";s:6:"normal";s:4:"size";s:2:"10";}s:6:"border";a:5:{s:5:"width";s:1:"1";s:4:"type";s:5:"solid";s:5:"color";s:7:"#1e73be";s:6:"radius";s:1:"0";s:11:"radius_unit";s:2:"px";}}s:12:"previewImage";a:4:{i:0;s:85:"http://dev.supsystic.com/wp-content/uploads/2015/01/113917523_natyurmortuy_foto_2.jpg";i:1;i:280;i:2;i:420;i:3;b:0;}}',
|
11 |
7 => 'a:14:{s:5:"title";s:0:"";s:4:"area";a:8:{s:4:"grid";s:1:"0";s:8:"distance";s:2:"10";s:5:"width";s:3:"100";s:10:"width_unit";s:1:"1";s:11:"photo_width";s:3:"350";s:16:"photo_width_unit";s:1:"0";s:12:"photo_height";s:3:"200";s:17:"photo_height_unit";s:1:"0";}s:9:"thumbnail";a:3:{s:6:"border";a:5:{s:6:"radius";s:1:"0";s:11:"radius_unit";s:1:"0";s:4:"type";s:4:"none";s:5:"color";s:7:"#fefefe";s:5:"width";s:2:"10";}s:6:"shadow";a:5:{s:7:"overlay";s:1:"0";s:5:"color";s:7:"#c0c0c0";s:4:"blur";s:1:"3";s:1:"x";s:1:"4";s:1:"y";s:2:"-4";}s:7:"overlay";a:8:{s:7:"enabled";s:4:"true";s:6:"effect";s:16:"quarter-slide-up";s:10:"background";s:7:"#6f0000";s:10:"foreground";s:7:"#ffffff";s:12:"transparency";s:1:"5";s:9:"text_size";s:2:"14";s:14:"text_size_unit";s:1:"0";s:10:"text_align";s:1:"2";}}s:11:"border-type";s:5:"Types";s:10:"use_shadow";s:1:"1";s:12:"mouse_shadow";s:1:"0";s:3:"box";a:6:{s:4:"type";s:1:"1";s:5:"theme";s:7:"theme_6";s:10:"transition";s:4:"fade";s:9:"slideshow";s:5:"false";s:14:"slideshowSpeed";s:4:"2500";s:13:"slideshowAuto";s:5:"false";}s:5:"posts";a:7:{s:6:"enable";s:1:"1";s:5:"style";s:1:"5";s:7:"current";s:4:"1999";s:6:"author";s:1:"1";s:4:"date";s:1:"1";s:8:"contents";s:1:"0";s:10:"categories";s:1:"0";}s:5:"pages";a:1:{s:7:"current";s:2:"33";}s:5:"icons";a:11:{s:7:"enabled";s:5:"false";s:6:"effect";s:17:"hi-icon-effect-5d";s:5:"color";s:7:"#ffffff";s:11:"hover_color";s:7:"#ffffff";s:10:"background";s:7:"#1e73be";s:16:"background_hover";s:7:"#1e73be";s:4:"size";s:2:"16";s:6:"margin";s:1:"5";s:15:"overlay_enabled";s:4:"true";s:13:"overlay_color";s:7:"#3498db";s:20:"overlay_transparency";s:1:"5";}s:10:"categories";a:13:{s:7:"enabled";s:5:"false";s:8:"position";s:3:"top";s:5:"align";s:6:"center";s:6:"preset";s:1:"0";s:6:"nav_bg";s:7:"#1e73be";s:11:"hide_nav_bg";s:2:"on";s:7:"text_bg";s:7:"#82a0bf";s:12:"hide_text_bg";s:2:"on";s:10:"text_color";s:7:"#1e73be";s:7:"padding";a:2:{s:4:"vert";s:1:"3";s:3:"hor";s:2:"10";}s:11:"font_weight";s:6:"normal";s:9:"font_size";s:2:"12";s:6:"border";a:5:{s:5:"width";s:1:"1";s:5:"style";s:5:"solid";s:5:"color";s:7:"#1e73be";s:6:"radius";s:1:"3";s:11:"radius_unit";s:2:"px";}}s:9:"quicksand";a:2:{s:7:"enabled";s:1:"0";s:8:"duration";s:0:"";}s:10:"pagination";a:10:{s:7:"enabled";s:5:"false";s:8:"per_page";s:2:"10";s:3:"pos";s:3:"top";s:5:"align";s:4:"left";s:6:"preset";s:1:"0";s:9:"container";a:2:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";}s:4:"text";a:3:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";s:5:"color";s:7:"#0a0a0a";}s:7:"padding";a:2:{s:8:"vertical";s:1:"4";s:10:"horizontal";s:1:"8";}s:4:"font";a:2:{s:6:"weight";s:6:"normal";s:4:"size";s:2:"13";}s:6:"border";a:5:{s:5:"width";s:1:"1";s:4:"type";s:5:"solid";s:5:"color";s:7:"#999999";s:6:"radius";s:1:"4";s:11:"radius_unit";s:2:"px";}}s:12:"previewImage";a:4:{i:0;s:85:"http://dev.supsystic.com/wp-content/uploads/2015/01/113917523_natyurmortuy_foto_2.jpg";i:1;i:280;i:2;i:420;i:3;b:0;}}',
|
12 |
8 => 'a:14:{s:5:"title";s:0:"";s:4:"area";a:8:{s:4:"grid";s:1:"0";s:8:"distance";s:2:"10";s:5:"width";s:3:"100";s:10:"width_unit";s:1:"1";s:11:"photo_width";s:3:"500";s:16:"photo_width_unit";s:1:"0";s:12:"photo_height";s:3:"200";s:17:"photo_height_unit";s:1:"0";}s:9:"thumbnail";a:3:{s:6:"border";a:5:{s:6:"radius";s:1:"0";s:11:"radius_unit";s:1:"0";s:4:"type";s:4:"none";s:5:"color";s:7:"#fefefe";s:5:"width";s:1:"0";}s:6:"shadow";a:5:{s:7:"overlay";s:1:"0";s:5:"color";s:7:"#aaaaaa";s:4:"blur";s:2:"10";s:1:"x";s:1:"1";s:1:"y";s:1:"1";}s:7:"overlay";a:8:{s:7:"enabled";s:4:"true";s:6:"effect";s:14:"quarter-appear";s:10:"background";s:7:"#3498db";s:10:"foreground";s:7:"#ecf0f1";s:12:"transparency";s:1:"5";s:9:"text_size";s:2:"12";s:14:"text_size_unit";s:1:"0";s:10:"text_align";s:1:"3";}}s:11:"border-type";s:5:"Types";s:10:"use_shadow";s:1:"0";s:12:"mouse_shadow";s:1:"0";s:3:"box";a:6:{s:4:"type";s:1:"0";s:5:"theme";s:7:"theme_1";s:10:"transition";s:7:"elastic";s:9:"slideshow";s:5:"false";s:14:"slideshowSpeed";s:4:"2500";s:13:"slideshowAuto";s:5:"false";}s:5:"posts";a:7:{s:6:"enable";s:1:"1";s:5:"style";s:1:"3";s:7:"current";s:3:"233";s:6:"author";s:1:"1";s:4:"date";s:1:"1";s:8:"contents";s:1:"1";s:10:"categories";s:1:"1";}s:5:"pages";a:1:{s:7:"current";s:2:"33";}s:5:"icons";a:11:{s:7:"enabled";s:5:"false";s:6:"effect";s:17:"hi-icon-effect-5d";s:5:"color";s:7:"#ffffff";s:11:"hover_color";s:7:"#ffffff";s:10:"background";s:7:"#1e73be";s:16:"background_hover";s:7:"#1e73be";s:4:"size";s:2:"16";s:6:"margin";s:1:"5";s:15:"overlay_enabled";s:4:"true";s:13:"overlay_color";s:7:"#3498db";s:20:"overlay_transparency";s:1:"5";}s:10:"categories";a:13:{s:7:"enabled";s:5:"false";s:8:"position";s:3:"top";s:5:"align";s:6:"center";s:6:"preset";s:1:"0";s:6:"nav_bg";s:7:"#1e73be";s:11:"hide_nav_bg";s:2:"on";s:7:"text_bg";s:7:"#82a0bf";s:12:"hide_text_bg";s:2:"on";s:10:"text_color";s:7:"#1e73be";s:7:"padding";a:2:{s:4:"vert";s:1:"3";s:3:"hor";s:2:"10";}s:11:"font_weight";s:6:"normal";s:9:"font_size";s:2:"12";s:6:"border";a:5:{s:5:"width";s:1:"1";s:5:"style";s:5:"solid";s:5:"color";s:7:"#1e73be";s:6:"radius";s:1:"3";s:11:"radius_unit";s:2:"px";}}s:9:"quicksand";a:2:{s:7:"enabled";s:1:"0";s:8:"duration";s:0:"";}s:10:"pagination";a:10:{s:7:"enabled";s:5:"false";s:8:"per_page";s:1:"6";s:3:"pos";s:3:"top";s:5:"align";s:5:"right";s:6:"preset";s:1:"5";s:9:"container";a:2:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";}s:4:"text";a:3:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";s:5:"color";s:7:"#1e73be";}s:7:"padding";a:2:{s:8:"vertical";s:1:"6";s:10:"horizontal";s:2:"10";}s:4:"font";a:2:{s:6:"weight";s:6:"normal";s:4:"size";s:2:"10";}s:6:"border";a:5:{s:5:"width";s:1:"1";s:4:"type";s:5:"solid";s:5:"color";s:7:"#1e73be";s:6:"radius";s:1:"0";s:11:"radius_unit";s:2:"px";}}s:12:"previewImage";a:4:{i:0;s:85:"http://dev.supsystic.com/wp-content/uploads/2015/01/113917523_natyurmortuy_foto_2.jpg";i:1;i:280;i:2;i:420;i:3;b:0;}}',
|
13 |
+
9 => 'a:26:{s:5:"title";s:6:"mosaic";s:12:"previewImage";s:0:"";s:4:"sort";a:2:{s:6:"sortto";s:0:"";s:6:"sortby";s:0:"";}s:7:"plugins";a:1:{s:10:"membership";a:1:{s:6:"enable";s:0:"";}}s:4:"area";a:9:{s:4:"grid";s:1:"4";s:8:"position";s:1:"1";s:8:"distance";s:1:"5";s:5:"width";s:3:"100";s:10:"width_unit";s:1:"1";s:7:"padding";s:1:"0";s:11:"photo_width";s:3:"215";s:16:"photo_width_unit";s:1:"0";s:12:"ggMosaicType";a:7:{s:10:"fontFamily";s:7:"Default";s:8:"fontSize";s:2:"43";s:12:"fontSizeUnit";s:1:"0";s:10:"foreground";s:4:"#fff";s:9:"fontStyle";a:1:{i:0;s:4:"bold";}s:7:"bgColor";s:4:"#000";s:19:"bgColorTransparency";s:1:"4";}}s:7:"general";a:2:{s:7:"columns";a:1:{s:6:"number";s:1:"3";}s:17:"responsiveColumns";a:3:{s:7:"desktop";a:2:{s:5:"width";s:4:"1200";s:7:"columns";s:1:"3";}s:6:"tablet";a:2:{s:5:"width";s:3:"768";s:7:"columns";s:1:"3";}s:6:"mobile";a:2:{s:5:"width";s:3:"320";s:7:"columns";s:1:"3";}}}s:9:"thumbnail";a:7:{s:6:"border";a:5:{s:6:"radius";s:1:"0";s:11:"radius_unit";s:1:"0";s:4:"type";s:4:"none";s:5:"color";s:7:"#fefefe";s:5:"width";s:2:"10";}s:11:"cropQuality";s:3:"100";s:6:"shadow";a:5:{s:7:"overlay";s:1:"0";s:5:"color";s:7:"#000000";s:4:"blur";s:1:"5";s:1:"x";s:1:"2";s:1:"y";s:1:"4";}s:7:"overlay";a:16:{s:10:"text_align";s:1:"2";s:8:"position";s:0:"";s:7:"enabled";s:4:"true";s:10:"background";s:7:"#6f0000";s:12:"transparency";s:1:"5";s:6:"effect";s:16:"quarter-slide-up";s:18:"imageOnHoverEnable";s:1:"0";s:12:"imageOnHover";s:0:"";s:8:"personal";s:5:"false";s:17:"polaroidAnimation";s:4:"true";s:18:"polaroidScattering";s:4:"true";s:18:"polaroidFrameWidth";s:2:"20";s:11:"font_family";s:7:"Default";s:9:"text_size";s:2:"14";s:14:"text_size_unit";s:1:"0";s:10:"foreground";s:7:"#ffffff";}s:7:"tooltip";s:5:"false";s:8:"isMobile";s:5:"false";s:22:"isDisableMobileCaption";s:5:"false";}s:13:"socialSharing";a:1:{s:7:"enabled";s:0:"";}s:8:"showMore";a:6:{s:7:"enabled";s:5:"false";s:12:"loadOnScroll";s:5:"false";s:10:"buttonText";s:9:"Load More";s:11:"loadingText";s:10:"Loading...";s:12:"imagesAmount";s:2:"20";s:14:"showMoreAmount";s:2:"10";}s:16:"horizontalScroll";a:3:{s:7:"enabled";s:5:"false";s:5:"color";s:0:"";s:12:"transparency";s:2:"60";}s:11:"border-type";s:7:"Example";s:10:"use_shadow";s:1:"0";s:12:"mouse_shadow";s:1:"0";s:3:"box";a:13:{s:7:"enabled";s:4:"true";s:4:"type";s:1:"1";s:5:"theme";s:7:"theme_6";s:9:"imageText";s:16:"data-description";s:15:"linkedImageText";s:10:"data-title";s:10:"background";s:0:"";s:12:"transparency";s:2:"30";s:9:"slideshow";s:5:"false";s:14:"slideshowSpeed";s:4:"2500";s:14:"popupHoverStop";s:4:"true";s:13:"slideshowAuto";s:5:"false";s:10:"popupwidth";s:0:"";s:11:"popupheight";s:0:"";}s:5:"popup";a:1:{s:5:"video";a:4:{s:5:"width";s:3:"853";s:6:"height";s:3:"480";s:8:"autoplay";s:5:"false";s:5:"onEnd";s:1:"0";}}s:7:"preload";a:4:{s:7:"enabled";s:4:"true";s:10:"background";s:7:"#0073AA";s:9:"icon_name";s:7:"default";s:10:"icon_items";s:1:"0";}s:5:"posts";a:9:{s:6:"enable";s:1:"0";s:5:"style";s:1:"0";s:9:"autoposts";s:1:"0";s:15:"autopostsNumber";s:1:"5";s:7:"current";s:3:"671";s:6:"author";s:1:"0";s:4:"date";s:1:"0";s:8:"contents";s:1:"0";s:10:"categories";s:1:"0";}s:5:"pages";a:1:{s:7:"current";s:3:"655";}s:5:"icons";a:12:{s:7:"enabled";s:5:"false";s:13:"overlay_color";s:7:"#3498db";s:15:"overlay_enabled";s:4:"true";s:4:"size";s:2:"16";s:5:"color";s:7:"#ffffff";s:11:"hover_color";s:7:"#ffffff";s:20:"overlay_transparency";s:1:"5";s:10:"background";s:7:"#1e73be";s:16:"background_hover";s:7:"#1e73be";s:14:"bgTransparency";s:1:"0";s:6:"margin";s:1:"5";s:6:"effect";s:17:"hi-icon-effect-5d";}s:14:"captionBuilder";a:5:{s:10:"isOnceUsed";s:1:"1";s:10:"background";a:1:{s:6:"enable";s:1:"1";}s:5:"title";a:5:{s:6:"enable";s:1:"1";s:8:"position";s:13:"center_bottom";s:8:"paddings";a:4:{s:4:"left";s:2:"10";s:5:"right";s:2:"10";s:3:"top";s:2:"20";s:6:"bottom";s:1:"0";}s:7:"bgColor";s:0:"";s:19:"bgColorTransparency";s:1:"0";}s:11:"description";a:8:{s:8:"position";s:13:"center_center";s:8:"paddings";a:4:{s:4:"left";s:1:"0";s:5:"right";s:1:"0";s:3:"top";s:1:"0";s:6:"bottom";s:1:"0";}s:11:"font_family";s:7:"Default";s:9:"font_size";s:2:"14";s:14:"font_size_unit";s:1:"0";s:9:"fontColor";s:0:"";s:7:"bgColor";s:7:"#0c0c0c";s:19:"bgColorTransparency";s:1:"5";}s:5:"icons";a:7:{s:8:"position";s:10:"center_top";s:8:"paddings";a:4:{s:4:"left";s:1:"0";s:5:"right";s:1:"0";s:3:"top";s:1:"0";s:6:"bottom";s:1:"0";}s:21:"popupFontAwesomeClass";s:9:"fa-expand";s:21:"videoFontAwesomeClass";s:0:"";s:20:"linkFontAwesomeClass";s:0:"";s:7:"bgColor";s:0:"";s:19:"bgColorTransparency";s:1:"0";}}s:10:"categories";a:15:{s:6:"preset";s:1:"0";s:7:"enabled";s:5:"false";s:8:"position";s:3:"top";s:5:"align";s:6:"center";s:5:"order";a:1:{i:0;s:7:"__all__";}s:6:"nav_bg";s:7:"#1e73be";s:11:"hide_nav_bg";s:2:"on";s:7:"text_bg";s:7:"#82a0bf";s:12:"hide_text_bg";s:2:"on";s:10:"text_color";s:7:"#1e73be";s:11:"theme_color";s:3:"off";s:7:"padding";a:2:{s:4:"vert";s:1:"3";s:3:"hor";s:2:"10";}s:11:"font_weight";s:6:"normal";s:9:"font_size";s:2:"12";s:6:"border";a:5:{s:5:"width";s:1:"1";s:5:"style";s:5:"solid";s:5:"color";s:7:"#1e73be";s:6:"radius";s:1:"3";s:11:"radius_unit";s:2:"px";}}s:9:"quicksand";a:2:{s:7:"enabled";s:1:"0";s:8:"duration";s:4:"1800";}s:10:"pagination";a:10:{s:6:"preset";s:1:"0";s:7:"enabled";s:5:"false";s:8:"per_page";s:2:"10";s:3:"pos";s:3:"top";s:5:"align";s:4:"left";s:9:"container";a:2:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";}s:4:"text";a:4:{s:10:"background";s:0:"";s:15:"hide_background";s:2:"on";s:5:"color";s:7:"#0a0a0a";s:10:"hide_color";s:3:"off";}s:7:"padding";a:2:{s:8:"vertical";s:1:"4";s:10:"horizontal";s:1:"8";}s:4:"font";a:2:{s:6:"weight";s:6:"normal";s:4:"size";s:2:"13";}s:6:"border";a:5:{s:5:"width";s:1:"1";s:4:"type";s:5:"solid";s:5:"color";s:7:"#999999";s:6:"radius";s:1:"4";s:11:"radius_unit";s:2:"px";}}s:9:"watermark";a:9:{s:7:"enabled";s:0:"";s:8:"show_for";s:1:"3";s:11:"all_img_sel";s:1:"1";s:4:"type";s:3:"img";s:3:"url";s:0:"";s:6:"margin";s:1:"0";s:8:"position";s:13:"center_center";s:6:"rotate";s:1:"0";s:12:"transparency";s:2:"50";}s:7:"buttons";a:12:{s:5:"class";s:0:"";s:5:"color";s:7:"#000000";s:15:"backgroundColor";s:0:"";s:10:"fontFamily";s:7:"Default";s:8:"fontSize";s:0:"";s:10:"fontWeight";s:6:"normal";s:8:"paddingV";s:1:"5";s:8:"paddingH";s:1:"8";s:11:"borderStyle";s:5:"solid";s:11:"borderWidth";s:1:"1";s:11:"borderColor";s:7:"#000000";s:12:"borderRadius";s:1:"2";}s:8:"lazyload";a:1:{s:7:"enabled";s:1:"1";}}',
|
14 |
),
|
15 |
);
|
src/GridGallery/Galleries/configs/tooltips.php
CHANGED
@@ -2,69 +2,118 @@
|
|
2 |
|
3 |
return array(
|
4 |
'tooltips' => array(
|
|
|
|
|
|
|
|
|
|
|
5 |
// Area
|
6 |
-
|
|
|
|
|
7 |
'columns' => __('Number of columns with images on gallery page', 'sgg'),
|
8 |
'responsive-columns' => __('The number of columns for a given width of the screen. We specify the standard 1200px for medium-sized screens, 768px for the tablets, 320 for mobile. You can change this sizes if you want.', 'sgg'),
|
9 |
-
|
10 |
'area-height' => __('Height', 'sgg'),
|
11 |
-
|
12 |
-
'full-screen-width' => __('
|
13 |
-
'area-padding' => __('
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
// Border
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
'
|
|
|
24 |
'display-first-photo' => __('When this option is enabled, only first picture from this gallery will be seen on the website. The other pictures will be seen in the popup window after clicking on the first picture.', 'sgg'),
|
25 |
-
|
26 |
'social-buttons-project' =>__('Select Social Share Buttons project', 'sgg'),
|
|
|
27 |
'gallery-social-sharing' =>__('Enable social share buttons on gallery page', 'sgg'),
|
28 |
'image-social-sharing' =>__('Enable social share buttons on images', 'sgg'),
|
29 |
'popup-social-sharing' =>__('Enable social share buttons in popup images', 'sgg'),
|
30 |
-
|
31 |
// Shadow
|
32 |
-
|
33 |
-
|
34 |
-
'when-mouse-is-over' =>__('
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
'
|
42 |
-
|
43 |
-
'
|
44 |
-
'
|
45 |
-
'
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
'
|
55 |
-
|
56 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
//Categories
|
58 |
-
|
59 |
'animation-duration' =>__('Transition/animation speed in milliseconds', 'sgg'),
|
60 |
'enable-shuffling-animation' =>__('Animated sorting and laying out a group of images', 'sgg'),
|
61 |
//Pagination
|
62 |
-
|
63 |
//Mosaic
|
64 |
'mosaic-images-count' =>__('Show first images', 'sgg'),
|
65 |
-
'mosaic-show-hidden-images' =>__('If this option is enabled
|
66 |
-
|
67 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
68 |
),
|
69 |
'tooltips_icon' => array(
|
70 |
'icon' => 'question'
|
2 |
|
3 |
return array(
|
4 |
'tooltips' => array(
|
5 |
+
// settings page
|
6 |
+
'sgg-shortcode' => __('This shortcode helps you insert your gallery into post or page content. Just copy it and then paste the shortcode into your post or page body. ', 'sgg')
|
7 |
+
. '<a target=\'_blank\' href=\'https://supsystic.com/documentation/add-gallery-site-content\'>https://supsystic.com/documentation/add-gallery-site-content/</a>',
|
8 |
+
'sgg-php-code' => __('You may use PHPCode, if you need to insert a gallery shortcode to your php code directly. ', 'sgg')
|
9 |
+
. '<a target=\'_blank\' href=\'https://supsystic.com/documentation/add-gallery-site-content\'>https://supsystic.com/documentation/add-gallery-site-content/</a>',
|
10 |
// Area
|
11 |
+
'grid-type' => __('Here you can change your gallery type. ', 'sgg') . '</br><img src=@url/Grid.jpg />',
|
12 |
+
'title' => __('Here you can change your gallery name. ', 'sgg') . '<a target=\'_blank\' href=\'https://supsystic.com/documentation/main-settings/\'>https://supsystic.com/documentation/main-settings/</a>',
|
13 |
+
'gallery-align' => __('Choose the most suitable gallery alignment for your site design. Gallery may be aligned by center, left or right side of the page. ', 'sgg') . '<a target=\'_blank\' href=\'https://supsystic.com/documentation/main-settings/\'>https://supsystic.com/documentation/main-settings</a>',
|
14 |
'columns' => __('Number of columns with images on gallery page', 'sgg'),
|
15 |
'responsive-columns' => __('The number of columns for a given width of the screen. We specify the standard 1200px for medium-sized screens, 768px for the tablets, 320 for mobile. You can change this sizes if you want.', 'sgg'),
|
16 |
+
'distance' => __('Here you can set the distance between images in your gallery. This parameter affects both horyzontal and vertical distance.', 'sgg') . '</br><img src=@url/distance_between_photos.jpg />',
|
17 |
'area-height' => __('Height', 'sgg'),
|
18 |
+
'area-width' => __('This option helps you set gallery width in pixels or percents. Note: setting this parameter in percents allows your gallery to adjust to any screen size. ', 'sgg') . '</br><img src=@url/gallery-width.jpg />',
|
19 |
+
'full-screen-width' => __('Check this checkbox if you want your gallery to be displayed at full screen width. This option is of no use in Vertical gallery layout. Click the link below to see the example of Full Screen Width gallery. ', 'sgg') . '<a target=\'_blank\' href=\'https://supsystic.com/example/full-width-gallery-example/\'>https://supsystic.com/example/full-width-gallery-example/</a>',
|
20 |
+
'area-padding' => __('Here you may set gallery padding value in pixels. Padding will be the same from both sides of the gallery. ', 'sgg') . '<a target=\'_blank\' href=\'https://supsystic.com/documentation/main-settings/\'>https://supsystic.com/documentation/main-settings/</a>',
|
21 |
+
'photo-width' => __('Set your image width in pixels or percents. This option is not available in Horizontal gallery. Note: setting this parameter in percents allows your gallery to adjust to any screen size. ', 'sgg') . '</br><img src=@url/width_bet_photos.jpg>',
|
22 |
+
'photo-height' => __('Set your image height in pixels or percents. This option is not available in Vertical gallery. Note: setting this parameter in percents allows your gallery to adjust to any screen size. ', 'sgg') . '</br><img src=@url/height_bet_photos.jpg>',
|
23 |
+
'browserUrlTooltipHideFree' => __('If this option is enabled, the links on the images will not be displayed in the browser. Also, it will be impossible to open gallery in popup. In the case you are not sure, please do not enable the option. ', 'sgg'),
|
24 |
+
'default-settings' =>__('All new galleries you create after enabling the option will be created with these settings by default (even gallery type). Important! This feature may be enabled only in single gallery at once. ', 'sgg'),
|
25 |
// Border
|
26 |
+
'border-type' => __('Select border type for your gallery thumbnails. ', 'sgg') . '<p><img src=@url/solid_border.jpg><img src=@url/Dashed_border.jpg></p><p><img src=@url/dotted_border.jpg><img src=@url/double_border.jpg></p>',
|
27 |
+
// 'border-type' => __('Select border type for your gallery thumbnails. ', 'sgg') . '<a target=\'_blank\' href=\'https://supsystic.com/documentation/border-type/\'>https://supsystic.com/documentation/border-type/</a>',
|
28 |
+
'border-color' => __('Select border color for your gallery thumbnails.', 'sgg'),
|
29 |
+
'border-width' =>__('Select border thickness for your gallery thumbnails.', 'sgg'),
|
30 |
+
'border-radius' => __('Set the radius of corner rounding for your button in pixels. ', 'sgg') . '</br><img src=@url/image-radius.jpg>',
|
31 |
+
'cropQuality' => __('Here you may set the quality of your displayed gallery thumbnails in percents. ', 'sgg') . '<a target=\'_blank\' href=\'https://supsystic.com/documentation/main-settings/\'>https://supsystic.com/documentation/main-settings/</a>',
|
32 |
'display-first-photo' => __('When this option is enabled, only first picture from this gallery will be seen on the website. The other pictures will be seen in the popup window after clicking on the first picture.', 'sgg'),
|
33 |
+
'open-by-link' =>__('If this option is enabled, you may insert your gallery short link into the content of your page. In this case gallery thumbnails will not be displayed on the page and the gallery will open in pop-up box in the same window after clicking on the link. You may find the detailed instructions here: ', 'sgg') . '<a target=\'_blank\' href=\'https://supsystic.com/documentation/gallery-by-link-in-popup/\'>https://supsystic.com/documentation/gallery-by-link-in-popup/</a>',
|
34 |
'social-buttons-project' =>__('Select Social Share Buttons project', 'sgg'),
|
35 |
+
'social-sharing' => __('In order to use this option you need to additionally install Social Share Buttons plugin by Supsystic. ', 'sgg') . '<a target=\'_blank\' href=\'https://supsystic.com/documentation/social-sharing/\'>https://supsystic.com/documentation/social-sharing/</a>',
|
36 |
'gallery-social-sharing' =>__('Enable social share buttons on gallery page', 'sgg'),
|
37 |
'image-social-sharing' =>__('Enable social share buttons on images', 'sgg'),
|
38 |
'popup-social-sharing' =>__('Enable social share buttons in popup images', 'sgg'),
|
39 |
+
|
40 |
// Shadow
|
41 |
+
'sgg-t-shadow' => __('Enable and customize shadows on the background of your thumbnails. ', 'sgg') . '<a target=\'_blank\' href=\'https://supsystic.com/documentation/shadow/\'>https://supsystic.com/documentation/shadow/</a>',
|
42 |
+
'sgg-t-shadow-eff-preset' => __('Choose one of these dramatic shadow effects for your thumbnails.', 'sgg'),
|
43 |
+
'when-mouse-is-over' =>__('This option determines whether the shadow thumbnail appears or disappears when mouse is over it.', 'sgg'),
|
44 |
+
'overlay-type' =>__('If this option is enabled, all image thumbnails in your gallery will be shadowed.', 'sgg'),
|
45 |
+
'shadow-color' => __('Here you may define your shadow color.', 'sgg'),
|
46 |
+
'shadow-blur' =>__('Here you may set the shadow blur in percents. Note: if \'Overlay image with shadow\' option is enabled, your thumbnails may become blurry.', 'sgg'),
|
47 |
+
'shadow-x' =>__('Shadow shifting along X axis.', 'sgg'),
|
48 |
+
'shadow-y' =>__('Shadow shifting along Y axis.', 'sgg'),
|
49 |
+
//popup
|
50 |
+
'box' => __('Customize your pop-up image settings. ', 'sgg') . '<a target=\'_blank\' href=\'https://supsystic.com/documentation/pop-up-image/\'>https://supsystic.com/documentation/pop-up-image/</a>',
|
51 |
+
'sgg-t-popup-theme' => __('Choose the most attractive and convenient theme for your pop-up box. Note: \'Linked images\' option works only with Theme #7.', 'sgg'),
|
52 |
+
'mobile' =>__('If this option is enabled, your pop-up box will not show up on mobile devices.', 'sgg'),
|
53 |
+
'popup-image-text' =>__('Here you may select the type of text that will be displayed in your popup box.', 'sgg'),
|
54 |
+
'captions' =>__('If this option is enabled, your captions will not be displayed in pop-up box. ', 'sgg'),
|
55 |
+
'hide-long-tooltip-titles' => __('In order to see the whole caption text in popup window you should hover on it and a new semi-transparent box with the whole text will appear. If you don\'t use long texts in captions, just tick this checkbox and extra tooltip in popup will be disabled.', 'sgg'),
|
56 |
+
'box-background' => __('Choose color for pop-up page background. ', 'sgg'),
|
57 |
+
'box-transparency' => __('Choose pop-up background transparency.', 'sgg'),
|
58 |
+
'slideshow' =>__('Enable and customize the slideshow option in your pop-up box.', 'sgg'),
|
59 |
+
'sgg-t-popup-slide-show-speed' => __('Set the speed of changing slide in milliseconds.', 'sgg'),
|
60 |
+
'popupHoverStop' => __('If this option is enabled, slideshow pauses, when mouse cursor is over image.', 'sgg'),
|
61 |
+
'sgg-t-popup-slideshow-autostart' => __('If this option is enabled, slideshow starts automatically. If it is disabled, the play/pause button will appear in left down corner of your pop-up gallery window.', 'sgg'),
|
62 |
+
'box-popupsize' => __('Here you may set your pop-up image size.', 'sgg'),
|
63 |
+
'box-disableHistory' => __('If this option is enabled, after clicking \'back\' button in your browser, pop-up window will be closed and all image data will be cleared. If disabled - images will be saved in browser history and will be opened again on \'back\' or \'forward\' button click.', 'sgg'),
|
64 |
+
// lazy-load
|
65 |
+
'sgg-t-lazyload-enable' => __('This option is important for big galleries. When it is enabled, images are loading gradually as the page scrolls down.', 'sgg'),
|
66 |
+
// Gallery Loader
|
67 |
+
'preload' =>__('This option enables animated loader to indicate, that images are loading. ', 'sgg') . '<a target=\'_blank\' href=\'https://supsystic.com/documentation/gallery-loader/\'>https://supsystic.com/documentation/gallery-loader/</a>',
|
68 |
+
// caption and icons
|
69 |
+
'sgg-ci-caption-enable' => __('If this option is enabled, captions are displayed when mouse cursor is over the thumbnail. You may also find detailed caption settings below. ', 'sgg') . '<a target=\'_blank\' href=\'https://supsystic.com/documentation/captions/\'>https://supsystic.com/documentation/captions/</a>',
|
70 |
+
'chooseEffect' => __('Choose your captions visual effect. If you are going to enable icons, you need to choose effects with icons. ', 'sgg'),
|
71 |
+
'polaroid-effect' => __('If this option is enabled, your gallery image thumbnails will be displayed in Polaroid style frames. Images will be cropped to a square shape. Captions will apperar below the thumbnails when hovering mouse over it. ', 'sgg') . '<a target=\'_blank\' href=\'https://supsystic.com/documentation/polaroid-gallery/\'>https://supsystic.com/documentation/polaroid-gallery/</a>',
|
72 |
+
'polaroid-animation' => __('If this option is enabled, your polaroid image thumbnails move when mouse cursor is over them. ', 'sgg') . '<a target=\'_blank\' href=\'https://supsystic.com/documentation/polaroid-gallery/\'>https://supsystic.com/documentation/polaroid-gallery/</a>',
|
73 |
+
'polaroid-scattering' => __('Choose this option to make your polaroid image thumbnails scatter in a random way. ', 'sgg') . '<a target=\'_blank\' href=\'https://supsystic.com/documentation/polaroid-gallery/\'>https://supsystic.com/documentation/polaroid-gallery/</a>',
|
74 |
+
'polaroid-frame-width' => __('Set polaroid frame padding in pixels. Note: increasing this parameter may make your thumbnail images smaller. ', 'sgg') . '<a target=\'_blank\' href=\'https://supsystic.com/documentation/polaroid-gallery/\'>https://supsystic.com/documentation/polaroid-gallery/</a>',
|
75 |
+
'overlay-background' => __('Choose your caption background color.', 'sgg'),
|
76 |
+
'overlay-foreground' => __('Choose your caption text color.', 'sgg'),
|
77 |
+
'overlay-transparency' => __('Choose your caption background transparency.', 'sgg'),
|
78 |
+
'text-size' => __('Set your caption text size.', 'sgg'),
|
79 |
+
'text-align' => __('Choose the horizontal align for your caption text.', 'sgg'),
|
80 |
+
'overlay-position' => __('Choose the vertical align for your caption text.', 'sgg'),
|
81 |
+
'font-family' => __('Choose font family for your caption text.', 'sgg'),
|
82 |
+
'tooltip' =>__('If this option is enabled, image title will not appear when mouse cursor is over the image.', 'sgg'),
|
83 |
+
'ismobile' =>__('When this option is enabled, caption will be always visible when gallery is displayed on mobile devices.', 'sgg'),
|
84 |
+
'photo-icon' =>__('If this option is enabled, icons are displayed when mouse cursor is over the thumbnail. Icons make your gallery interactive and allow your site visitors to take different actions with thumbnails. ', 'sgg') . '</br><img src=@url/icons.jpg />',
|
85 |
+
'ci-icons-animation-effects' => __('Here you may choose the animation effects for your icon symbols. Chosen effect will be the same for all the icons.', 'sgg'),
|
86 |
+
'ci-icons-color' => __('Choose the color for your icon symbols.', 'sgg'),
|
87 |
+
'ci-icons-hover-color' => __('Choose the color for your icon symbols while hovering over them.', 'sgg'),
|
88 |
+
'ci-icons-bg-color' => __('Choose the color for your icon backgrounds while hovering over them.', 'sgg'),
|
89 |
+
'ci-icons-hover-bg-color' => __('Choose the icon background color transparency.', 'sgg'),
|
90 |
+
'ci-icons-hover-size' => __('Here you may set icons size in pixels.', 'sgg'),
|
91 |
+
'ci-icons-distance' => __('Set the distance between icons. Note: you may set this parameter only for several icons. ', 'sgg'),
|
92 |
+
'ci-icons-show-overlay' => __('This option enables icon background overlay.', 'sgg'),
|
93 |
+
'ci-icons-overlay-color' => __('Choose the background overlay color.', 'sgg'),
|
94 |
+
'ci-icons-overlay-transparency' => __('Set the value for overlay transparency in percents.', 'sgg'),
|
95 |
+
'overlay-personal' => __('If option enabled you can choose personal caption effect per image in images list. If option disabled chosen effect will be used for all images', 'sgg'),
|
96 |
+
'overlay-effect-image-on-hover-enable' => __('\'Image on hover\' - If this effect is enabled, the other image will be shown on the place of the current one, when mouse cursor is over it. The other image could be selected in the option below (\'Select Image on hover\') and will be shown for all images in this gallery. In case you want to show different pictures, upload them for each image separately on Images List section (\'Hover Caption Image\' tab). Please note, that \'Personal Captions\' option should be enabled.', 'sgg'),
|
97 |
+
'overlay-effect-image-on-hover' => __('You may upload an image from Wordpress media library. This image will appear while hovering over any gallery thumbnail.', 'sgg'),
|
98 |
+
'isDisableMobileCaption' =>__('When this option is enabled, caption will never be seen when gallery is displayed on mobile devices.', 'sgg'),
|
99 |
//Categories
|
100 |
+
'categories-show' =>__('This option allows you to arrange your gallery images by categories. It may be useful for the galleries with great amount of images. ', 'sgg') . '</br><img src=@url/show_categories.jpg />',
|
101 |
'animation-duration' =>__('Transition/animation speed in milliseconds', 'sgg'),
|
102 |
'enable-shuffling-animation' =>__('Animated sorting and laying out a group of images', 'sgg'),
|
103 |
//Pagination
|
104 |
+
'pages-show' =>__('This option allows you to split your gallery images to several pages for comfortable navigation. It may be useful for the galleries with great amount of images. ', 'sgg') . '</br><img src=@url/enable_pagination.jpg />',
|
105 |
//Mosaic
|
106 |
'mosaic-images-count' =>__('Show first images', 'sgg'),
|
107 |
+
'mosaic-show-hidden-images' =>__('If this option is enabled, all hidden thumbnails will be displayed below after clicking on thumbnail with count.', 'sgg'),
|
108 |
+
// horizontal scroll
|
109 |
+
'horizontal-scroll' => __('This option enables horizontal scroll bar for your gallery. You may customize your scroll bar below. Please note, that this option is not available for Mosaic gallery layout. ', 'sgg') . '<a target=\'_blank\' href=\'https://supsystic.com/documentation/horizontal-scroll/\'>https://supsystic.com/documentation/horizontal-scroll/</a>',
|
110 |
+
'horizontal-scroll-color' => __('Choose the color of your horizontal scrollbar', 'sgg'),
|
111 |
+
'horizontal-scroll-transparency' => __('Choose the transparency of your horizontal scrollbar', 'sgg'),
|
112 |
+
'hscroll-mouse-wheel' =>__('You may increase or decrease the mouse scrolling speed for those, who use desktop PC\'s or laptops by changing value of scroll step', 'sgg'),
|
113 |
+
'hscroll-touch-gest' =>__('You may increase or decrease the gesture scrolling speed for those, who use the devices with touchscreen by changing value of scroll step', 'sgg'),
|
114 |
+
'hScrollResponsiveMode' => __('If this option is enabled, images automatically adjust to the screen size of the mobile device.', 'sgg'),
|
115 |
+
// custom buttons
|
116 |
+
'custom-buttons-preview' => __('Here you may find a great number of presets to customize your gallery buttons. ', 'sgg') . '<a target=\'_blank\' href=\'https://supsystic.com/documentation/custom-buttons/\'>https://supsystic.com/documentation/custom-buttons/</a>',
|
117 |
),
|
118 |
'tooltips_icon' => array(
|
119 |
'icon' => 'question'
|
src/GridGallery/Galleries/views/gallery_preset.twig
CHANGED
@@ -1,8 +1,9 @@
|
|
1 |
{% extends 'grid-gallery.twig' %}
|
2 |
|
3 |
{% macro putPreset(data) %}
|
4 |
-
<div class="preset {% if environment.isPro() == false and data.pro %}disabled{% endif %}"
|
5 |
-
|
|
|
6 |
{% if data.pro and environment.isPro() == false %}
|
7 |
<img onclick="document.location='{{ data.link }}'" src="{{ environment.getModule('galleries').getLocationUrl() }}/assets/img/{{ data.image }}" alt=""/>
|
8 |
<a class="button button-primary" href="{{ data.link }}" style="position: absolute; top: 50%; left: 30%; background-color: #ffffff;">
|
@@ -32,9 +33,16 @@
|
|
32 |
{% endblock %}
|
33 |
|
34 |
{% block content %}
|
|
|
|
|
35 |
<h3 style="margin-left: 10px;padding-bottom: 10px !important;border-bottom: 1px solid;">{{ translate('Choose Gallery Template. You can change template and settings on the next step.') }}</h3>
|
36 |
<div id="gg-create-gallery-text">
|
37 |
-
<h3 style="float: left; margin: 10px !important;">{{ translate('Gallery Name:') }}
|
|
|
|
|
|
|
|
|
|
|
38 |
<input name="title" type="text" style="float: left; width: 60%; height: 36px;"/>
|
39 |
<button id="gallery-create" class="button button-primary" type="button" style="height:37px;">
|
40 |
<i class="fa fa-check"></i>
|
@@ -53,15 +61,42 @@
|
|
53 |
{% import _self as preset %}
|
54 |
|
55 |
{% set presets = [
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
] %}
|
66 |
|
67 |
{#Pro presets#}
|
1 |
{% extends 'grid-gallery.twig' %}
|
2 |
|
3 |
{% macro putPreset(data) %}
|
4 |
+
<div class="preset supsystic-tooltip {% if environment.isPro() == false and data.pro %}disabled{% endif %}"
|
5 |
+
title="{{ data.tooltip | raw }}"
|
6 |
+
data-preset="{{ data.value }}">
|
7 |
{% if data.pro and environment.isPro() == false %}
|
8 |
<img onclick="document.location='{{ data.link }}'" src="{{ environment.getModule('galleries').getLocationUrl() }}/assets/img/{{ data.image }}" alt=""/>
|
9 |
<a class="button button-primary" href="{{ data.link }}" style="position: absolute; top: 50%; left: 30%; background-color: #ffffff;">
|
33 |
{% endblock %}
|
34 |
|
35 |
{% block content %}
|
36 |
+
{% import '@core/helpers.twig' as hlp %}
|
37 |
+
|
38 |
<h3 style="margin-left: 10px;padding-bottom: 10px !important;border-bottom: 1px solid;">{{ translate('Choose Gallery Template. You can change template and settings on the next step.') }}</h3>
|
39 |
<div id="gg-create-gallery-text">
|
40 |
+
<h3 style="float: left; margin: 10px !important;">{{ translate('Gallery Name:') }}
|
41 |
+
{{ hlp.showTooltip(
|
42 |
+
translate('Type your new gallery name here. It is for internal use only and will not be visible on your site.')
|
43 |
+
~ ' <a target=\'_blank\' href=\'https://supsystic.com/documentation/gallery-getting-started/\'>https://supsystic.com/documentation/gallery-getting-started/</a>'
|
44 |
+
, 'top', true) }}
|
45 |
+
</h3>
|
46 |
<input name="title" type="text" style="float: left; width: 60%; height: 36px;"/>
|
47 |
<button id="gallery-create" class="button button-primary" type="button" style="height:37px;">
|
48 |
<i class="fa fa-check"></i>
|
61 |
{% import _self as preset %}
|
62 |
|
63 |
{% set presets = [
|
64 |
+
{
|
65 |
+
'title':'Standard Gallery', 'image':'template1.jpg', 'pro': false, 'value': 1,
|
66 |
+
'tooltip': translate('Gallery with fixed grid. If the original image is larger, the picture will be proportionally reduced and cropped to the specified thumbnail size.') ~ ' <a target=\'_blank\' href=\'https://supsystic.com/documentation/fixed-type/\'>https://supsystic.com/documentation/fixed-type/</a>'
|
67 |
+
},
|
68 |
+
{
|
69 |
+
'title':'Vertical Gallery', 'image':'template2.jpg', 'pro': false, 'value': 2,
|
70 |
+
'tooltip': translate('In this gallery images are arranged into vertical columns. In vertical gallery type you may set image width only, image height will change automatically, accordingly to original size proportions.') ~ ' <a target=\'_blank\' href=\'https://supsystic.com/documentation/vertical-type/\'>https://supsystic.com/documentation/vertical-type/</a>'
|
71 |
+
},
|
72 |
+
{
|
73 |
+
'title':'Rounded Gallery', 'image':'template3.jpg', 'pro': false, 'value': 3,
|
74 |
+
'tooltip': translate('Gallery with rounded thumbnails and fixed grid. Images will be proportionally reduced and cropped to the specified thumbnail size and shape.')
|
75 |
+
},
|
76 |
+
{
|
77 |
+
'title':'Horizontal Gallery', 'image':'template4.jpg', 'pro': false, 'value': 4,
|
78 |
+
'tooltip': translate('In this gallery images are arranged into horizontal rows. In horizontal gallery type you may set image height only, image width will change automatically, accordingly to original size proportions.') ~ ' <a target=\'_blank\' href=\'https://supsystic.com/documentation/horizontal-type/\'>https://supsystic.com/documentation/horizontal-type/</a>'
|
79 |
+
},
|
80 |
+
{
|
81 |
+
'title':'Categories and Icons', 'image':'template5.jpg', 'pro': true, 'value': 5, 'link': 'https://supsystic.com/categories-gallery-example/',
|
82 |
+
'tooltip': translate('If choosing this gallery template you may easily arrange your images by categories and add icons. Get step by step instructions from our knowledge base.') ~ ' <a target=\'_blank\' href=\'https://supsystic.com/documentation/categories/\'>https://supsystic.com/documentation/categories/</a>'
|
83 |
+
},
|
84 |
+
{
|
85 |
+
'title':'Post feed and Pagination', 'image':'template6.jpg', 'pro': true, 'value': 6, 'link': 'https://supsystic.com/pagination-gallery-example/',
|
86 |
+
'tooltip': translate('This gallery template with active presets of post feed and pagination options will help you organize handy post feed navigation. Note: you don\'t need to add images to your gallery if using it as a post feed. You should add them directly at the post body.') ~ ' <a target=\'_blank\' href=\'https://supsystic.com/example/pagination-gallery-example/\'>https://supsystic.com/example/pagination-gallery-example/</a>'
|
87 |
+
},
|
88 |
+
{
|
89 |
+
'title':'Post feed Slide Up', 'image':'template7.jpg', 'pro': true, 'value': 7, 'link': 'https://supsystic.com/post-feed-slide-up/',
|
90 |
+
'tooltip': translate('This gallery template with active presets of post feed slide up helps you create a stylish post feed with sliding highlight effect. Note: you don\'t need to add images to your gallery if using it as a post feed. You should add them directly at the post body.') ~ ' <a target=\'_blank\' href=\'https://supsystic.com/example/post-feed-slide-up/\'>https://supsystic.com/example/post-feed-slide-up/</a>'
|
91 |
+
},
|
92 |
+
{
|
93 |
+
'title':'Post feed Description', 'image':'template8.jpg', 'pro': true, 'value': 8, 'link': 'https://supsystic.com/post-feed-description/',
|
94 |
+
'tooltip': translate('Gallery template with small images and fixed place for description. Suits perfectly for Feedback page or \'Our Team\' presentation page. Note: you don\'t need to add images to your gallery if using it as a post feed. You should add them directly at the post body.') ~ ' <a target=\'_blank\' href=\'https://supsystic.com/example/post-feed-description/\'>https://supsystic.com/example/post-feed-description/</a>'
|
95 |
+
},
|
96 |
+
{
|
97 |
+
'title':'Mosaic Gallery', 'image':'template9.png', 'pro': true, 'value': 9, 'link': 'https://supsystic.com/mosaic-gallery-example/',
|
98 |
+
'tooltip': translate('Cute mosaic gallery layout with enabled captions.') ~ ' <a target=\'_blank\' href=\'https://supsystic.com/documentation/gallery-mosaic-type/\'>https://supsystic.com/documentation/gallery-mosaic-type/</a>'
|
99 |
+
},
|
100 |
] %}
|
101 |
|
102 |
{#Pro presets#}
|
src/GridGallery/Galleries/views/helpers/pagination_view.twig
CHANGED
@@ -1,8 +1,13 @@
|
|
1 |
{% macro paginationRender(settings) %}
|
2 |
{% import '@core/form.twig' as form %}
|
|
|
3 |
|
4 |
<div class="gg-sett-pagination-wrapper">
|
5 |
<label class="gg-pagination-per-page-lbl">{{ translate('Select images per page') }}
|
|
|
|
|
|
|
|
|
6 |
{{ form.select('gg-pagination-per-page', settings.info.perPageArr, settings.info.perPage, {
|
7 |
'id': 'gg-pagination-per-page',
|
8 |
}) }}
|
1 |
{% macro paginationRender(settings) %}
|
2 |
{% import '@core/form.twig' as form %}
|
3 |
+
{% import '@core/helpers.twig' as hlp %}
|
4 |
|
5 |
<div class="gg-sett-pagination-wrapper">
|
6 |
<label class="gg-pagination-per-page-lbl">{{ translate('Select images per page') }}
|
7 |
+
{{ hlp.showTooltip(
|
8 |
+
translate('Here you may choose the amount of images per page, displayed at the image list below. ')
|
9 |
+
~ '<a target=\'_blank\' href=\'https://supsystic.com/documentation/images-settings/\'>https://supsystic.com/documentation/images-settings/</a>'
|
10 |
+
, 'top', true) }}
|
11 |
{{ form.select('gg-pagination-per-page', settings.info.perPageArr, settings.info.perPage, {
|
12 |
'id': 'gg-pagination-per-page',
|
13 |
}) }}
|
src/GridGallery/Galleries/views/index.twig
CHANGED
@@ -58,7 +58,7 @@
|
|
58 |
<li>
|
59 |
<a href="{{ environment.generateUrl('galleries', 'settings', { 'gallery_id': gallery.id }) }}"
|
60 |
class="button background">
|
61 |
-
|
62 |
{{ translate('Settings') }}
|
63 |
</a>
|
64 |
</li>
|
58 |
<li>
|
59 |
<a href="{{ environment.generateUrl('galleries', 'settings', { 'gallery_id': gallery.id }) }}"
|
60 |
class="button background">
|
61 |
+
<i class="fa fa-cogs"></i>
|
62 |
{{ translate('Settings') }}
|
63 |
</a>
|
64 |
</li>
|
src/GridGallery/Galleries/views/r314/shortcode/helpers.twig
CHANGED
@@ -183,8 +183,8 @@
|
|
183 |
{% set videoIcon = 'youtu' in photo.attachment.video ? 'icon-youtube' : 'icon-vimeo' %}
|
184 |
|
185 |
{% set iconStyle %}
|
186 |
-
|
187 |
-
|
188 |
{% endset %}
|
189 |
|
190 |
<a href="{{ videoUrl|trim }}" class="hi-icon gg-video {{ videoIcon }}" style="{{ iconStyle|trim }}">
|
183 |
{% set videoIcon = 'youtu' in photo.attachment.video ? 'icon-youtube' : 'icon-vimeo' %}
|
184 |
|
185 |
{% set iconStyle %}
|
186 |
+
margin-left:{{ settings.icons.margin|default(5) ~ 'px' }};
|
187 |
+
margin-right:{{ settings.icons.margin|default(5) ~ 'px' }};
|
188 |
{% endset %}
|
189 |
|
190 |
<a href="{{ videoUrl|trim }}" class="hi-icon gg-video {{ videoIcon }}" style="{{ iconStyle|trim }}">
|
src/GridGallery/Galleries/views/r314/shortcode/post_helpers.twig
CHANGED
@@ -152,7 +152,7 @@
|
|
152 |
src="{{ get_attachment(photo.photoId, width, height, crop) }}" />
|
153 |
</div>
|
154 |
{% set postCropStyle %}
|
155 |
-
|
156 |
text-align: center;
|
157 |
text-transform: uppercase;
|
158 |
{% endset %}
|
@@ -265,7 +265,7 @@
|
|
265 |
{% set postCropStyle %}
|
266 |
text-align: center;
|
267 |
text-transform: uppercase;
|
268 |
-
|
269 |
{% endset %}
|
270 |
|
271 |
{% set figcaptionStyle %}
|
152 |
src="{{ get_attachment(photo.photoId, width, height, crop) }}" />
|
153 |
</div>
|
154 |
{% set postCropStyle %}
|
155 |
+
width: {{ width - 20 }}px;
|
156 |
text-align: center;
|
157 |
text-transform: uppercase;
|
158 |
{% endset %}
|
265 |
{% set postCropStyle %}
|
266 |
text-align: center;
|
267 |
text-transform: uppercase;
|
268 |
+
width: {{ width - 20 }}px;
|
269 |
{% endset %}
|
270 |
|
271 |
{% set figcaptionStyle %}
|
src/GridGallery/Galleries/views/settings.twig
CHANGED
@@ -38,12 +38,12 @@
|
|
38 |
|
39 |
<a class="nav-tab change-tab" href="overlay">
|
40 |
<i class="fa fa-info"></i>
|
41 |
-
<span class="nav-tab-item-span">{{ translate('Captions') }}</span>
|
42 |
</a>
|
43 |
|
44 |
<a class="nav-tab change-tab" href="cats">
|
45 |
<i class="fa fa-bookmark-o"></i>
|
46 |
-
<span class="nav-tab-item-span">{{ translate('Categories') }}</span>
|
47 |
</a>
|
48 |
|
49 |
<a class="nav-tab change-tab" href="post">
|
@@ -68,6 +68,29 @@
|
|
68 |
{% import '@galleries/helpers/attachment.twig' as attachment %}
|
69 |
{% import '@core/form.twig' as form %}
|
70 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
<div id="preview" class="gallery-preview">
|
72 |
<section class="supsystic-bar-preview" id="single-gallery-toolbar">
|
73 |
<ul class="supsystic-bar-controls">
|
@@ -119,7 +142,7 @@
|
|
119 |
{% endif %}
|
120 |
{% endblock %}
|
121 |
>
|
122 |
-
|
123 |
|
124 |
{% if settings.area.photo_width_unit == 0 %}
|
125 |
{% set width = settings.area.photo_width %}
|
@@ -160,12 +183,14 @@
|
|
160 |
/>
|
161 |
{% set figcaptionBlockFree %}
|
162 |
<figcaption style="{{ figcaptionStyle|trim }}">
|
163 |
-
<div style="display: table; height: 100%; width: 100%;">
|
164 |
<div class="grid-gallery-figcaption-wrap" style="display: table-cell;">
|
165 |
<span {% if settings.rtl == true %}dir="rtl" class="ggRtlClass"{% endif %}>Gallery by Supsystic</span>
|
166 |
</div>
|
167 |
</div>
|
|
|
168 |
</figcaption>
|
|
|
169 |
{% endset %}
|
170 |
|
171 |
{% block settginsFigCaption %}
|
@@ -184,8 +209,14 @@
|
|
184 |
<div style="clear: both;"></div>
|
185 |
|
186 |
<div class="shortcode-wrap" style="margin-top: 20px">
|
187 |
-
|
188 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
189 |
</div>
|
190 |
|
191 |
<small style="left:25px;position:absolute;top:10px;display:none;">Oops! Transparency doesn't work in live preview. </small>
|
@@ -258,7 +289,7 @@
|
|
258 |
|
259 |
<div class="gg-wraper-anchor-nav-links" style="display: none;">
|
260 |
<a href="#gg-anl-main" class="gg-anchor-nav-links">{{ translate('Type')}}</a>
|
261 |
-
<a href="#gg-mosaic-image-count-text-wrapper" class="gg-anchor-nav-links ggSettingsDisplNone" id="gg-anl-mosaic-settings-link">{{ translate('Image Count
|
262 |
<a href="#gg-anl-soc-share" class="gg-anchor-nav-links">{{ translate('Social')}}</a>
|
263 |
<a href="#gg-anl-load-more" class="gg-anchor-nav-links" id="gg-anl-load-more-link">{{ translate('Load More')}}</a>
|
264 |
<a href="#gg-anl-cust-button" class="gg-anchor-nav-links">{{ translate('Buttons')}}</a>
|
@@ -335,11 +366,11 @@
|
|
335 |
form.input('text', 'title', gallery.title|raw, { 'style': { 'width': '232px;' } })
|
336 |
, 'title') }}
|
337 |
|
338 |
-
|
339 |
-
|
340 |
|
341 |
|
342 |
-
|
343 |
form.input('number', 'area[distance]', settings.area.distance, { 'style': { 'width': '140px;' } })
|
344 |
~ form.span('', 'pixels'), 'distance') }}
|
345 |
|
@@ -443,7 +474,7 @@
|
|
443 |
{% block disableRightClick %}
|
444 |
{% endblock %}
|
445 |
|
446 |
-
|
447 |
form.checkbox(
|
448 |
'defaultsettings',
|
449 |
'1',
|
@@ -493,7 +524,14 @@
|
|
493 |
|
494 |
|
495 |
{{ form.row(translate('Gallery Sharing'),
|
496 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
497 |
|
498 |
{{ form.row(translate('Buttons position'),
|
499 |
form.select('socialSharing[gallerySharing][buttonsPosition]',
|
@@ -511,7 +549,14 @@
|
|
511 |
|
512 |
{% set enabled = settings.socialSharing.imageSharing.enabled %}
|
513 |
{{ form.row(translate('Image Sharing'),
|
514 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
515 |
|
516 |
{{ form.row(translate('Buttons position'),
|
517 |
form.select('socialSharing[imageSharing][buttonsPosition]',
|
@@ -552,7 +597,14 @@
|
|
552 |
|
553 |
{% set enabled = settings.socialSharing.popupImageSharing.enabled %}
|
554 |
{{ form.row(translate('Popup Image Sharing'),
|
555 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
556 |
|
557 |
{{ form.row(translate('Buttons position'),
|
558 |
form.select('socialSharing[popupImageSharing][buttonsPosition]',
|
@@ -762,6 +814,7 @@
|
|
762 |
<th scope="row">
|
763 |
<h3 style="margin: 0 !important;">
|
764 |
{{ translate('Shadow') }}
|
|
|
765 |
</h3>
|
766 |
</th>
|
767 |
<td>
|
@@ -775,7 +828,8 @@
|
|
775 |
<tbody>
|
776 |
<tr>
|
777 |
<th scope="row">
|
778 |
-
{{ translate('Shadow preset') }}
|
|
|
779 |
</th>
|
780 |
<td>
|
781 |
<button id="chooseShadowPreset" class="button bordered" type="button">
|
@@ -865,7 +919,7 @@
|
|
865 |
'box[theme]',
|
866 |
settings.box.theme,
|
867 |
{'id':'bigImageTheme'}
|
868 |
-
|
869 |
}}
|
870 |
|
871 |
{# Enable/Disable popup on mobile devices #}
|
@@ -949,7 +1003,7 @@
|
|
949 |
'captions')
|
950 |
}}
|
951 |
|
952 |
-
|
953 |
form.checkbox(
|
954 |
'hideLongTooltipTitles',
|
955 |
'on',
|
@@ -968,7 +1022,7 @@
|
|
968 |
}}
|
969 |
|
970 |
{# Popup overlay transparency #}
|
971 |
-
|
972 |
form.select(
|
973 |
'box[transparency]',
|
974 |
{
|
@@ -997,8 +1051,9 @@
|
|
997 |
settings.box.slideshow|default('false'),
|
998 |
{'style': 'width: auto'}
|
999 |
),
|
1000 |
-
|
1001 |
-
|
|
|
1002 |
|
1003 |
{# Popup slideshow speed #}
|
1004 |
{{ form.row(translate('Slideshow speed'),
|
@@ -1008,7 +1063,7 @@
|
|
1008 |
settings.box.slideshowSpeed|default(2500),
|
1009 |
{'style': {'width': 'auto'}},
|
1010 |
'box-slideshowSpeed'
|
1011 |
-
|
1012 |
}}
|
1013 |
|
1014 |
{# Popup slideshow mouse hover stop #}
|
@@ -1031,7 +1086,7 @@
|
|
1031 |
settings.box.slideshowAuto|default('false'),
|
1032 |
{'style': 'width: auto'},
|
1033 |
'box-slideshowAuto'
|
1034 |
-
|
1035 |
}}
|
1036 |
|
1037 |
{# Popup image size #}
|
@@ -1179,7 +1234,7 @@
|
|
1179 |
translate('Disable'),
|
1180 |
'lazyLoadDisabled'
|
1181 |
),
|
1182 |
-
'lazyload-
|
1183 |
true,
|
1184 |
'sggLazyLoadEnableRow'
|
1185 |
)}}
|
@@ -1246,7 +1301,7 @@
|
|
1246 |
{% block additionalCaptionSettings %}
|
1247 |
<table class="form-table" name="captionAdditSett" id="gg-anl-caption-add-sett">
|
1248 |
<thead>
|
1249 |
-
{{ form.rowpro(translate('
|
1250 |
'utm_source=plugin&utm_medium=additinalCaptionSettings&utm_campaign=gallery',
|
1251 |
'additionalCaptionSettingInPro',
|
1252 |
form.radio(
|
@@ -1273,6 +1328,11 @@
|
|
1273 |
</thead>
|
1274 |
</table>
|
1275 |
{% endblock %}
|
|
|
|
|
|
|
|
|
|
|
1276 |
</div>
|
1277 |
|
1278 |
{% block post %}
|
@@ -1322,9 +1382,9 @@
|
|
1322 |
'sqkwoosh': 'Skwoosh',
|
1323 |
'tunnel': 'Tunnel',
|
1324 |
'direction-aware': 'Direction Aware',
|
1325 |
-
'phophorus-rotate': '
|
1326 |
-
'phophorus-offset': '
|
1327 |
-
'phophorus-scale': '
|
1328 |
'cube': 'Cube',
|
1329 |
'polaroid': 'Polaroid',
|
1330 |
'3d-cube' : '3D Cube',
|
@@ -1347,15 +1407,26 @@
|
|
1347 |
{{ form.rowpro(translate('Use Caption Builder'),
|
1348 |
'utm_source=plugin&utm_medium=caption_settings_type&utm_campaign=gallery',
|
1349 |
'caption-settings-type-pro',
|
1350 |
-
form.
|
1351 |
-
'
|
1352 |
-
|
1353 |
-
|
1354 |
-
|
1355 |
-
|
1356 |
-
'
|
1357 |
-
|
1358 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1359 |
)}}
|
1360 |
</tbody>
|
1361 |
</table>
|
@@ -1394,7 +1465,7 @@
|
|
1394 |
translate('Disable'),
|
1395 |
'hideCaptions'
|
1396 |
),
|
1397 |
-
'', true, 'useCaptions')
|
1398 |
}}
|
1399 |
|
1400 |
{# Choise effect #}
|
@@ -1458,8 +1529,9 @@
|
|
1458 |
polaroidIsEnable,
|
1459 |
{'style': 'width: auto;', 'class' : 'polaroid-effect-class'}
|
1460 |
),
|
1461 |
-
|
1462 |
-
|
|
|
1463 |
|
1464 |
{# Enable/Disable polaroid animation #}
|
1465 |
{{ form.row(translate('Polaroid Image Animation'),
|
@@ -1579,7 +1651,7 @@
|
|
1579 |
|
1580 |
|
1581 |
{# Hide image tooltip(browser default tooltip) #}
|
1582 |
-
{{ form.row(translate('Hide image title
|
1583 |
form.select(
|
1584 |
'thumbnail[tooltip]',
|
1585 |
{'false': translate('No'), 'true': translate('Yes')},
|
@@ -1590,7 +1662,7 @@
|
|
1590 |
}}
|
1591 |
|
1592 |
{# Mobile - show always caption(show none effect in mobile devices) #}
|
1593 |
-
{{ form.row(translate('
|
1594 |
form.select(
|
1595 |
'thumbnail[isMobile]',
|
1596 |
{'false': translate('No'), 'true': translate('Yes')},
|
@@ -1618,7 +1690,7 @@
|
|
1618 |
<table class="form-table" name="icons">
|
1619 |
<thead>
|
1620 |
{% set iconsEnabled = settings.icons.enabled|default('false') == 'true' %}
|
1621 |
-
{{ form.row(translate('
|
1622 |
form.radio('icons[enabled]', 'true', {'id':'icons-enable'}|merge(iconsEnabled ? {'checked':'checked'} : {})) ~
|
1623 |
form.label(translate('Enable'), 'icons-enable') ~
|
1624 |
form.radio('icons[enabled]', 'false', {'id':'icons-disable'}|merge(iconsEnabled ? {} : {'checked':'checked'})) ~
|
@@ -1626,13 +1698,15 @@
|
|
1626 |
}}
|
1627 |
</thead>
|
1628 |
<tbody>
|
1629 |
-
{{ form.row(translate('
|
1630 |
-
form.button(null, translate('Animation'), {'class': 'button bordered', 'id': 'selectIconsEffect'})
|
|
|
1631 |
) }}
|
1632 |
<tr>
|
1633 |
<th scope="row">
|
1634 |
<label for="iconsColor">
|
1635 |
{{ translate('Icons color') }}
|
|
|
1636 |
</label>
|
1637 |
</th>
|
1638 |
<td>
|
@@ -1643,6 +1717,7 @@
|
|
1643 |
<th scope="row">
|
1644 |
<label for="iconsHoverColor">
|
1645 |
{{ translate('Icons hover color') }}
|
|
|
1646 |
</label>
|
1647 |
</th>
|
1648 |
<td>
|
@@ -1653,6 +1728,7 @@
|
|
1653 |
<th scope="row">
|
1654 |
<label for="iconsBackgroundColor">
|
1655 |
{{ translate('Background color') }}
|
|
|
1656 |
</label>
|
1657 |
</th>
|
1658 |
<td>
|
@@ -1663,6 +1739,7 @@
|
|
1663 |
<th scope="row">
|
1664 |
<label for="iconsBackgroundHoverColor">
|
1665 |
{{ translate('Background hover color') }}
|
|
|
1666 |
</label>
|
1667 |
</th>
|
1668 |
<td>
|
@@ -1673,6 +1750,7 @@
|
|
1673 |
<th scope="row">
|
1674 |
<label for="iconsSize">
|
1675 |
{{ translate('Icons size') }}
|
|
|
1676 |
</label>
|
1677 |
</th>
|
1678 |
<td>
|
@@ -1683,6 +1761,7 @@
|
|
1683 |
<th scope="row">
|
1684 |
<label for="iconsMargin">
|
1685 |
{{ translate('Distance between icons') }}
|
|
|
1686 |
</label>
|
1687 |
</th>
|
1688 |
<td>
|
@@ -1693,6 +1772,7 @@
|
|
1693 |
<th scope="row">
|
1694 |
<label for="iconsOverlay">
|
1695 |
{{ translate('Show overlay') }}
|
|
|
1696 |
</label>
|
1697 |
</th>
|
1698 |
<td>
|
@@ -1710,6 +1790,7 @@
|
|
1710 |
<th scope="row">
|
1711 |
<label for="iconsOverlayColor">
|
1712 |
{{ translate('Overlay color') }}
|
|
|
1713 |
</label>
|
1714 |
</th>
|
1715 |
<td>
|
@@ -1720,6 +1801,7 @@
|
|
1720 |
<th scope="row">
|
1721 |
<label for="iconsOverlayTransparency">
|
1722 |
{{ translate('Overlay transparency') }}
|
|
|
1723 |
</label>
|
1724 |
</th>
|
1725 |
<td>
|
@@ -2007,35 +2089,35 @@
|
|
2007 |
{% endif %}
|
2008 |
{% endfor %}
|
2009 |
<div class="grid-gallery-clearfix" style="clear: both;"></div>
|
2010 |
-
|
2011 |
-
{
|
2012 |
<h3>Captions effects with icons</h3>
|
2013 |
-
|
2014 |
-
|
2015 |
-
|
2016 |
-
|
2017 |
-
|
2018 |
-
|
2019 |
-
|
2020 |
-
|
2021 |
-
|
2022 |
-
|
2023 |
-
|
2024 |
-
|
2025 |
-
|
2026 |
-
|
2027 |
-
|
2028 |
-
|
2029 |
-
|
2030 |
-
|
2031 |
-
|
2032 |
-
|
2033 |
-
|
2034 |
-
|
2035 |
-
|
2036 |
-
|
2037 |
-
|
2038 |
-
|
2039 |
</div>
|
2040 |
</div>
|
2041 |
|
@@ -2310,7 +2392,9 @@
|
|
2310 |
},
|
2311 |
settings.icons.showFewIcons | default('default'),
|
2312 |
{ 'style': 'width: auto;', 'id' : 'showFewIconsSel'}
|
2313 |
-
)
|
|
|
|
|
2314 |
)
|
2315 |
}}
|
2316 |
{{
|
@@ -2343,7 +2427,7 @@
|
|
2343 |
'showPopupIconInp',
|
2344 |
{'class': 'sggCheckboxLabelInOneRow'}
|
2345 |
),
|
2346 |
-
|
2347 |
null,
|
2348 |
'sggFewIconsShowingRow'
|
2349 |
)
|
38 |
|
39 |
<a class="nav-tab change-tab" href="overlay">
|
40 |
<i class="fa fa-info"></i>
|
41 |
+
<span class="nav-tab-item-span">{{ translate('Captions and icons') }}</span>
|
42 |
</a>
|
43 |
|
44 |
<a class="nav-tab change-tab" href="cats">
|
45 |
<i class="fa fa-bookmark-o"></i>
|
46 |
+
<span class="nav-tab-item-span">{{ translate('Categories and Pagination') }}</span>
|
47 |
</a>
|
48 |
|
49 |
<a class="nav-tab change-tab" href="post">
|
68 |
{% import '@galleries/helpers/attachment.twig' as attachment %}
|
69 |
{% import '@core/form.twig' as form %}
|
70 |
|
71 |
+
{% set var_figcaption_after %}
|
72 |
+
{% block figcaption_after %}
|
73 |
+
{% endblock %}
|
74 |
+
{% endset %}
|
75 |
+
{# sggCbEntrySpan #}
|
76 |
+
{% set simpleIconsEntryVal %}
|
77 |
+
<div class="sggFigCaptionIconsEntry ggSettingsDisplNone
|
78 |
+
|
79 |
+
hi-icon-wrap {{ settings.icons.effect[0:length-1] }} {{ settings.icons.effect }}">
|
80 |
+
|
81 |
+
{% set videoIcon = 'youtu' in gallery.photos[0].attachment.video ? 'fa-youtube-play' : 'fa-vimeo' %}
|
82 |
+
{% set iconStyle %}
|
83 |
+
{% if settings.icons.margin is not empty %}
|
84 |
+
margin-left:{{ settings.icons.margin }}px;
|
85 |
+
margin-right:{{ settings.icons.margin }}px;
|
86 |
+
{% endif %}
|
87 |
+
{% endset %}
|
88 |
+
<a href="#" class="hi-icon gg-icon-video fa {{ videoIcon }}" style="{{ iconStyle|trim }}"></a>
|
89 |
+
<a href="#" class="hi-icon gg-icon-link fa fa-link" style="{{ iconStyle|trim }}"></a>
|
90 |
+
<a href="#" class="hi-icon gg-icon-popup fa fa-expand" style="{{ iconStyle|trim }}"></a>
|
91 |
+
</div>
|
92 |
+
{% endset %}
|
93 |
+
|
94 |
<div id="preview" class="gallery-preview">
|
95 |
<section class="supsystic-bar-preview" id="single-gallery-toolbar">
|
96 |
<ul class="supsystic-bar-controls">
|
142 |
{% endif %}
|
143 |
{% endblock %}
|
144 |
>
|
145 |
+
{% set width, height, crop = 0, 0, 0 %}
|
146 |
|
147 |
{% if settings.area.photo_width_unit == 0 %}
|
148 |
{% set width = settings.area.photo_width %}
|
183 |
/>
|
184 |
{% set figcaptionBlockFree %}
|
185 |
<figcaption style="{{ figcaptionStyle|trim }}">
|
186 |
+
<div style="display: table; height: 100%; width: 100%;" class="sggFigcaptionCaptionWrapper">
|
187 |
<div class="grid-gallery-figcaption-wrap" style="display: table-cell;">
|
188 |
<span {% if settings.rtl == true %}dir="rtl" class="ggRtlClass"{% endif %}>Gallery by Supsystic</span>
|
189 |
</div>
|
190 |
</div>
|
191 |
+
{{ simpleIconsEntryVal }}
|
192 |
</figcaption>
|
193 |
+
{{ var_figcaption_after }}
|
194 |
{% endset %}
|
195 |
|
196 |
{% block settginsFigCaption %}
|
209 |
<div style="clear: both;"></div>
|
210 |
|
211 |
<div class="shortcode-wrap" style="margin-top: 20px">
|
212 |
+
<div class="shortcode">{{ translate('Shortcode:') }}
|
213 |
+
<input type="text" id="shortcode" class="gallery-shortcode" value="[{{ environment.config.get('shortcode_name') }} id={{ gallery.id }}]" onclick="this.select();" size="42" style="font-size: 12px;" readonly>
|
214 |
+
{{ form.show_tooltip('sgg-shortcode') }}
|
215 |
+
</div>
|
216 |
+
<div class="shortcode">{{ translate('PHPCode:') }}
|
217 |
+
<input type="text" id="shortcode" class="gallery-shortcode" value="{{ '<?php echo do_shortcode(\'[supsystic-gallery id=' ~ gallery.id ~ ']\') ?>' }}" onclick="this.select();" size="42" style="font-size: 12px;" readonly>
|
218 |
+
{{ form.show_tooltip('sgg-php-code') }}
|
219 |
+
</div>
|
220 |
</div>
|
221 |
|
222 |
<small style="left:25px;position:absolute;top:10px;display:none;">Oops! Transparency doesn't work in live preview. </small>
|
289 |
|
290 |
<div class="gg-wraper-anchor-nav-links" style="display: none;">
|
291 |
<a href="#gg-anl-main" class="gg-anchor-nav-links">{{ translate('Type')}}</a>
|
292 |
+
<a href="#gg-mosaic-image-count-text-wrapper" class="gg-anchor-nav-links ggSettingsDisplNone" id="gg-anl-mosaic-settings-link">{{ translate('Image Count Settings')}}</a>
|
293 |
<a href="#gg-anl-soc-share" class="gg-anchor-nav-links">{{ translate('Social')}}</a>
|
294 |
<a href="#gg-anl-load-more" class="gg-anchor-nav-links" id="gg-anl-load-more-link">{{ translate('Load More')}}</a>
|
295 |
<a href="#gg-anl-cust-button" class="gg-anchor-nav-links">{{ translate('Buttons')}}</a>
|
366 |
form.input('text', 'title', gallery.title|raw, { 'style': { 'width': '232px;' } })
|
367 |
, 'title') }}
|
368 |
|
369 |
+
{{ form.row(environment.translate('Gallery alignment'),
|
370 |
+
form.select('area[position]', ['Left', 'Center', 'Right'], settings.area.position|default(1), { 'style': 'width: 100px;' }), 'gallery-align') }}
|
371 |
|
372 |
|
373 |
+
{{ form.row(translate('Distance between images'),
|
374 |
form.input('number', 'area[distance]', settings.area.distance, { 'style': { 'width': '140px;' } })
|
375 |
~ form.span('', 'pixels'), 'distance') }}
|
376 |
|
474 |
{% block disableRightClick %}
|
475 |
{% endblock %}
|
476 |
|
477 |
+
{{ form.row(translate('Use these settings by default'),
|
478 |
form.checkbox(
|
479 |
'defaultsettings',
|
480 |
'1',
|
524 |
|
525 |
|
526 |
{{ form.row(translate('Gallery Sharing'),
|
527 |
+
form.checkbox(
|
528 |
+
'socialSharing[gallerySharing][enabled]',
|
529 |
+
true,
|
530 |
+
settings.socialSharing.gallerySharing.enabled ? {'checked':'checked'} : {}
|
531 |
+
),
|
532 |
+
'gallery-social-sharing',
|
533 |
+
'h4'
|
534 |
+
) }}
|
535 |
|
536 |
{{ form.row(translate('Buttons position'),
|
537 |
form.select('socialSharing[gallerySharing][buttonsPosition]',
|
549 |
|
550 |
{% set enabled = settings.socialSharing.imageSharing.enabled %}
|
551 |
{{ form.row(translate('Image Sharing'),
|
552 |
+
form.checkbox(
|
553 |
+
'socialSharing[imageSharing][enabled]',
|
554 |
+
true,
|
555 |
+
enabled != '0' ? {'checked':'checked'} : {}
|
556 |
+
),
|
557 |
+
'image-social-sharing',
|
558 |
+
'h4'
|
559 |
+
) }}
|
560 |
|
561 |
{{ form.row(translate('Buttons position'),
|
562 |
form.select('socialSharing[imageSharing][buttonsPosition]',
|
597 |
|
598 |
{% set enabled = settings.socialSharing.popupImageSharing.enabled %}
|
599 |
{{ form.row(translate('Popup Image Sharing'),
|
600 |
+
form.checkbox(
|
601 |
+
'socialSharing[popupImageSharing][enabled]',
|
602 |
+
true,
|
603 |
+
enabled != '0' ? {'checked':'checked'} : {}
|
604 |
+
),
|
605 |
+
'popup-social-sharing',
|
606 |
+
'h4'
|
607 |
+
) }}
|
608 |
|
609 |
{{ form.row(translate('Buttons position'),
|
610 |
form.select('socialSharing[popupImageSharing][buttonsPosition]',
|
814 |
<th scope="row">
|
815 |
<h3 style="margin: 0 !important;">
|
816 |
{{ translate('Shadow') }}
|
817 |
+
{{ form.show_tooltip('sgg-t-shadow') }}
|
818 |
</h3>
|
819 |
</th>
|
820 |
<td>
|
828 |
<tbody>
|
829 |
<tr>
|
830 |
<th scope="row">
|
831 |
+
{{ translate('Shadow effect preset') }}
|
832 |
+
{{ form.show_tooltip('sgg-t-shadow-eff-preset') }}
|
833 |
</th>
|
834 |
<td>
|
835 |
<button id="chooseShadowPreset" class="button bordered" type="button">
|
919 |
'box[theme]',
|
920 |
settings.box.theme,
|
921 |
{'id':'bigImageTheme'}
|
922 |
+
), 'sgg-t-popup-theme')
|
923 |
}}
|
924 |
|
925 |
{# Enable/Disable popup on mobile devices #}
|
1003 |
'captions')
|
1004 |
}}
|
1005 |
|
1006 |
+
{{ form.row(translate('Hide long captions'),
|
1007 |
form.checkbox(
|
1008 |
'hideLongTooltipTitles',
|
1009 |
'on',
|
1022 |
}}
|
1023 |
|
1024 |
{# Popup overlay transparency #}
|
1025 |
+
{{ form.row(translate('Background transparency'),
|
1026 |
form.select(
|
1027 |
'box[transparency]',
|
1028 |
{
|
1051 |
settings.box.slideshow|default('false'),
|
1052 |
{'style': 'width: auto'}
|
1053 |
),
|
1054 |
+
'slideshow',
|
1055 |
+
'h4'
|
1056 |
+
)}}
|
1057 |
|
1058 |
{# Popup slideshow speed #}
|
1059 |
{{ form.row(translate('Slideshow speed'),
|
1063 |
settings.box.slideshowSpeed|default(2500),
|
1064 |
{'style': {'width': 'auto'}},
|
1065 |
'box-slideshowSpeed'
|
1066 |
+
), 'sgg-t-popup-slide-show-speed')
|
1067 |
}}
|
1068 |
|
1069 |
{# Popup slideshow mouse hover stop #}
|
1086 |
settings.box.slideshowAuto|default('false'),
|
1087 |
{'style': 'width: auto'},
|
1088 |
'box-slideshowAuto'
|
1089 |
+
), 'sgg-t-popup-slideshow-autostart')
|
1090 |
}}
|
1091 |
|
1092 |
{# Popup image size #}
|
1234 |
translate('Disable'),
|
1235 |
'lazyLoadDisabled'
|
1236 |
),
|
1237 |
+
'sgg-t-lazyload-enable',
|
1238 |
true,
|
1239 |
'sggLazyLoadEnableRow'
|
1240 |
)}}
|
1301 |
{% block additionalCaptionSettings %}
|
1302 |
<table class="form-table" name="captionAdditSett" id="gg-anl-caption-add-sett">
|
1303 |
<thead>
|
1304 |
+
{{ form.rowpro(translate('Thumbnail transformations'),
|
1305 |
'utm_source=plugin&utm_medium=additinalCaptionSettings&utm_campaign=gallery',
|
1306 |
'additionalCaptionSettingInPro',
|
1307 |
form.radio(
|
1328 |
</thead>
|
1329 |
</table>
|
1330 |
{% endblock %}
|
1331 |
+
{{ form.hidden(
|
1332 |
+
'adminPage[slimScrollStartPos]',
|
1333 |
+
settings.adminPage.slimScrollStartPos | default(0),
|
1334 |
+
{'id': 'slimScrollStartPos'}
|
1335 |
+
) }}
|
1336 |
</div>
|
1337 |
|
1338 |
{% block post %}
|
1382 |
'sqkwoosh': 'Skwoosh',
|
1383 |
'tunnel': 'Tunnel',
|
1384 |
'direction-aware': 'Direction Aware',
|
1385 |
+
'phophorus-rotate': 'Phosphorus Rotate',
|
1386 |
+
'phophorus-offset': 'Phosphorus Offset',
|
1387 |
+
'phophorus-scale': 'Phosphorus Scale',
|
1388 |
'cube': 'Cube',
|
1389 |
'polaroid': 'Polaroid',
|
1390 |
'3d-cube' : '3D Cube',
|
1407 |
{{ form.rowpro(translate('Use Caption Builder'),
|
1408 |
'utm_source=plugin&utm_medium=caption_settings_type&utm_campaign=gallery',
|
1409 |
'caption-settings-type-pro',
|
1410 |
+
form.radio(
|
1411 |
+
'captionBuilder[enabled]',
|
1412 |
+
1,
|
1413 |
+
{'id':'ggsShowUserCaptionBuilder', 'class': 'ggUserCaptionBuilderCl', 'disabled':'disabled'}
|
1414 |
+
) ~
|
1415 |
+
f.label(
|
1416 |
+
translate('Enable'),
|
1417 |
+
'ggsShowUserCaptionBuilder'
|
1418 |
+
) ~
|
1419 |
+
form.radio(
|
1420 |
+
'captionBuilder[enabled]',
|
1421 |
+
0,
|
1422 |
+
{'id':'ggsHideUserCaptionBuilder', 'class': 'ggUserCaptionBuilderCl', 'disabled':'disabled', 'checked':'checked'}
|
1423 |
+
) ~
|
1424 |
+
f.label(
|
1425 |
+
translate('Disable'),
|
1426 |
+
'ggsHideUserCaptionBuilder'
|
1427 |
+
),
|
1428 |
+
'useCaptionBuilder',
|
1429 |
+
true
|
1430 |
)}}
|
1431 |
</tbody>
|
1432 |
</table>
|
1465 |
translate('Disable'),
|
1466 |
'hideCaptions'
|
1467 |
),
|
1468 |
+
'sgg-ci-caption-enable', true, 'useCaptions')
|
1469 |
}}
|
1470 |
|
1471 |
{# Choise effect #}
|
1529 |
polaroidIsEnable,
|
1530 |
{'style': 'width: auto;', 'class' : 'polaroid-effect-class'}
|
1531 |
),
|
1532 |
+
'polaroid-effect',
|
1533 |
+
'h4'
|
1534 |
+
)}}
|
1535 |
|
1536 |
{# Enable/Disable polaroid animation #}
|
1537 |
{{ form.row(translate('Polaroid Image Animation'),
|
1651 |
|
1652 |
|
1653 |
{# Hide image tooltip(browser default tooltip) #}
|
1654 |
+
{{ form.row(translate('Hide image title'),
|
1655 |
form.select(
|
1656 |
'thumbnail[tooltip]',
|
1657 |
{'false': translate('No'), 'true': translate('Yes')},
|
1662 |
}}
|
1663 |
|
1664 |
{# Mobile - show always caption(show none effect in mobile devices) #}
|
1665 |
+
{{ form.row(translate('Always show captions on mobile'),
|
1666 |
form.select(
|
1667 |
'thumbnail[isMobile]',
|
1668 |
{'false': translate('No'), 'true': translate('Yes')},
|
1690 |
<table class="form-table" name="icons">
|
1691 |
<thead>
|
1692 |
{% set iconsEnabled = settings.icons.enabled|default('false') == 'true' %}
|
1693 |
+
{{ form.row(translate('Icons'),
|
1694 |
form.radio('icons[enabled]', 'true', {'id':'icons-enable'}|merge(iconsEnabled ? {'checked':'checked'} : {})) ~
|
1695 |
form.label(translate('Enable'), 'icons-enable') ~
|
1696 |
form.radio('icons[enabled]', 'false', {'id':'icons-disable'}|merge(iconsEnabled ? {} : {'checked':'checked'})) ~
|
1698 |
}}
|
1699 |
</thead>
|
1700 |
<tbody>
|
1701 |
+
{{ form.row(translate('Animation effects'),
|
1702 |
+
form.button(null, translate('Animation'), {'class': 'button bordered', 'id': 'selectIconsEffect'}),
|
1703 |
+
'ci-icons-animation-effects'
|
1704 |
) }}
|
1705 |
<tr>
|
1706 |
<th scope="row">
|
1707 |
<label for="iconsColor">
|
1708 |
{{ translate('Icons color') }}
|
1709 |
+
{{ form.show_tooltip('ci-icons-color') }}
|
1710 |
</label>
|
1711 |
</th>
|
1712 |
<td>
|
1717 |
<th scope="row">
|
1718 |
<label for="iconsHoverColor">
|
1719 |
{{ translate('Icons hover color') }}
|
1720 |
+
{{ form.show_tooltip('ci-icons-hover-color') }}
|
1721 |
</label>
|
1722 |
</th>
|
1723 |
<td>
|
1728 |
<th scope="row">
|
1729 |
<label for="iconsBackgroundColor">
|
1730 |
{{ translate('Background color') }}
|
1731 |
+
{{ form.show_tooltip('ci-icons-bg-color') }}
|
1732 |
</label>
|
1733 |
</th>
|
1734 |
<td>
|
1739 |
<th scope="row">
|
1740 |
<label for="iconsBackgroundHoverColor">
|
1741 |
{{ translate('Background hover color') }}
|
1742 |
+
{{ form.show_tooltip('ci-icons-hover-bg-color') }}
|
1743 |
</label>
|
1744 |
</th>
|
1745 |
<td>
|
1750 |
<th scope="row">
|
1751 |
<label for="iconsSize">
|
1752 |
{{ translate('Icons size') }}
|
1753 |
+
{{ form.show_tooltip('ci-icons-hover-size') }}
|
1754 |
</label>
|
1755 |
</th>
|
1756 |
<td>
|
1761 |
<th scope="row">
|
1762 |
<label for="iconsMargin">
|
1763 |
{{ translate('Distance between icons') }}
|
1764 |
+
{{ form.show_tooltip('ci-icons-distance') }}
|
1765 |
</label>
|
1766 |
</th>
|
1767 |
<td>
|
1772 |
<th scope="row">
|
1773 |
<label for="iconsOverlay">
|
1774 |
{{ translate('Show overlay') }}
|
1775 |
+
{{ form.show_tooltip('ci-icons-show-overlay') }}
|
1776 |
</label>
|
1777 |
</th>
|
1778 |
<td>
|
1790 |
<th scope="row">
|
1791 |
<label for="iconsOverlayColor">
|
1792 |
{{ translate('Overlay color') }}
|
1793 |
+
{{ form.show_tooltip('ci-icons-overlay-color') }}
|
1794 |
</label>
|
1795 |
</th>
|
1796 |
<td>
|
1801 |
<th scope="row">
|
1802 |
<label for="iconsOverlayTransparency">
|
1803 |
{{ translate('Overlay transparency') }}
|
1804 |
+
{{ form.show_tooltip('ci-icons-overlay-transparency') }}
|
1805 |
</label>
|
1806 |
</th>
|
1807 |
<td>
|
2089 |
{% endif %}
|
2090 |
{% endfor %}
|
2091 |
<div class="grid-gallery-clearfix" style="clear: both;"></div>
|
2092 |
+
{% if settings.captionBuilder.enabled != '1' %}
|
2093 |
+
<div class="captions-effect-with-icons" data-confirm="{{ translate('This effect requires icons be enabled. Enable Icons?') }}">
|
2094 |
<h3>Captions effects with icons</h3>
|
2095 |
+
{% block iconsEffects %}
|
2096 |
+
{% for type, name in iconsWithCaptionsEffects %}
|
2097 |
+
<figure class="grid-gallery-caption" data-type="icons" data-grid-gallery-type="{{ type }}">
|
2098 |
+
<img data-src="holder.js/150x150?theme=industrial&text={{ name }}" class="dialog-image"/>
|
2099 |
+
<figcaption style="{{ figcaptionStyle|trim }}">
|
2100 |
+
<div class="hi-icon-wrap" style="width: 48px; height: 48px; margin-top: 30%; position:relative;">
|
2101 |
+
<a href="#" class="hi-icon icon-link" style="border:1px solid #ccc; border-radius:50%;margin:auto;position:absolute;left:0;right:0;top: 0;bottom: 0;">
|
2102 |
+
</a>
|
2103 |
+
</div>
|
2104 |
+
</figcaption>
|
2105 |
+
<div class="caption-with-{{ type }}">
|
2106 |
+
<div style="display: table; height:100%; width:100%;">
|
2107 |
+
<span style="padding: 10px;display:table-cell;font-size:{{ settings.thumbnail.overlay.text_size }}
|
2108 |
+
vertical-align:{{ settings.thumbnail.overlay.position }};">
|
2109 |
+
Caption
|
2110 |
+
</span>
|
2111 |
+
</div>
|
2112 |
+
</div>
|
2113 |
+
<div class="select-element">
|
2114 |
+
{{ translate('Select') }}
|
2115 |
+
</div>
|
2116 |
+
</figure>
|
2117 |
+
{% endfor %}
|
2118 |
+
{% endblock %}
|
2119 |
+
</div>
|
2120 |
+
{% endif %}
|
2121 |
</div>
|
2122 |
</div>
|
2123 |
|
2392 |
},
|
2393 |
settings.icons.showFewIcons | default('default'),
|
2394 |
{ 'style': 'width: auto;', 'id' : 'showFewIconsSel'}
|
2395 |
+
),
|
2396 |
+
'capt-showt-few-icons-by',
|
2397 |
+
'h4'
|
2398 |
)
|
2399 |
}}
|
2400 |
{{
|
2427 |
'showPopupIconInp',
|
2428 |
{'class': 'sggCheckboxLabelInOneRow'}
|
2429 |
),
|
2430 |
+
'capt-showv-few-icons-by',
|
2431 |
null,
|
2432 |
'sggFewIconsShowingRow'
|
2433 |
)
|
src/GridGallery/Galleries/views/shortcode/gallery.twig
CHANGED
@@ -223,11 +223,11 @@
|
|
223 |
</div>
|
224 |
{% endif %}
|
225 |
|
226 |
-
|
227 |
<div
|
228 |
{% block photos_attributes %}
|
229 |
id="photos-{{ gallery.id }}"
|
230 |
-
class="grid-gallery-photos"
|
231 |
{% endblock %}>
|
232 |
|
233 |
{% block photos %}
|
@@ -241,7 +241,7 @@
|
|
241 |
|
242 |
<div class="grid-gallery-clearfix"></div>
|
243 |
</div>
|
244 |
-
|
245 |
|
246 |
<div class="grid-gallery-clearfix"></div>
|
247 |
|
223 |
</div>
|
224 |
{% endif %}
|
225 |
|
226 |
+
<div class="gallery-sharing-top"></div>
|
227 |
<div
|
228 |
{% block photos_attributes %}
|
229 |
id="photos-{{ gallery.id }}"
|
230 |
+
class="grid-gallery-photos {% block photos_attributes_class %}{% endblock %}"
|
231 |
{% endblock %}>
|
232 |
|
233 |
{% block photos %}
|
241 |
|
242 |
<div class="grid-gallery-clearfix"></div>
|
243 |
</div>
|
244 |
+
<div class="gallery-sharing-bottom"></div>
|
245 |
|
246 |
<div class="grid-gallery-clearfix"></div>
|
247 |
|
src/GridGallery/Galleries/views/shortcode/helpers.twig
CHANGED
@@ -6,7 +6,14 @@
|
|
6 |
{% if settings.use_shadow == 1 %}
|
7 |
box-shadow: {{ settings.thumbnail.shadow.x }}px {{ settings.thumbnail.shadow.y }}px {{ settings.thumbnail.shadow.blur }}px {{ settings.thumbnail.shadow.color }};
|
8 |
{% endif %};
|
9 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
{#-webkit-mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC);#}
|
11 |
{% if settings.area.grid == '2' %}
|
12 |
height:{{ settings.area.photo_height ~ settings.area.photo_height_unit|replace(['px', '%']) }};
|
@@ -279,8 +286,9 @@
|
|
279 |
{% block figcaption_attributes %}
|
280 |
{% if settings.icons is defined and settings.icons.enabled == 'true' %}
|
281 |
data-alpha="{{ settings.icons.overlay_transparency|default(5)|trim }}"
|
|
|
|
|
282 |
{% endif %}
|
283 |
-
data-alpha="{{ settings.thumbnail.overlay.transparency|trim }}"
|
284 |
style="{{ figcaptionStyle|trim }}"
|
285 |
{% endblock %}
|
286 |
{% endset %}
|
@@ -339,8 +347,8 @@
|
|
339 |
{% set videoIcon = 'youtu' in photo.attachment.video ? 'icon-youtube' : 'icon-vimeo' %}
|
340 |
|
341 |
{% set iconStyle %}
|
342 |
-
margin-left:{{ settings.icons.margin|default(5) }};
|
343 |
-
margin-right:{{ settings.icons.margin|default(5) }};
|
344 |
{% endset %}
|
345 |
|
346 |
<a href="{{ videoUrl|trim }}"
|
6 |
{% if settings.use_shadow == 1 %}
|
7 |
box-shadow: {{ settings.thumbnail.shadow.x }}px {{ settings.thumbnail.shadow.y }}px {{ settings.thumbnail.shadow.blur }}px {{ settings.thumbnail.shadow.color }};
|
8 |
{% endif %};
|
9 |
+
|
10 |
+
{% if settings.area.grid == '2' %}
|
11 |
+
{% set newImageDistance = settings.area.distance/2 %}
|
12 |
+
margin: {{ newImageDistance | default(0) }}px;
|
13 |
+
{% else %}
|
14 |
+
margin: {{ settings.area.distance }}px;
|
15 |
+
{% endif %}
|
16 |
+
|
17 |
{#-webkit-mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC);#}
|
18 |
{% if settings.area.grid == '2' %}
|
19 |
height:{{ settings.area.photo_height ~ settings.area.photo_height_unit|replace(['px', '%']) }};
|
286 |
{% block figcaption_attributes %}
|
287 |
{% if settings.icons is defined and settings.icons.enabled == 'true' %}
|
288 |
data-alpha="{{ settings.icons.overlay_transparency|default(5)|trim }}"
|
289 |
+
{% else %}
|
290 |
+
data-alpha="{{ settings.thumbnail.overlay.transparency|trim }}"
|
291 |
{% endif %}
|
|
|
292 |
style="{{ figcaptionStyle|trim }}"
|
293 |
{% endblock %}
|
294 |
{% endset %}
|
347 |
{% set videoIcon = 'youtu' in photo.attachment.video ? 'icon-youtube' : 'icon-vimeo' %}
|
348 |
|
349 |
{% set iconStyle %}
|
350 |
+
margin-left:{{ settings.icons.margin|default(5) ~ 'px' }};
|
351 |
+
margin-right:{{ settings.icons.margin|default(5) ~ 'px' }};
|
352 |
{% endset %}
|
353 |
|
354 |
<a href="{{ videoUrl|trim }}"
|
src/GridGallery/Galleries/views/view.twig
CHANGED
@@ -21,7 +21,7 @@
|
|
21 |
<a href="{{ environment.generateUrl('galleries', 'settings', { 'gallery_id': gallery.id }) }}"
|
22 |
class="button">
|
23 |
<i class="fa fa-fw fa-cogs"></i>
|
24 |
-
|
25 |
</a>
|
26 |
</li>
|
27 |
|
@@ -204,9 +204,9 @@
|
|
204 |
'sqkwoosh': 'Skwoosh',
|
205 |
'tunnel': 'Tunnel',
|
206 |
'direction-aware': 'Direction Aware',
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
'cube': 'Cube',
|
211 |
'polaroid': 'Polaroid',
|
212 |
'3d-cube': '3D Cube',
|
21 |
<a href="{{ environment.generateUrl('galleries', 'settings', { 'gallery_id': gallery.id }) }}"
|
22 |
class="button">
|
23 |
<i class="fa fa-fw fa-cogs"></i>
|
24 |
+
{{ translate('Settings') }}
|
25 |
</a>
|
26 |
</li>
|
27 |
|
204 |
'sqkwoosh': 'Skwoosh',
|
205 |
'tunnel': 'Tunnel',
|
206 |
'direction-aware': 'Direction Aware',
|
207 |
+
'phophorus-rotate': 'Phosphorus Rotate',
|
208 |
+
'phophorus-offset': 'Phosphorus Offset',
|
209 |
+
'phophorus-scale': 'Phosphorus Scale',
|
210 |
'cube': 'Cube',
|
211 |
'polaroid': 'Polaroid',
|
212 |
'3d-cube': '3D Cube',
|
src/GridGallery/Optimization/views/index.twig
CHANGED
@@ -1,6 +1,8 @@
|
|
1 |
{% extends 'grid-gallery.twig' %}
|
2 |
|
3 |
{% block header %}
|
|
|
|
|
4 |
<nav id="supsystic-breadcrumbs" class="supsystic-breadcrumbs">
|
5 |
<a href="{{ environment.generateUrl('galleries') }}">{{ translate('Gallery by Supsystic') }}</a>
|
6 |
<i class="fa fa-angle-right"></i>
|
@@ -11,10 +13,17 @@
|
|
11 |
<a href="#" class="sgg-io-tab-link sggActive" data-tab-id="sgg-maintab-image-opt">
|
12 |
<i class="fa fa-compress"></i>
|
13 |
{{ translate('Image Optimize') }}
|
|
|
|
|
|
|
14 |
</a>
|
15 |
<a href="#" class="sgg-io-tab-link" data-tab-id="sgg-maintab-transfer-cdn">
|
16 |
<i class="fa fa-cloud-upload"></i>
|
17 |
{{ translate('Transfer to CDN') }}
|
|
|
|
|
|
|
|
|
18 |
</a>
|
19 |
</div>
|
20 |
{% endblock %}
|
@@ -47,6 +56,8 @@
|
|
47 |
{% endblock %}
|
48 |
|
49 |
{% macro imageOptimizeCdnTab(cdnSettings, cdnGalleryList) %}
|
|
|
|
|
50 |
<input type="hidden" id="sgg-transfer-to-cdn-used";/>
|
51 |
<div class="supsystic-io-block sgg-cdn-service-block">
|
52 |
<div class="supsystic-io-block-table sgg-cnd-service-info">
|
@@ -54,8 +65,15 @@
|
|
54 |
<div class="supsystic-io-block-cell sgg-io-tab-hidden">
|
55 |
<input value="keycdn" {% if cdnSettings.current == 'keycdn' %} checked="checked" {% endif %} type="radio" class="selected-cnd-opt-service" name="selected-cdn-opt-service"/>
|
56 |
</div>
|
57 |
-
<div class="supsystic-io-block-cell">{{ translate('KeyCDN') }}</div>
|
58 |
<div class="supsystic-io-block-cell">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
<a href="" class="button sgg-setup-button" data-dialog-code="keycdn" data-dialog-title="{{ translate("KeyCDN Settings") }}">
|
60 |
<i class="fa fa-info-circle"></i>
|
61 |
{% if cdnSettings.setting.keycdn.u_name is defined and cdnSettings.setting.keycdn.u_name != '' %}
|
@@ -308,14 +326,23 @@
|
|
308 |
{% endmacro %}
|
309 |
|
310 |
{% macro imageOptimizeServiceSettingTable(_selfTemplate, ioSetting) %}
|
|
|
|
|
311 |
<div class="supsystic-io-block sgg-service-setting">
|
312 |
<div class="supsystic-io-block-table sgg-service-info">
|
313 |
<div class="supsystic-io-block-row">
|
314 |
<div class="supsystic-io-block-cell sgg-io-tab-hidden">
|
315 |
<input value="tinypng" {% if ioSetting.current == 'tinypng' %} checked="checked" {% endif %} type="radio" class="selected-opt-service" name="selected-opt-service"/>
|
316 |
</div>
|
317 |
-
<div class="supsystic-io-block-cell">{{ translate('TinyPNG') }}</div>
|
318 |
<div class="supsystic-io-block-cell">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
319 |
<a href="" class="button sgg-setup-button" data-dialog-code="tinypng" data-dialog-title="{{ translate("TinyPNG Settings") }}">
|
320 |
<i class="fa fa-info-circle"></i>
|
321 |
{% if ioSetting.setting.tinypng.auth_key is defined and ioSetting.setting.tinypng.auth_key != '' %}
|
@@ -343,6 +370,8 @@
|
|
343 |
{% endmacro %}
|
344 |
|
345 |
{% macro imageOptimizeMainTab(_selfTemplate, ioSetting, galleryList, statistic) %}
|
|
|
|
|
346 |
<input type="hidden" id="sgg-optimize-main-tab-inp"/>
|
347 |
{{ _selfTemplate.imageOptimizeServiceSettingTable(_selfTemplate, ioSetting) }}
|
348 |
|
@@ -364,6 +393,11 @@
|
|
364 |
|
365 |
<div class="supsystic-io-block sgg-optimize-list">
|
366 |
<button class="button sgg-optimize-selected" disabled="disabled">{{ translate('Optimize selected') }}</button>
|
|
|
|
|
|
|
|
|
|
|
367 |
<div class="supsystic-io-block-table sgg-gallery-opt-table">
|
368 |
<div class="supsystic-io-block-row sgg-table-row-header">
|
369 |
<div class="supsystic-io-block-cell"></div>
|
@@ -456,27 +490,39 @@
|
|
456 |
<div class="sgg-dialog-block-part sgg-io-tab-hidden" data-img-opt-sett-code="keycdn">
|
457 |
<label>
|
458 |
{{ translate('Enter your Site name') }}
|
459 |
-
{{ helper1.showTooltip(
|
|
|
|
|
|
|
460 |
<br/>
|
461 |
<input type="text" autocomplete="off" class="sgg-keycdn-sett-zonename" name="sgg-keycdn-sett-sitename" value="{% if cdnSett.setting.keycdn.zone_name is defined %}{{ cdnSett.setting.keycdn.zone_name }}{% endif %}"/>
|
462 |
</label>
|
463 |
<br/>
|
464 |
<label>
|
465 |
{{ translate('Enter your username') }}
|
466 |
-
{{ helper1.showTooltip(
|
|
|
|
|
|
|
467 |
<br/>
|
468 |
<input type="text" autocomplete="off" class="sgg-keycdn-sett-uname" name="sgg-keycdn-sett-uname" value="{% if cdnSett.setting.keycdn.u_name is defined %}{{ cdnSett.setting.keycdn.u_name }}{% endif %}"/>
|
469 |
</label><br/>
|
470 |
<label>
|
471 |
{{ translate('Enter your password') }}
|
472 |
-
{{ helper1.showTooltip(
|
|
|
|
|
|
|
473 |
<br/>
|
474 |
{# {% if cdnSett.setting.keycdn.u_pass is defined %}{{ cdnSett.setting.keycdn.u_pass }}{% endif %} #}
|
475 |
<input type="password" autocomplete="off" class="sgg-keycdn-sett-upass" name="sgg-keycdn-sett-upass" value=""/>
|
476 |
</label><br/>
|
477 |
<label>
|
478 |
{{ translate('Enter your ftp base path') }}
|
479 |
-
{{ helper1.showTooltip(
|
|
|
|
|
|
|
480 |
<br/>
|
481 |
<input type="text" class="sgg-keycdn-sett-base-ftp" name="sgg-keycdn-sett-base-ftp" value="{% if cdnSett.setting.keycdn.base_ftp_path is defined %}{{ cdnSett.setting.keycdn.base_ftp_path }}{% endif %}"/>
|
482 |
</label>
|
@@ -486,11 +532,17 @@
|
|
486 |
{% endmacro %}
|
487 |
|
488 |
{% macro oneImageOptimizeStatTable(serviceCode, tblData, statistic) %}
|
|
|
|
|
489 |
<div class="supsystic-io-block-table sgg-service-stat-info">
|
490 |
<div class="supsystic-io-block-caption">
|
491 |
<h4>
|
492 |
{% if serviceCode == 'tinypng' %}
|
493 |
-
|
|
|
|
|
|
|
|
|
494 |
{% else %}
|
495 |
{{ translate('Incorrect service Code') }}
|
496 |
{% endif %}
|
1 |
{% extends 'grid-gallery.twig' %}
|
2 |
|
3 |
{% block header %}
|
4 |
+
{% import '@core/helpers.twig' as hlp %}
|
5 |
+
|
6 |
<nav id="supsystic-breadcrumbs" class="supsystic-breadcrumbs">
|
7 |
<a href="{{ environment.generateUrl('galleries') }}">{{ translate('Gallery by Supsystic') }}</a>
|
8 |
<i class="fa fa-angle-right"></i>
|
13 |
<a href="#" class="sgg-io-tab-link sggActive" data-tab-id="sgg-maintab-image-opt">
|
14 |
<i class="fa fa-compress"></i>
|
15 |
{{ translate('Image Optimize') }}
|
16 |
+
{{ hlp.showTooltip(
|
17 |
+
translate('Onboard image opimization with TinyPNG. ')
|
18 |
+
~ '<a target=\'_blank\' href=\'https://supsystic.com/documentation/image-optimize/\'>https://supsystic.com/documentation/image-optimize/</a>', 'top', true) }}
|
19 |
</a>
|
20 |
<a href="#" class="sgg-io-tab-link" data-tab-id="sgg-maintab-transfer-cdn">
|
21 |
<i class="fa fa-cloud-upload"></i>
|
22 |
{{ translate('Transfer to CDN') }}
|
23 |
+
{{ hlp.showTooltip(
|
24 |
+
translate('Here you may transfer your gallery images to CDN (Content Delivery Network) in order to reduce your site database load. ')
|
25 |
+
~ '<a target=\'_blank\' href=\'https://supsystic.com/documentation/transfer-to-cdn/\'>https://supsystic.com/documentation/transfer-to-cdn/</a>', 'top',
|
26 |
+
true) }}
|
27 |
</a>
|
28 |
</div>
|
29 |
{% endblock %}
|
56 |
{% endblock %}
|
57 |
|
58 |
{% macro imageOptimizeCdnTab(cdnSettings, cdnGalleryList) %}
|
59 |
+
{% import '@core/helpers.twig' as hlp %}
|
60 |
+
|
61 |
<input type="hidden" id="sgg-transfer-to-cdn-used";/>
|
62 |
<div class="supsystic-io-block sgg-cdn-service-block">
|
63 |
<div class="supsystic-io-block-table sgg-cnd-service-info">
|
65 |
<div class="supsystic-io-block-cell sgg-io-tab-hidden">
|
66 |
<input value="keycdn" {% if cdnSettings.current == 'keycdn' %} checked="checked" {% endif %} type="radio" class="selected-cnd-opt-service" name="selected-cdn-opt-service"/>
|
67 |
</div>
|
|
|
68 |
<div class="supsystic-io-block-cell">
|
69 |
+
{{ translate('KeyCDN') }}
|
70 |
+
{{ hlp.showTooltip(
|
71 |
+
translate('Transfer your galleries to Content Delivery Network. Note: in order to do this, you should be a member of CDN. ')
|
72 |
+
~ '<a target=\'_blank\' href=\'https://supsystic.com/documentation/transfer-to-cdn/\'>https://supsystic.com/documentation/transfer-to-cdn/</a>'
|
73 |
+
~ '<br/>' ~ translate('Note: before starting the transfer you should press the \'Setup\' button, fill in the data and save the settings.')
|
74 |
+
, 'top', true) }}
|
75 |
+
</div>
|
76 |
+
<div class="supsystic-io-block-cell">
|
77 |
<a href="" class="button sgg-setup-button" data-dialog-code="keycdn" data-dialog-title="{{ translate("KeyCDN Settings") }}">
|
78 |
<i class="fa fa-info-circle"></i>
|
79 |
{% if cdnSettings.setting.keycdn.u_name is defined and cdnSettings.setting.keycdn.u_name != '' %}
|
326 |
{% endmacro %}
|
327 |
|
328 |
{% macro imageOptimizeServiceSettingTable(_selfTemplate, ioSetting) %}
|
329 |
+
{% import '@core/helpers.twig' as hlp %}
|
330 |
+
|
331 |
<div class="supsystic-io-block sgg-service-setting">
|
332 |
<div class="supsystic-io-block-table sgg-service-info">
|
333 |
<div class="supsystic-io-block-row">
|
334 |
<div class="supsystic-io-block-cell sgg-io-tab-hidden">
|
335 |
<input value="tinypng" {% if ioSetting.current == 'tinypng' %} checked="checked" {% endif %} type="radio" class="selected-opt-service" name="selected-opt-service"/>
|
336 |
</div>
|
|
|
337 |
<div class="supsystic-io-block-cell">
|
338 |
+
{{ translate('TinyPNG') }}
|
339 |
+
{{ hlp.showTooltip(
|
340 |
+
translate('The intelligent image optimization feature allows you to save bandwidth and make your gallery load faster. ')
|
341 |
+
~ '<a target=\'_blank\' href=\'https://supsystic.com/documentation/image-optimize/\'>https://supsystic.com/documentation/image-optimize/</a> '
|
342 |
+
~ '<br/>' ~ translate('Note: before starting the optimization you should press the \'Change Details\' button, get your TinyPNG API key and insert it to the text field. Use the tooltip to find the key. '), 'top',
|
343 |
+
true) }}
|
344 |
+
</div>
|
345 |
+
<div class="supsystic-io-block-cell">
|
346 |
<a href="" class="button sgg-setup-button" data-dialog-code="tinypng" data-dialog-title="{{ translate("TinyPNG Settings") }}">
|
347 |
<i class="fa fa-info-circle"></i>
|
348 |
{% if ioSetting.setting.tinypng.auth_key is defined and ioSetting.setting.tinypng.auth_key != '' %}
|
370 |
{% endmacro %}
|
371 |
|
372 |
{% macro imageOptimizeMainTab(_selfTemplate, ioSetting, galleryList, statistic) %}
|
373 |
+
{% import '@core/helpers.twig' as hlp %}
|
374 |
+
|
375 |
<input type="hidden" id="sgg-optimize-main-tab-inp"/>
|
376 |
{{ _selfTemplate.imageOptimizeServiceSettingTable(_selfTemplate, ioSetting) }}
|
377 |
|
393 |
|
394 |
<div class="supsystic-io-block sgg-optimize-list">
|
395 |
<button class="button sgg-optimize-selected" disabled="disabled">{{ translate('Optimize selected') }}</button>
|
396 |
+
{{ hlp.showTooltip(
|
397 |
+
translate('You may choose one, several or all the galleries at once to optimize them. ')
|
398 |
+
~ '<a target=\'_blank\' href=\'https://supsystic.com/documentation/image-optimize/\'>https://supsystic.com/documentation/image-optimize/</a>'
|
399 |
+
, 'top', true) }}
|
400 |
+
|
401 |
<div class="supsystic-io-block-table sgg-gallery-opt-table">
|
402 |
<div class="supsystic-io-block-row sgg-table-row-header">
|
403 |
<div class="supsystic-io-block-cell"></div>
|
490 |
<div class="sgg-dialog-block-part sgg-io-tab-hidden" data-img-opt-sett-code="keycdn">
|
491 |
<label>
|
492 |
{{ translate('Enter your Site name') }}
|
493 |
+
{{ helper1.showTooltip(
|
494 |
+
translate("Enter your KeyCdn Zone name (for example: pz-6f09.kxcdn.com)")
|
495 |
+
~ ' <a target=\'_blank\' href=\'https://supsystic.com/documentation/transfer-to-cdn/\'>https://supsystic.com/documentation/transfer-to-cdn/</a>'
|
496 |
+
, 'top', true) }}
|
497 |
<br/>
|
498 |
<input type="text" autocomplete="off" class="sgg-keycdn-sett-zonename" name="sgg-keycdn-sett-sitename" value="{% if cdnSett.setting.keycdn.zone_name is defined %}{{ cdnSett.setting.keycdn.zone_name }}{% endif %}"/>
|
499 |
</label>
|
500 |
<br/>
|
501 |
<label>
|
502 |
{{ translate('Enter your username') }}
|
503 |
+
{{ helper1.showTooltip(
|
504 |
+
translate("Enter your KeyCdn username")
|
505 |
+
~ ' <a target=\'_blank\' href=\'https://supsystic.com/documentation/transfer-to-cdn/\'>https://supsystic.com/documentation/transfer-to-cdn/</a>'
|
506 |
+
, 'top', true) }}
|
507 |
<br/>
|
508 |
<input type="text" autocomplete="off" class="sgg-keycdn-sett-uname" name="sgg-keycdn-sett-uname" value="{% if cdnSett.setting.keycdn.u_name is defined %}{{ cdnSett.setting.keycdn.u_name }}{% endif %}"/>
|
509 |
</label><br/>
|
510 |
<label>
|
511 |
{{ translate('Enter your password') }}
|
512 |
+
{{ helper1.showTooltip(
|
513 |
+
translate("Enter your KeyCdn password")
|
514 |
+
~ ' <a target=\'_blank\' href=\'https://supsystic.com/documentation/transfer-to-cdn/\'>https://supsystic.com/documentation/transfer-to-cdn/</a>'
|
515 |
+
, 'top', true) }}
|
516 |
<br/>
|
517 |
{# {% if cdnSett.setting.keycdn.u_pass is defined %}{{ cdnSett.setting.keycdn.u_pass }}{% endif %} #}
|
518 |
<input type="password" autocomplete="off" class="sgg-keycdn-sett-upass" name="sgg-keycdn-sett-upass" value=""/>
|
519 |
</label><br/>
|
520 |
<label>
|
521 |
{{ translate('Enter your ftp base path') }}
|
522 |
+
{{ helper1.showTooltip(
|
523 |
+
translate("Enter your KeyCdn ftp base path (for example: /pz)")
|
524 |
+
~ ' <a target=\'_blank\' href=\'https://supsystic.com/documentation/transfer-to-cdn/\'>https://supsystic.com/documentation/transfer-to-cdn/</a>'
|
525 |
+
, 'top', true) }}
|
526 |
<br/>
|
527 |
<input type="text" class="sgg-keycdn-sett-base-ftp" name="sgg-keycdn-sett-base-ftp" value="{% if cdnSett.setting.keycdn.base_ftp_path is defined %}{{ cdnSett.setting.keycdn.base_ftp_path }}{% endif %}"/>
|
528 |
</label>
|
532 |
{% endmacro %}
|
533 |
|
534 |
{% macro oneImageOptimizeStatTable(serviceCode, tblData, statistic) %}
|
535 |
+
{% import '@core/helpers.twig' as hlp %}
|
536 |
+
|
537 |
<div class="supsystic-io-block-table sgg-service-stat-info">
|
538 |
<div class="supsystic-io-block-caption">
|
539 |
<h4>
|
540 |
{% if serviceCode == 'tinypng' %}
|
541 |
+
{{ translate('TinyPNG Statistics') }}
|
542 |
+
{{ hlp.showTooltip(
|
543 |
+
translate('Here you may find the detailed optimization statistics for your gallery. ')
|
544 |
+
~ '<a target=\'_blank\' href=\'https://supsystic.com/documentation/image-optimize/\'>https://supsystic.com/documentation/image-optimize/</a>'
|
545 |
+
, 'top', true) }}
|
546 |
{% else %}
|
547 |
{{ translate('Incorrect service Code') }}
|
548 |
{% endif %}
|
src/GridGallery/Promo/Model/classes/lib/Base/MixpanelBase.php
CHANGED
@@ -1,65 +1,65 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* This a Base class which all Mixpanel classes extend from to provide some very basic
|
5 |
-
* debugging and logging functionality. It also serves to persist $_options across the library.
|
6 |
-
*
|
7 |
-
*/
|
8 |
-
class Base_MixpanelBase {
|
9 |
-
|
10 |
-
|
11 |
-
/**
|
12 |
-
* Default options that can be overridden via the $options constructor arg
|
13 |
-
* @var array
|
14 |
-
*/
|
15 |
-
private $_defaults = array(
|
16 |
-
"max_batch_size" => 50, // the max batch size Mixpanel will accept is 50,
|
17 |
-
"max_queue_size" => 1000, // the max num of items to hold in memory before flushing
|
18 |
-
"debug" => true, // enable/disable debug mode
|
19 |
-
"consumer" => "curl", // which consumer to use
|
20 |
-
"host" => "api.mixpanel.com", // the host name for api calls
|
21 |
-
"events_endpoint" => "/track", // host relative endpoint for events
|
22 |
-
"people_endpoint" => "/engage", // host relative endpoint for people updates
|
23 |
-
"use_ssl" => true, // use ssl when available
|
24 |
-
"error_callback" => null // callback to use on consumption failures
|
25 |
-
);
|
26 |
-
|
27 |
-
|
28 |
-
/**
|
29 |
-
* An array of options to be used by the Mixpanel library.
|
30 |
-
* @var array
|
31 |
-
*/
|
32 |
-
protected $_options = array();
|
33 |
-
|
34 |
-
|
35 |
-
/**
|
36 |
-
* Construct a new MixpanelBase object and merge custom options with defaults
|
37 |
-
* @param array $options
|
38 |
-
*/
|
39 |
-
public function __construct($options = array()) {
|
40 |
-
$options = array_merge($this->_defaults, $options);
|
41 |
-
$this->_options = $options;
|
42 |
-
}
|
43 |
-
|
44 |
-
|
45 |
-
/**
|
46 |
-
* Log a message to PHP's error log
|
47 |
-
* @param $msg
|
48 |
-
*/
|
49 |
-
protected function _log($msg) {
|
50 |
-
$arr = debug_backtrace();
|
51 |
-
$class = $arr[0]['class'];
|
52 |
-
$line = $arr[0]['line'];
|
53 |
-
error_log ( "[ $class - line $line ] : " . $msg );
|
54 |
-
}
|
55 |
-
|
56 |
-
|
57 |
-
/**
|
58 |
-
* Returns true if in debug mode, false if in production mode
|
59 |
-
* @return bool
|
60 |
-
*/
|
61 |
-
protected function _debug() {
|
62 |
-
return array_key_exists("debug", $this->_options) && $this->_options["debug"] == true;
|
63 |
-
}
|
64 |
-
|
65 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* This a Base class which all Mixpanel classes extend from to provide some very basic
|
5 |
+
* debugging and logging functionality. It also serves to persist $_options across the library.
|
6 |
+
*
|
7 |
+
*/
|
8 |
+
class Base_MixpanelBase {
|
9 |
+
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Default options that can be overridden via the $options constructor arg
|
13 |
+
* @var array
|
14 |
+
*/
|
15 |
+
private $_defaults = array(
|
16 |
+
"max_batch_size" => 50, // the max batch size Mixpanel will accept is 50,
|
17 |
+
"max_queue_size" => 1000, // the max num of items to hold in memory before flushing
|
18 |
+
"debug" => true, // enable/disable debug mode
|
19 |
+
"consumer" => "curl", // which consumer to use
|
20 |
+
"host" => "api.mixpanel.com", // the host name for api calls
|
21 |
+
"events_endpoint" => "/track", // host relative endpoint for events
|
22 |
+
"people_endpoint" => "/engage", // host relative endpoint for people updates
|
23 |
+
"use_ssl" => true, // use ssl when available
|
24 |
+
"error_callback" => null // callback to use on consumption failures
|
25 |
+
);
|
26 |
+
|
27 |
+
|
28 |
+
/**
|
29 |
+
* An array of options to be used by the Mixpanel library.
|
30 |
+
* @var array
|
31 |
+
*/
|
32 |
+
protected $_options = array();
|
33 |
+
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Construct a new MixpanelBase object and merge custom options with defaults
|
37 |
+
* @param array $options
|
38 |
+
*/
|
39 |
+
public function __construct($options = array()) {
|
40 |
+
$options = array_merge($this->_defaults, $options);
|
41 |
+
$this->_options = $options;
|
42 |
+
}
|
43 |
+
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Log a message to PHP's error log
|
47 |
+
* @param $msg
|
48 |
+
*/
|
49 |
+
protected function _log($msg) {
|
50 |
+
$arr = debug_backtrace();
|
51 |
+
$class = $arr[0]['class'];
|
52 |
+
$line = $arr[0]['line'];
|
53 |
+
error_log ( "[ $class - line $line ] : " . $msg );
|
54 |
+
}
|
55 |
+
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Returns true if in debug mode, false if in production mode
|
59 |
+
* @return bool
|
60 |
+
*/
|
61 |
+
protected function _debug() {
|
62 |
+
return array_key_exists("debug", $this->_options) && $this->_options["debug"] == true;
|
63 |
+
}
|
64 |
+
|
65 |
}
|
src/GridGallery/Promo/Model/classes/lib/ConsumerStrategies/AbstractConsumer.php
CHANGED
@@ -1,57 +1,57 @@
|
|
1 |
-
<?php
|
2 |
-
require_once(dirname(__FILE__) . "/../Base/MixpanelBase.php");
|
3 |
-
|
4 |
-
/**
|
5 |
-
* Provides some base methods for use by a Consumer implementation
|
6 |
-
*/
|
7 |
-
abstract class ConsumerStrategies_AbstractConsumer extends Base_MixpanelBase {
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Creates a new AbstractConsumer
|
11 |
-
* @param array $options
|
12 |
-
*/
|
13 |
-
function __construct($options = array()) {
|
14 |
-
|
15 |
-
parent::__construct($options);
|
16 |
-
|
17 |
-
if ($this->_debug()) {
|
18 |
-
$this->_log("Instantiated new Consumer");
|
19 |
-
}
|
20 |
-
|
21 |
-
}
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Encode an array to be persisted
|
25 |
-
* @param array $params
|
26 |
-
* @return string
|
27 |
-
*/
|
28 |
-
protected function _encode($params) {
|
29 |
-
return base64_encode(json_encode($params));
|
30 |
-
}
|
31 |
-
|
32 |
-
/**
|
33 |
-
* Handles errors that occur in a consumer
|
34 |
-
* @param $code
|
35 |
-
* @param $msg
|
36 |
-
*/
|
37 |
-
protected function _handleError($code, $msg) {
|
38 |
-
if (isset($this->_options['error_callback'])) {
|
39 |
-
$handler = $this->_options['error_callback'];
|
40 |
-
call_user_func($handler, $code, $msg);
|
41 |
-
}
|
42 |
-
|
43 |
-
if ($this->_debug()) {
|
44 |
-
$arr = debug_backtrace();
|
45 |
-
$class = get_class($arr[0]['object']);
|
46 |
-
$line = $arr[0]['line'];
|
47 |
-
error_log ( "[ $class - line $line ] : " . print_r($msg, true) );
|
48 |
-
}
|
49 |
-
}
|
50 |
-
|
51 |
-
/**
|
52 |
-
* Persist a batch of messages in whatever way the implementer sees fit
|
53 |
-
* @param array $batch an array of messages to consume
|
54 |
-
* @return boolean success or fail
|
55 |
-
*/
|
56 |
-
abstract function persist($batch);
|
57 |
}
|
1 |
+
<?php
|
2 |
+
require_once(dirname(__FILE__) . "/../Base/MixpanelBase.php");
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Provides some base methods for use by a Consumer implementation
|
6 |
+
*/
|
7 |
+
abstract class ConsumerStrategies_AbstractConsumer extends Base_MixpanelBase {
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Creates a new AbstractConsumer
|
11 |
+
* @param array $options
|
12 |
+
*/
|
13 |
+
function __construct($options = array()) {
|
14 |
+
|
15 |
+
parent::__construct($options);
|
16 |
+
|
17 |
+
if ($this->_debug()) {
|
18 |
+
$this->_log("Instantiated new Consumer");
|
19 |
+
}
|
20 |
+
|
21 |
+
}
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Encode an array to be persisted
|
25 |
+
* @param array $params
|
26 |
+
* @return string
|
27 |
+
*/
|
28 |
+
protected function _encode($params) {
|
29 |
+
return base64_encode(json_encode($params));
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Handles errors that occur in a consumer
|
34 |
+
* @param $code
|
35 |
+
* @param $msg
|
36 |
+
*/
|
37 |
+
protected function _handleError($code, $msg) {
|
38 |
+
if (isset($this->_options['error_callback'])) {
|
39 |
+
$handler = $this->_options['error_callback'];
|
40 |
+
call_user_func($handler, $code, $msg);
|
41 |
+
}
|
42 |
+
|
43 |
+
if ($this->_debug()) {
|
44 |
+
$arr = debug_backtrace();
|
45 |
+
$class = get_class($arr[0]['object']);
|
46 |
+
$line = $arr[0]['line'];
|
47 |
+
error_log ( "[ $class - line $line ] : " . print_r($msg, true) );
|
48 |
+
}
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Persist a batch of messages in whatever way the implementer sees fit
|
53 |
+
* @param array $batch an array of messages to consume
|
54 |
+
* @return boolean success or fail
|
55 |
+
*/
|
56 |
+
abstract function persist($batch);
|
57 |
}
|
src/GridGallery/Promo/Model/classes/lib/ConsumerStrategies/CurlConsumer.php
CHANGED
@@ -1,221 +1,221 @@
|
|
1 |
-
<?php
|
2 |
-
require_once(dirname(__FILE__) . "/AbstractConsumer.php");
|
3 |
-
|
4 |
-
/**
|
5 |
-
* Consumes messages and sends them to a host/endpoint using cURL
|
6 |
-
*/
|
7 |
-
class ConsumerStrategies_CurlConsumer extends ConsumerStrategies_AbstractConsumer {
|
8 |
-
|
9 |
-
/**
|
10 |
-
* @var string the host to connect to (e.g. api.mixpanel.com)
|
11 |
-
*/
|
12 |
-
protected $_host;
|
13 |
-
|
14 |
-
|
15 |
-
/**
|
16 |
-
* @var string the host-relative endpoint to write to (e.g. /engage)
|
17 |
-
*/
|
18 |
-
protected $_endpoint;
|
19 |
-
|
20 |
-
|
21 |
-
/**
|
22 |
-
* @var int connect_timeout The number of seconds to wait while trying to connect. Default is 5 seconds.
|
23 |
-
*/
|
24 |
-
protected $_connect_timeout;
|
25 |
-
|
26 |
-
|
27 |
-
/**
|
28 |
-
* @var int timeout The maximum number of seconds to allow cURL call to execute. Default is 30 seconds.
|
29 |
-
*/
|
30 |
-
protected $_timeout;
|
31 |
-
|
32 |
-
|
33 |
-
/**
|
34 |
-
* @var string the protocol to use for the cURL connection
|
35 |
-
*/
|
36 |
-
protected $_protocol;
|
37 |
-
|
38 |
-
|
39 |
-
/**
|
40 |
-
* @var bool|null true to fork the cURL process (using exec) or false to use PHP's cURL extension. false by default
|
41 |
-
*/
|
42 |
-
protected $_fork = null;
|
43 |
-
|
44 |
-
|
45 |
-
/**
|
46 |
-
* Creates a new CurlConsumer and assigns properties from the $options array
|
47 |
-
* @param array $options
|
48 |
-
* @throws Exception
|
49 |
-
*/
|
50 |
-
function __construct($options) {
|
51 |
-
parent::__construct($options);
|
52 |
-
|
53 |
-
$this->_host = $options['host'];
|
54 |
-
$this->_endpoint = $options['endpoint'];
|
55 |
-
$this->_connect_timeout = array_key_exists('connect_timeout', $options) ? $options['connect_timeout'] : 5;
|
56 |
-
$this->_timeout = array_key_exists('timeout', $options) ? $options['timeout'] : 30;
|
57 |
-
$this->_protocol = array_key_exists('use_ssl', $options) && $options['use_ssl'] == true ? "https" : "http";
|
58 |
-
$this->_fork = array_key_exists('fork', $options) ? ($options['fork'] == true) : false;
|
59 |
-
|
60 |
-
// ensure the environment is workable for the given settings
|
61 |
-
if ($this->_fork == true) {
|
62 |
-
$exists = function_exists('exec');
|
63 |
-
if (!$exists) {
|
64 |
-
throw new Exception('The "exec" function must exist to use the cURL consumer in "fork" mode. Try setting fork = false or use another consumer.');
|
65 |
-
}
|
66 |
-
$disabled = explode(', ', ini_get('disable_functions'));
|
67 |
-
$enabled = !in_array('exec', $disabled);
|
68 |
-
if (!$enabled) {
|
69 |
-
throw new Exception('The "exec" function must be enabled to use the cURL consumer in "fork" mode. Try setting fork = false or use another consumer.');
|
70 |
-
}
|
71 |
-
} else {
|
72 |
-
if (!function_exists('curl_init')) {
|
73 |
-
throw new Exception('The cURL PHP extension is required to use the cURL consumer with fork = false. Try setting fork = true or use another consumer.');
|
74 |
-
}
|
75 |
-
}
|
76 |
-
}
|
77 |
-
|
78 |
-
|
79 |
-
/**
|
80 |
-
* Write to the given host/endpoint using either a forked cURL process or using PHP's cURL extension
|
81 |
-
* @param array $batch
|
82 |
-
* @return bool
|
83 |
-
*/
|
84 |
-
public function persist($batch) {
|
85 |
-
if (count($batch) > 0) {
|
86 |
-
$data = "data=" . $this->_encode($batch);
|
87 |
-
$url = $this->_protocol . "://" . $this->_host . $this->_endpoint;
|
88 |
-
if ($this->_fork) {
|
89 |
-
return $this->_execute_forked($url, $data);
|
90 |
-
} else {
|
91 |
-
return $this->_execute($url, $data);
|
92 |
-
}
|
93 |
-
} else {
|
94 |
-
return true;
|
95 |
-
}
|
96 |
-
}
|
97 |
-
|
98 |
-
|
99 |
-
/**
|
100 |
-
* Write using the cURL php extension
|
101 |
-
* @param $url
|
102 |
-
* @param $data
|
103 |
-
* @return bool
|
104 |
-
*/
|
105 |
-
protected function _execute($url, $data) {
|
106 |
-
if ($this->_debug()) {
|
107 |
-
$this->_log("Making blocking cURL call to $url");
|
108 |
-
}
|
109 |
-
|
110 |
-
$ch = curl_init();
|
111 |
-
curl_setopt($ch, CURLOPT_URL, $url);
|
112 |
-
curl_setopt($ch, CURLOPT_HEADER, 0);
|
113 |
-
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->_connect_timeout);
|
114 |
-
curl_setopt($ch, CURLOPT_TIMEOUT, $this->_timeout);
|
115 |
-
curl_setopt($ch, CURLOPT_POST, 1);
|
116 |
-
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
117 |
-
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
118 |
-
$response = curl_exec($ch);
|
119 |
-
if (false === $response) {
|
120 |
-
$curl_error = curl_error($ch);
|
121 |
-
$curl_errno = curl_errno($ch);
|
122 |
-
curl_close($ch);
|
123 |
-
$this->_handleError($curl_errno, $curl_error);
|
124 |
-
return false;
|
125 |
-
} else {
|
126 |
-
curl_close($ch);
|
127 |
-
if (trim($response) == "1") {
|
128 |
-
return true;
|
129 |
-
} else {
|
130 |
-
$this->_handleError(0, $response);
|
131 |
-
return false;
|
132 |
-
}
|
133 |
-
}
|
134 |
-
}
|
135 |
-
|
136 |
-
|
137 |
-
/**
|
138 |
-
* Write using a forked cURL process
|
139 |
-
* @param $url
|
140 |
-
* @param $data
|
141 |
-
* @return bool
|
142 |
-
*/
|
143 |
-
protected function _execute_forked($url, $data) {
|
144 |
-
|
145 |
-
if ($this->_debug()) {
|
146 |
-
$this->_log("Making forked cURL call to $url");
|
147 |
-
}
|
148 |
-
|
149 |
-
$exec = 'curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d ' . $data . ' "' . $url . '"';
|
150 |
-
|
151 |
-
if(!$this->_debug()) {
|
152 |
-
$exec .= " >/dev/null 2>&1 &";
|
153 |
-
}
|
154 |
-
|
155 |
-
exec($exec, $output, $return_var);
|
156 |
-
|
157 |
-
if ($return_var != 0) {
|
158 |
-
$this->_handleError($return_var, $output);
|
159 |
-
}
|
160 |
-
|
161 |
-
return $return_var == 0;
|
162 |
-
}
|
163 |
-
|
164 |
-
/**
|
165 |
-
* @return int
|
166 |
-
*/
|
167 |
-
public function getConnectTimeout()
|
168 |
-
{
|
169 |
-
return $this->_connect_timeout;
|
170 |
-
}
|
171 |
-
|
172 |
-
/**
|
173 |
-
* @return string
|
174 |
-
*/
|
175 |
-
public function getEndpoint()
|
176 |
-
{
|
177 |
-
return $this->_endpoint;
|
178 |
-
}
|
179 |
-
|
180 |
-
/**
|
181 |
-
* @return bool|null
|
182 |
-
*/
|
183 |
-
public function getFork()
|
184 |
-
{
|
185 |
-
return $this->_fork;
|
186 |
-
}
|
187 |
-
|
188 |
-
/**
|
189 |
-
* @return string
|
190 |
-
*/
|
191 |
-
public function getHost()
|
192 |
-
{
|
193 |
-
return $this->_host;
|
194 |
-
}
|
195 |
-
|
196 |
-
/**
|
197 |
-
* @return array
|
198 |
-
*/
|
199 |
-
public function getOptions()
|
200 |
-
{
|
201 |
-
return $this->_options;
|
202 |
-
}
|
203 |
-
|
204 |
-
/**
|
205 |
-
* @return string
|
206 |
-
*/
|
207 |
-
public function getProtocol()
|
208 |
-
{
|
209 |
-
return $this->_protocol;
|
210 |
-
}
|
211 |
-
|
212 |
-
/**
|
213 |
-
* @return int
|
214 |
-
*/
|
215 |
-
public function getTimeout()
|
216 |
-
{
|
217 |
-
return $this->_timeout;
|
218 |
-
}
|
219 |
-
|
220 |
-
|
221 |
}
|
1 |
+
<?php
|
2 |
+
require_once(dirname(__FILE__) . "/AbstractConsumer.php");
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Consumes messages and sends them to a host/endpoint using cURL
|
6 |
+
*/
|
7 |
+
class ConsumerStrategies_CurlConsumer extends ConsumerStrategies_AbstractConsumer {
|
8 |
+
|
9 |
+
/**
|
10 |
+
* @var string the host to connect to (e.g. api.mixpanel.com)
|
11 |
+
*/
|
12 |
+
protected $_host;
|
13 |
+
|
14 |
+
|
15 |
+
/**
|
16 |
+
* @var string the host-relative endpoint to write to (e.g. /engage)
|
17 |
+
*/
|
18 |
+
protected $_endpoint;
|
19 |
+
|
20 |
+
|
21 |
+
/**
|
22 |
+
* @var int connect_timeout The number of seconds to wait while trying to connect. Default is 5 seconds.
|
23 |
+
*/
|
24 |
+
protected $_connect_timeout;
|
25 |
+
|
26 |
+
|
27 |
+
/**
|
28 |
+
* @var int timeout The maximum number of seconds to allow cURL call to execute. Default is 30 seconds.
|
29 |
+
*/
|
30 |
+
protected $_timeout;
|
31 |
+
|
32 |
+
|
33 |
+
/**
|
34 |
+
* @var string the protocol to use for the cURL connection
|
35 |
+
*/
|
36 |
+
protected $_protocol;
|
37 |
+
|
38 |
+
|
39 |
+
/**
|
40 |
+
* @var bool|null true to fork the cURL process (using exec) or false to use PHP's cURL extension. false by default
|
41 |
+
*/
|
42 |
+
protected $_fork = null;
|
43 |
+
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Creates a new CurlConsumer and assigns properties from the $options array
|
47 |
+
* @param array $options
|
48 |
+
* @throws Exception
|
49 |
+
*/
|
50 |
+
function __construct($options) {
|
51 |
+
parent::__construct($options);
|
52 |
+
|
53 |
+
$this->_host = $options['host'];
|
54 |
+
$this->_endpoint = $options['endpoint'];
|
55 |
+
$this->_connect_timeout = array_key_exists('connect_timeout', $options) ? $options['connect_timeout'] : 5;
|
56 |
+
$this->_timeout = array_key_exists('timeout', $options) ? $options['timeout'] : 30;
|
57 |
+
$this->_protocol = array_key_exists('use_ssl', $options) && $options['use_ssl'] == true ? "https" : "http";
|
58 |
+
$this->_fork = array_key_exists('fork', $options) ? ($options['fork'] == true) : false;
|
59 |
+
|
60 |
+
// ensure the environment is workable for the given settings
|
61 |
+
if ($this->_fork == true) {
|
62 |
+
$exists = function_exists('exec');
|
63 |
+
if (!$exists) {
|
64 |
+
throw new Exception('The "exec" function must exist to use the cURL consumer in "fork" mode. Try setting fork = false or use another consumer.');
|
65 |
+
}
|
66 |
+
$disabled = explode(', ', ini_get('disable_functions'));
|
67 |
+
$enabled = !in_array('exec', $disabled);
|
68 |
+
if (!$enabled) {
|
69 |
+
throw new Exception('The "exec" function must be enabled to use the cURL consumer in "fork" mode. Try setting fork = false or use another consumer.');
|
70 |
+
}
|
71 |
+
} else {
|
72 |
+
if (!function_exists('curl_init')) {
|
73 |
+
throw new Exception('The cURL PHP extension is required to use the cURL consumer with fork = false. Try setting fork = true or use another consumer.');
|
74 |
+
}
|
75 |
+
}
|
76 |
+
}
|
77 |
+
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Write to the given host/endpoint using either a forked cURL process or using PHP's cURL extension
|
81 |
+
* @param array $batch
|
82 |
+
* @return bool
|
83 |
+
*/
|
84 |
+
public function persist($batch) {
|
85 |
+
if (count($batch) > 0) {
|
86 |
+
$data = "data=" . $this->_encode($batch);
|
87 |
+
$url = $this->_protocol . "://" . $this->_host . $this->_endpoint;
|
88 |
+
if ($this->_fork) {
|
89 |
+
return $this->_execute_forked($url, $data);
|
90 |
+
} else {
|
91 |
+
return $this->_execute($url, $data);
|
92 |
+
}
|
93 |
+
} else {
|
94 |
+
return true;
|
95 |
+
}
|
96 |
+
}
|
97 |
+
|
98 |
+
|
99 |
+
/**
|
100 |
+
* Write using the cURL php extension
|
101 |
+
* @param $url
|
102 |
+
* @param $data
|
103 |
+
* @return bool
|
104 |
+
*/
|
105 |
+
protected function _execute($url, $data) {
|
106 |
+
if ($this->_debug()) {
|
107 |
+
$this->_log("Making blocking cURL call to $url");
|
108 |
+
}
|
109 |
+
|
110 |
+
$ch = curl_init();
|
111 |
+
curl_setopt($ch, CURLOPT_URL, $url);
|
112 |
+
curl_setopt($ch, CURLOPT_HEADER, 0);
|
113 |
+
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->_connect_timeout);
|
114 |
+
curl_setopt($ch, CURLOPT_TIMEOUT, $this->_timeout);
|
115 |
+
curl_setopt($ch, CURLOPT_POST, 1);
|
116 |
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
117 |
+
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
118 |
+
$response = curl_exec($ch);
|
119 |
+
if (false === $response) {
|
120 |
+
$curl_error = curl_error($ch);
|
121 |
+
$curl_errno = curl_errno($ch);
|
122 |
+
curl_close($ch);
|
123 |
+
$this->_handleError($curl_errno, $curl_error);
|
124 |
+
return false;
|
125 |
+
} else {
|
126 |
+
curl_close($ch);
|
127 |
+
if (trim($response) == "1") {
|
128 |
+
return true;
|
129 |
+
} else {
|
130 |
+
$this->_handleError(0, $response);
|
131 |
+
return false;
|
132 |
+
}
|
133 |
+
}
|
134 |
+
}
|
135 |
+
|
136 |
+
|
137 |
+
/**
|
138 |
+
* Write using a forked cURL process
|
139 |
+
* @param $url
|
140 |
+
* @param $data
|
141 |
+
* @return bool
|
142 |
+
*/
|
143 |
+
protected function _execute_forked($url, $data) {
|
144 |
+
|
145 |
+
if ($this->_debug()) {
|
146 |
+
$this->_log("Making forked cURL call to $url");
|
147 |
+
}
|
148 |
+
|
149 |
+
$exec = 'curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d ' . $data . ' "' . $url . '"';
|
150 |
+
|
151 |
+
if(!$this->_debug()) {
|
152 |
+
$exec .= " >/dev/null 2>&1 &";
|
153 |
+
}
|
154 |
+
|
155 |
+
exec($exec, $output, $return_var);
|
156 |
+
|
157 |
+
if ($return_var != 0) {
|
158 |
+
$this->_handleError($return_var, $output);
|
159 |
+
}
|
160 |
+
|
161 |
+
return $return_var == 0;
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* @return int
|
166 |
+
*/
|
167 |
+
public function getConnectTimeout()
|
168 |
+
{
|
169 |
+
return $this->_connect_timeout;
|
170 |
+
}
|
171 |
+
|
172 |
+
/**
|
173 |
+
* @return string
|
174 |
+
*/
|
175 |
+
public function getEndpoint()
|
176 |
+
{
|
177 |
+
return $this->_endpoint;
|
178 |
+
}
|
179 |
+
|
180 |
+
/**
|
181 |
+
* @return bool|null
|
182 |
+
*/
|
183 |
+
public function getFork()
|
184 |
+
{
|
185 |
+
return $this->_fork;
|
186 |
+
}
|
187 |
+
|
188 |
+
/**
|
189 |
+
* @return string
|
190 |
+
*/
|
191 |
+
public function getHost()
|
192 |
+
{
|
193 |
+
return $this->_host;
|
194 |
+
}
|
195 |
+
|
196 |
+
/**
|
197 |
+
* @return array
|
198 |
+
*/
|
199 |
+
public function getOptions()
|
200 |
+
{
|
201 |
+
return $this->_options;
|
202 |
+
}
|
203 |
+
|
204 |
+
/**
|
205 |
+
* @return string
|
206 |
+
*/
|
207 |
+
public function getProtocol()
|
208 |
+
{
|
209 |
+
return $this->_protocol;
|
210 |
+
}
|
211 |
+
|
212 |
+
/**
|
213 |
+
* @return int
|
214 |
+
*/
|
215 |
+
public function getTimeout()
|
216 |
+
{
|
217 |
+
return $this->_timeout;
|
218 |
+
}
|
219 |
+
|
220 |
+
|
221 |
}
|
src/GridGallery/Promo/Model/classes/lib/ConsumerStrategies/FileConsumer.php
CHANGED
@@ -1,38 +1,38 @@
|
|
1 |
-
<?php
|
2 |
-
require_once(dirname(__FILE__) . "/AbstractConsumer.php");
|
3 |
-
/**
|
4 |
-
* Consumes messages and writes them to a file
|
5 |
-
*/
|
6 |
-
class ConsumerStrategies_FileConsumer extends ConsumerStrategies_AbstractConsumer {
|
7 |
-
|
8 |
-
/**
|
9 |
-
* @var string path to a file that we want to write the messages to
|
10 |
-
*/
|
11 |
-
private $_file;
|
12 |
-
|
13 |
-
|
14 |
-
/**
|
15 |
-
* Creates a new FileConsumer and assigns properties from the $options array
|
16 |
-
* @param array $options
|
17 |
-
*/
|
18 |
-
function __construct($options) {
|
19 |
-
parent::__construct($options);
|
20 |
-
|
21 |
-
// what file to write to?
|
22 |
-
$this->_file = array_key_exists("file", $options) ? $options['file'] : dirname(__FILE__)."/../../messages.txt";
|
23 |
-
}
|
24 |
-
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Append $batch to a file
|
28 |
-
* @param array $batch
|
29 |
-
* @return bool
|
30 |
-
*/
|
31 |
-
public function persist($batch) {
|
32 |
-
if (count($batch) > 0) {
|
33 |
-
return file_put_contents($this->_file, json_encode($batch)."\n", FILE_APPEND | LOCK_EX) !== false;
|
34 |
-
} else {
|
35 |
-
return true;
|
36 |
-
}
|
37 |
-
}
|
38 |
}
|
1 |
+
<?php
|
2 |
+
require_once(dirname(__FILE__) . "/AbstractConsumer.php");
|
3 |
+
/**
|
4 |
+
* Consumes messages and writes them to a file
|
5 |
+
*/
|
6 |
+
class ConsumerStrategies_FileConsumer extends ConsumerStrategies_AbstractConsumer {
|
7 |
+
|
8 |
+
/**
|
9 |
+
* @var string path to a file that we want to write the messages to
|
10 |
+
*/
|
11 |
+
private $_file;
|
12 |
+
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Creates a new FileConsumer and assigns properties from the $options array
|
16 |
+
* @param array $options
|
17 |
+
*/
|
18 |
+
function __construct($options) {
|
19 |
+
parent::__construct($options);
|
20 |
+
|
21 |
+
// what file to write to?
|
22 |
+
$this->_file = array_key_exists("file", $options) ? $options['file'] : dirname(__FILE__)."/../../messages.txt";
|
23 |
+
}
|
24 |
+
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Append $batch to a file
|
28 |
+
* @param array $batch
|
29 |
+
* @return bool
|
30 |
+
*/
|
31 |
+
public function persist($batch) {
|
32 |
+
if (count($batch) > 0) {
|
33 |
+
return file_put_contents($this->_file, json_encode($batch)."\n", FILE_APPEND | LOCK_EX) !== false;
|
34 |
+
} else {
|
35 |
+
return true;
|
36 |
+
}
|
37 |
+
}
|
38 |
}
|
src/GridGallery/Promo/Model/classes/lib/ConsumerStrategies/SocketConsumer.php
CHANGED
@@ -1,308 +1,308 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Portions of this class were borrowed from
|
4 |
-
* https://github.com/segmentio/analytics-php/blob/master/lib/Analytics/Consumer/Socket.php.
|
5 |
-
* Thanks for the work!
|
6 |
-
*
|
7 |
-
* WWWWWW||WWWWWW
|
8 |
-
* W W W||W W W
|
9 |
-
* ||
|
10 |
-
* ( OO )__________
|
11 |
-
* / | \
|
12 |
-
* /o o| MIT \
|
13 |
-
* \___/||_||__||_|| *
|
14 |
-
* || || || ||
|
15 |
-
* _||_|| _||_||
|
16 |
-
* (__|__|(__|__|
|
17 |
-
* (The MIT License)
|
18 |
-
*
|
19 |
-
* Copyright (c) 2013 Segment.io Inc. friends@segment.io
|
20 |
-
*
|
21 |
-
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
22 |
-
* documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the
|
23 |
-
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
|
24 |
-
* permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
25 |
-
*
|
26 |
-
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
|
27 |
-
* Software.
|
28 |
-
*
|
29 |
-
* THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
30 |
-
* WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
|
31 |
-
* OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
32 |
-
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
33 |
-
*/
|
34 |
-
require_once(dirname(__FILE__) . "/AbstractConsumer.php");
|
35 |
-
|
36 |
-
/**
|
37 |
-
* Consumes messages and writes them to host/endpoint using a persistent socket
|
38 |
-
*/
|
39 |
-
class ConsumerStrategies_SocketConsumer extends ConsumerStrategies_AbstractConsumer {
|
40 |
-
|
41 |
-
/**
|
42 |
-
* @var string the host to connect to (e.g. api.mixpanel.com)
|
43 |
-
*/
|
44 |
-
private $_host;
|
45 |
-
|
46 |
-
|
47 |
-
/**
|
48 |
-
* @var string the host-relative endpoint to write to (e.g. /engage)
|
49 |
-
*/
|
50 |
-
private $_endpoint;
|
51 |
-
|
52 |
-
|
53 |
-
/**
|
54 |
-
* @var int connect_timeout the socket connection timeout in seconds
|
55 |
-
*/
|
56 |
-
private $_connect_timeout;
|
57 |
-
|
58 |
-
|
59 |
-
/**
|
60 |
-
* @var string the protocol to use for the socket connection
|
61 |
-
*/
|
62 |
-
private $_protocol;
|
63 |
-
|
64 |
-
|
65 |
-
/**
|
66 |
-
* @var resource holds the socket resource
|
67 |
-
*/
|
68 |
-
private $_socket;
|
69 |
-
|
70 |
-
/**
|
71 |
-
* @var bool whether or not to wait for a response
|
72 |
-
*/
|
73 |
-
private $_async;
|
74 |
-
|
75 |
-
|
76 |
-
/**
|
77 |
-
* Creates a new SocketConsumer and assigns properties from the $options array
|
78 |
-
* @param array $options
|
79 |
-
*/
|
80 |
-
public function __construct($options = array()) {
|
81 |
-
parent::__construct($options);
|
82 |
-
|
83 |
-
|
84 |
-
$this->_host = $options['host'];
|
85 |
-
$this->_endpoint = $options['endpoint'];
|
86 |
-
$this->_connect_timeout = array_key_exists('connect_timeout', $options) ? $options['connect_timeout'] : 5;
|
87 |
-
$this->_async = array_key_exists('async', $options) && $options['async'] === false ? false : true;
|
88 |
-
|
89 |
-
if (array_key_exists('use_ssl', $options) && $options['use_ssl'] == true) {
|
90 |
-
$this->_protocol = "ssl";
|
91 |
-
$this->_port = 443;
|
92 |
-
} else {
|
93 |
-
$this->_protocol = "tcp";
|
94 |
-
$this->_port = 80;
|
95 |
-
}
|
96 |
-
}
|
97 |
-
|
98 |
-
|
99 |
-
/**
|
100 |
-
* Write using a persistent socket connection.
|
101 |
-
* @param array $batch
|
102 |
-
* @return bool
|
103 |
-
*/
|
104 |
-
public function persist($batch) {
|
105 |
-
|
106 |
-
$socket = $this->_getSocket();
|
107 |
-
if (!is_resource($socket)) {
|
108 |
-
return false;
|
109 |
-
}
|
110 |
-
|
111 |
-
$data = "data=".$this->_encode($batch);
|
112 |
-
|
113 |
-
$body = "";
|
114 |
-
$body.= "POST ".$this->_endpoint." HTTP/1.1\r\n";
|
115 |
-
$body.= "Host: " . $this->_host . "\r\n";
|
116 |
-
$body.= "Content-Type: application/x-www-form-urlencoded\r\n";
|
117 |
-
$body.= "Accept: application/json\r\n";
|
118 |
-
$body.= "Content-length: " . strlen($data) . "\r\n";
|
119 |
-
$body.= "\r\n";
|
120 |
-
$body.= $data;
|
121 |
-
|
122 |
-
return $this->_write($socket, $body);
|
123 |
-
}
|
124 |
-
|
125 |
-
|
126 |
-
/**
|
127 |
-
* Return cached socket if open or create a new persistent socket
|
128 |
-
* @return bool|resource
|
129 |
-
*/
|
130 |
-
private function _getSocket() {
|
131 |
-
if(is_resource($this->_socket)) {
|
132 |
-
|
133 |
-
if ($this->_debug()) {
|
134 |
-
$this->_log("Using existing socket");
|
135 |
-
}
|
136 |
-
|
137 |
-
return $this->_socket;
|
138 |
-
} else {
|
139 |
-
|
140 |
-
if ($this->_debug()) {
|
141 |
-
$this->_log("Creating new socket at ".time());
|
142 |
-
}
|
143 |
-
|
144 |
-
return $this->_createSocket();
|
145 |
-
}
|
146 |
-
}
|
147 |
-
|
148 |
-
/**
|
149 |
-
* Attempt to open a new socket connection, cache it, and return the resource
|
150 |
-
* @param bool $retry
|
151 |
-
* @return bool|resource
|
152 |
-
*/
|
153 |
-
private function _createSocket($retry = true) {
|
154 |
-
try {
|
155 |
-
$socket = pfsockopen($this->_protocol . "://" . $this->_host, $this->_port, $err_no, $err_msg, $this->_connect_timeout);
|
156 |
-
|
157 |
-
if ($this->_debug()) {
|
158 |
-
$this->_log("Opening socket connection to " . $this->_protocol . "://" . $this->_host . ":" . $this->_port);
|
159 |
-
}
|
160 |
-
|
161 |
-
if ($err_no != 0) {
|
162 |
-
$this->_handleError($err_no, $err_msg);
|
163 |
-
return $retry == true ? $this->_createSocket(false) : false;
|
164 |
-
} else {
|
165 |
-
// cache the socket
|
166 |
-
$this->_socket = $socket;
|
167 |
-
return $socket;
|
168 |
-
}
|
169 |
-
|
170 |
-
} catch (Exception $e) {
|
171 |
-
$this->_handleError($e->getCode(), $e->getMessage());
|
172 |
-
return $retry == true ? $this->_createSocket(false) : false;
|
173 |
-
}
|
174 |
-
}
|
175 |
-
|
176 |
-
/**
|
177 |
-
* Attempt to close and dereference a socket resource
|
178 |
-
*/
|
179 |
-
private function _destroySocket() {
|
180 |
-
$socket = $this->_socket;
|
181 |
-
$this->_socket = null;
|
182 |
-
fclose($socket);
|
183 |
-
}
|
184 |
-
|
185 |
-
|
186 |
-
/**
|
187 |
-
* Write $data through the given $socket
|
188 |
-
* @param $socket
|
189 |
-
* @param $data
|
190 |
-
* @param bool $retry
|
191 |
-
* @return bool
|
192 |
-
*/
|
193 |
-
private function _write($socket, $data, $retry = true) {
|
194 |
-
|
195 |
-
$bytes_sent = 0;
|
196 |
-
$bytes_total = strlen($data);
|
197 |
-
$socket_closed = false;
|
198 |
-
$success = true;
|
199 |
-
$max_bytes_per_write = 8192;
|
200 |
-
|
201 |
-
// if we have no data to write just return true
|
202 |
-
if ($bytes_total == 0) {
|
203 |
-
return true;
|
204 |
-
}
|
205 |
-
|
206 |
-
// try to write the data
|
207 |
-
while (!$socket_closed && $bytes_sent < $bytes_total) {
|
208 |
-
|
209 |
-
try {
|
210 |
-
$bytes = fwrite($socket, $data, $max_bytes_per_write);
|
211 |
-
|
212 |
-
if ($this->_debug()) {
|
213 |
-
$this->_log("Socket wrote ".$bytes." bytes");
|
214 |
-
}
|
215 |
-
|
216 |
-
// if we actually wrote data, then remove the written portion from $data left to write
|
217 |
-
if ($bytes > 0) {
|
218 |
-
$data = substr($data, $max_bytes_per_write);
|
219 |
-
}
|
220 |
-
|
221 |
-
} catch (Exception $e) {
|
222 |
-
$this->_handleError($e->getCode(), $e->getMessage());
|
223 |
-
$socket_closed = true;
|
224 |
-
}
|
225 |
-
|
226 |
-
if (isset($bytes) && $bytes) {
|
227 |
-
$bytes_sent += $bytes;
|
228 |
-
} else {
|
229 |
-
$socket_closed = true;
|
230 |
-
}
|
231 |
-
}
|
232 |
-
|
233 |
-
// create a new socket if the current one is closed and retry the message
|
234 |
-
if ($socket_closed) {
|
235 |
-
|
236 |
-
$this->_destroySocket();
|
237 |
-
|
238 |
-
if ($retry) {
|
239 |
-
if ($this->_debug()) {
|
240 |
-
$this->_log("Retrying socket write...");
|
241 |
-
}
|
242 |
-
$socket = $this->_getSocket();
|
243 |
-
if ($socket) return $this->_write($socket, $data, false);
|
244 |
-
}
|
245 |
-
|
246 |
-
return false;
|
247 |
-
}
|
248 |
-
|
249 |
-
|
250 |
-
// only wait for the response in debug mode or if we explicitly want to be synchronous
|
251 |
-
if ($this->_debug() || !$this->_async) {
|
252 |
-
$res = $this->handleResponse(fread($socket, 2048));
|
253 |
-
if ($res["status"] != "200") {
|
254 |
-
$this->_handleError($res["status"], $res["body"]);
|
255 |
-
$success = false;
|
256 |
-
}
|
257 |
-
}
|
258 |
-
|
259 |
-
return $success;
|
260 |
-
}
|
261 |
-
|
262 |
-
|
263 |
-
/**
|
264 |
-
* Parse the response from a socket write (only used for debugging)
|
265 |
-
* @param $response
|
266 |
-
* @return array
|
267 |
-
*/
|
268 |
-
private function handleResponse($response) {
|
269 |
-
|
270 |
-
$lines = explode("\n", $response);
|
271 |
-
|
272 |
-
// extract headers
|
273 |
-
$headers = array();
|
274 |
-
foreach($lines as $line) {
|
275 |
-
$kvsplit = explode(":", $line);
|
276 |
-
if (count($kvsplit) == 2) {
|
277 |
-
$header = $kvsplit[0];
|
278 |
-
$value = $kvsplit[1];
|
279 |
-
$headers[$header] = trim($value);
|
280 |
-
}
|
281 |
-
|
282 |
-
}
|
283 |
-
|
284 |
-
// extract status
|
285 |
-
$line_one_exploded = explode(" ", $lines[0]);
|
286 |
-
$status = $line_one_exploded[1];
|
287 |
-
|
288 |
-
// extract body
|
289 |
-
$body = $lines[count($lines) - 1];
|
290 |
-
|
291 |
-
// if the connection has been closed lets kill the socket
|
292 |
-
if ($headers['Connection'] == "close") {
|
293 |
-
$this->_destroySocket();
|
294 |
-
if ($this->_debug()) {
|
295 |
-
$this->_log("Server told us connection closed so lets destroy the socket so it'll reconnect on next call");
|
296 |
-
}
|
297 |
-
}
|
298 |
-
|
299 |
-
$ret = array(
|
300 |
-
"status" => $status,
|
301 |
-
"body" => $body,
|
302 |
-
);
|
303 |
-
|
304 |
-
return $ret;
|
305 |
-
}
|
306 |
-
|
307 |
-
|
308 |
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Portions of this class were borrowed from
|
4 |
+
* https://github.com/segmentio/analytics-php/blob/master/lib/Analytics/Consumer/Socket.php.
|
5 |
+
* Thanks for the work!
|
6 |
+
*
|
7 |
+
* WWWWWW||WWWWWW
|
8 |
+
* W W W||W W W
|
9 |
+
* ||
|
10 |
+
* ( OO )__________
|
11 |
+
* / | \
|
12 |
+
* /o o| MIT \
|
13 |
+
* \___/||_||__||_|| *
|
14 |
+
* || || || ||
|
15 |
+
* _||_|| _||_||
|
16 |
+
* (__|__|(__|__|
|
17 |
+
* (The MIT License)
|
18 |
+
*
|
19 |
+
* Copyright (c) 2013 Segment.io Inc. friends@segment.io
|
20 |
+
*
|
21 |
+
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
22 |
+
* documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the
|
23 |
+
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
|
24 |
+
* permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
25 |
+
*
|
26 |
+
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
|
27 |
+
* Software.
|
28 |
+
*
|
29 |
+
* THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
30 |
+
* WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
|
31 |
+
* OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
32 |
+
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
33 |
+
*/
|
34 |
+
require_once(dirname(__FILE__) . "/AbstractConsumer.php");
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Consumes messages and writes them to host/endpoint using a persistent socket
|
38 |
+
*/
|
39 |
+
class ConsumerStrategies_SocketConsumer extends ConsumerStrategies_AbstractConsumer {
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @var string the host to connect to (e.g. api.mixpanel.com)
|
43 |
+
*/
|
44 |
+
private $_host;
|
45 |
+
|
46 |
+
|
47 |
+
/**
|
48 |
+
* @var string the host-relative endpoint to write to (e.g. /engage)
|
49 |
+
*/
|
50 |
+
private $_endpoint;
|
51 |
+
|
52 |
+
|
53 |
+
/**
|
54 |
+
* @var int connect_timeout the socket connection timeout in seconds
|
55 |
+
*/
|
56 |
+
private $_connect_timeout;
|
57 |
+
|
58 |
+
|
59 |
+
/**
|
60 |
+
* @var string the protocol to use for the socket connection
|
61 |
+
*/
|
62 |
+
private $_protocol;
|
63 |
+
|
64 |
+
|
65 |
+
/**
|
66 |
+
* @var resource holds the socket resource
|
67 |
+
*/
|
68 |
+
private $_socket;
|
69 |
+
|
70 |
+
/**
|
71 |
+
* @var bool whether or not to wait for a response
|
72 |
+
*/
|
73 |
+
private $_async;
|
74 |
+
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Creates a new SocketConsumer and assigns properties from the $options array
|
78 |
+
* @param array $options
|
79 |
+
*/
|
80 |
+
public function __construct($options = array()) {
|
81 |
+
parent::__construct($options);
|
82 |
+
|
83 |
+
|
84 |
+
$this->_host = $options['host'];
|
85 |
+
$this->_endpoint = $options['endpoint'];
|
86 |
+
$this->_connect_timeout = array_key_exists('connect_timeout', $options) ? $options['connect_timeout'] : 5;
|
87 |
+
$this->_async = array_key_exists('async', $options) && $options['async'] === false ? false : true;
|
88 |
+
|
89 |
+
if (array_key_exists('use_ssl', $options) && $options['use_ssl'] == true) {
|
90 |
+
$this->_protocol = "ssl";
|
91 |
+
$this->_port = 443;
|
92 |
+
} else {
|
93 |
+
$this->_protocol = "tcp";
|
94 |
+
$this->_port = 80;
|
95 |
+
}
|
96 |
+
}
|
97 |
+
|
98 |
+
|
99 |
+
/**
|
100 |
+
* Write using a persistent socket connection.
|
101 |
+
* @param array $batch
|
102 |
+
* @return bool
|
103 |
+
*/
|
104 |
+
public function persist($batch) {
|
105 |
+
|
106 |
+
$socket = $this->_getSocket();
|
107 |
+
if (!is_resource($socket)) {
|
108 |
+
return false;
|
109 |
+
}
|
110 |
+
|
111 |
+
$data = "data=".$this->_encode($batch);
|
112 |
+
|
113 |
+
$body = "";
|
114 |
+
$body.= "POST ".$this->_endpoint." HTTP/1.1\r\n";
|
115 |
+
$body.= "Host: " . $this->_host . "\r\n";
|
116 |
+
$body.= "Content-Type: application/x-www-form-urlencoded\r\n";
|
117 |
+
$body.= "Accept: application/json\r\n";
|
118 |
+
$body.= "Content-length: " . strlen($data) . "\r\n";
|
119 |
+
$body.= "\r\n";
|
120 |
+
$body.= $data;
|
121 |
+
|
122 |
+
return $this->_write($socket, $body);
|
123 |
+
}
|
124 |
+
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Return cached socket if open or create a new persistent socket
|
128 |
+
* @return bool|resource
|
129 |
+
*/
|
130 |
+
private function _getSocket() {
|
131 |
+
if(is_resource($this->_socket)) {
|
132 |
+
|
133 |
+
if ($this->_debug()) {
|
134 |
+
$this->_log("Using existing socket");
|
135 |
+
}
|
136 |
+
|
137 |
+
return $this->_socket;
|
138 |
+
} else {
|
139 |
+
|
140 |
+
if ($this->_debug()) {
|
141 |
+
$this->_log("Creating new socket at ".time());
|
142 |
+
}
|
143 |
+
|
144 |
+
return $this->_createSocket();
|
145 |
+
}
|
146 |
+
}
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Attempt to open a new socket connection, cache it, and return the resource
|
150 |
+
* @param bool $retry
|
151 |
+
* @return bool|resource
|
152 |
+
*/
|
153 |
+
private function _createSocket($retry = true) {
|
154 |
+
try {
|
155 |
+
$socket = pfsockopen($this->_protocol . "://" . $this->_host, $this->_port, $err_no, $err_msg, $this->_connect_timeout);
|
156 |
+
|
157 |
+
if ($this->_debug()) {
|
158 |
+
$this->_log("Opening socket connection to " . $this->_protocol . "://" . $this->_host . ":" . $this->_port);
|
159 |
+
}
|
160 |
+
|
161 |
+
if ($err_no != 0) {
|
162 |
+
$this->_handleError($err_no, $err_msg);
|
163 |
+
return $retry == true ? $this->_createSocket(false) : false;
|
164 |
+
} else {
|
165 |
+
// cache the socket
|
166 |
+
$this->_socket = $socket;
|
167 |
+
return $socket;
|
168 |
+
}
|
169 |
+
|
170 |
+
} catch (Exception $e) {
|
171 |
+
$this->_handleError($e->getCode(), $e->getMessage());
|
172 |
+
return $retry == true ? $this->_createSocket(false) : false;
|
173 |
+
}
|
174 |
+
}
|
175 |
+
|
176 |
+
/**
|
177 |
+
* Attempt to close and dereference a socket resource
|
178 |
+
*/
|
179 |
+
private function _destroySocket() {
|
180 |
+
$socket = $this->_socket;
|
181 |
+
$this->_socket = null;
|
182 |
+
fclose($socket);
|
183 |
+
}
|
184 |
+
|
185 |
+
|
186 |
+
/**
|
187 |
+
* Write $data through the given $socket
|
188 |
+
* @param $socket
|
189 |
+
* @param $data
|
190 |
+
* @param bool $retry
|
191 |
+
* @return bool
|
192 |
+
*/
|
193 |
+
private function _write($socket, $data, $retry = true) {
|
194 |
+
|
195 |
+
$bytes_sent = 0;
|
196 |
+
$bytes_total = strlen($data);
|
197 |
+
$socket_closed = false;
|
198 |
+
$success = true;
|
199 |
+
$max_bytes_per_write = 8192;
|
200 |
+
|
201 |
+
// if we have no data to write just return true
|
202 |
+
if ($bytes_total == 0) {
|
203 |
+
return true;
|
204 |
+
}
|
205 |
+
|
206 |
+
// try to write the data
|
207 |
+
while (!$socket_closed && $bytes_sent < $bytes_total) {
|
208 |
+
|
209 |
+
try {
|
210 |
+
$bytes = fwrite($socket, $data, $max_bytes_per_write);
|
211 |
+
|
212 |
+
if ($this->_debug()) {
|
213 |
+
$this->_log("Socket wrote ".$bytes." bytes");
|
214 |
+
}
|
215 |
+
|
216 |
+
// if we actually wrote data, then remove the written portion from $data left to write
|
217 |
+
if ($bytes > 0) {
|
218 |
+
$data = substr($data, $max_bytes_per_write);
|
219 |
+
}
|
220 |
+
|
221 |
+
} catch (Exception $e) {
|
222 |
+
$this->_handleError($e->getCode(), $e->getMessage());
|
223 |
+
$socket_closed = true;
|
224 |
+
}
|
225 |
+
|
226 |
+
if (isset($bytes) && $bytes) {
|
227 |
+
$bytes_sent += $bytes;
|
228 |
+
} else {
|
229 |
+
$socket_closed = true;
|
230 |
+
}
|
231 |
+
}
|
232 |
+
|
233 |
+
// create a new socket if the current one is closed and retry the message
|
234 |
+
if ($socket_closed) {
|
235 |
+
|
236 |
+
$this->_destroySocket();
|
237 |
+
|
238 |
+
if ($retry) {
|
239 |
+
if ($this->_debug()) {
|
240 |
+
$this->_log("Retrying socket write...");
|
241 |
+
}
|
242 |
+
$socket = $this->_getSocket();
|
243 |
+
if ($socket) return $this->_write($socket, $data, false);
|
244 |
+
}
|
245 |
+
|
246 |
+
return false;
|
247 |
+
}
|
248 |
+
|
249 |
+
|
250 |
+
// only wait for the response in debug mode or if we explicitly want to be synchronous
|
251 |
+
if ($this->_debug() || !$this->_async) {
|
252 |
+
$res = $this->handleResponse(fread($socket, 2048));
|
253 |
+
if ($res["status"] != "200") {
|
254 |
+
$this->_handleError($res["status"], $res["body"]);
|
255 |
+
$success = false;
|
256 |
+
}
|
257 |
+
}
|
258 |
+
|
259 |
+
return $success;
|
260 |
+
}
|
261 |
+
|
262 |
+
|
263 |
+
/**
|
264 |
+
* Parse the response from a socket write (only used for debugging)
|
265 |
+
* @param $response
|
266 |
+
* @return array
|
267 |
+
*/
|
268 |
+
private function handleResponse($response) {
|
269 |
+
|
270 |
+
$lines = explode("\n", $response);
|
271 |
+
|
272 |
+
// extract headers
|
273 |
+
$headers = array();
|
274 |
+
foreach($lines as $line) {
|
275 |
+
$kvsplit = explode(":", $line);
|
276 |
+
if (count($kvsplit) == 2) {
|
277 |
+
$header = $kvsplit[0];
|
278 |
+
$value = $kvsplit[1];
|
279 |
+
$headers[$header] = trim($value);
|
280 |
+
}
|
281 |
+
|
282 |
+
}
|
283 |
+
|
284 |
+
// extract status
|
285 |
+
$line_one_exploded = explode(" ", $lines[0]);
|
286 |
+
$status = $line_one_exploded[1];
|
287 |
+
|
288 |
+
// extract body
|
289 |
+
$body = $lines[count($lines) - 1];
|
290 |
+
|
291 |
+
// if the connection has been closed lets kill the socket
|
292 |
+
if ($headers['Connection'] == "close") {
|
293 |
+
$this->_destroySocket();
|
294 |
+
if ($this->_debug()) {
|
295 |
+
$this->_log("Server told us connection closed so lets destroy the socket so it'll reconnect on next call");
|
296 |
+
}
|
297 |
+
}
|
298 |
+
|
299 |
+
$ret = array(
|
300 |
+
"status" => $status,
|
301 |
+
"body" => $body,
|
302 |
+
);
|
303 |
+
|
304 |
+
return $ret;
|
305 |
+
}
|
306 |
+
|
307 |
+
|
308 |
}
|
src/GridGallery/Promo/Model/classes/lib/Mixpanel.php
CHANGED
@@ -1,302 +1,302 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
require_once(dirname(__FILE__) . "/Base/MixpanelBase.php");
|
4 |
-
require_once(dirname(__FILE__) . "/Producers/MixpanelPeople.php");
|
5 |
-
require_once(dirname(__FILE__) . "/Producers/MixpanelEvents.php");
|
6 |
-
|
7 |
-
/**
|
8 |
-
* This is the main class for the Mixpanel PHP Library which provides all of the methods you need to track events and
|
9 |
-
* create/update profiles.
|
10 |
-
*
|
11 |
-
* Architecture
|
12 |
-
* -------------
|
13 |
-
*
|
14 |
-
* This library is built such that all messages are buffered in an in-memory "queue"
|
15 |
-
* The queue will be automatically flushed at the end of every request. Alternatively, you can call "flush()" manually
|
16 |
-
* at any time. Flushed messages will be passed to a Consumer's "persist" method. The library comes with a handful of
|
17 |
-
* Consumers. The "CurlConsumer" is used by default which will send the messages to Mixpanel using forked cURL processes.
|
18 |
-
* You can implement your own custom Consumer to customize how a message is sent to Mixpanel. This can be useful when
|
19 |
-
* you want to put messages onto a distributed queue (such as ActiveMQ or Kestrel) instead of writing to Mixpanel in
|
20 |
-
* the user thread.
|
21 |
-
*
|
22 |
-
* Options
|
23 |
-
* -------------
|
24 |
-
*
|
25 |
-
* <table width="100%" cellpadding="5">
|
26 |
-
* <tr>
|
27 |
-
* <th>Option</th>
|
28 |
-
* <th>Description</th>
|
29 |
-
* <th>Default</th>
|
30 |
-
* </tr>
|
31 |
-
* <tr>
|
32 |
-
* <td>max_queue_size</td>
|
33 |
-
* <td>The maximum number of items to buffer in memory before flushing</td>
|
34 |
-
* <td>1000</td>
|
35 |
-
* </tr>
|
36 |
-
* <tr>
|
37 |
-
* <td>debug</td>
|
38 |
-
* <td>Enable/disable debug mode</td>
|
39 |
-
* <td>false</td>
|
40 |
-
* </tr>
|
41 |
-
* <tr>
|
42 |
-
* <td>consumer</td>
|
43 |
-
* <td>The consumer to use for writing messages</td>
|
44 |
-
* <td>curl</td>
|
45 |
-
* </tr>
|
46 |
-
* <tr>
|
47 |
-
* <td>consumers</td>
|
48 |
-
* <td>An array of custom consumers in the format array(consumer_key => class_name)</td>
|
49 |
-
* <td>null</td>
|
50 |
-
* </tr>
|
51 |
-
* <tr>
|
52 |
-
* <td>host</td>
|
53 |
-
* <td>The host name for api calls (used by some consumers)</td>
|
54 |
-
* <td>api.mixpanel.com</td>
|
55 |
-
* </tr>
|
56 |
-
* <tr>
|
57 |
-
* <td>events_endpoint</td>
|
58 |
-
* <td>The endpoint for tracking events (relative to the host)</td>
|
59 |
-
* <td>/events</td>
|
60 |
-
* </tr>
|
61 |
-
* <tr>
|
62 |
-
* <td>people_endpoint</td>
|
63 |
-
* <td>The endpoint for making people updates (relative to the host)</td>
|
64 |
-
* <td>/engage</td>
|
65 |
-
* </tr>
|
66 |
-
* <tr>
|
67 |
-
* <td>use_ssl</td>
|
68 |
-
* <td>Tell the consumer whether or not to use ssl (when available)</td>
|
69 |
-
* <td>true</td>
|
70 |
-
* </tr>
|
71 |
-
* <tr>
|
72 |
-
* <td>error_callback</td>
|
73 |
-
* <td>The name of a function to be called on consumption failures</td>
|
74 |
-
* <td>null</td>
|
75 |
-
* </tr>
|
76 |
-
* <tr>
|
77 |
-
* <td>connect_timeout</td>
|
78 |
-
* <td>In both the SocketConsumer and CurlConsumer, this is used for the connection timeout (i.e. How long it has take to actually make a connection).
|
79 |
-
* <td>5</td>
|
80 |
-
* </tr>
|
81 |
-
* <tr>
|
82 |
-
* <td>timeout</td>
|
83 |
-
* <td>In the CurlConsumer (non-forked), it is used to determine how long the cURL call has to execute.
|
84 |
-
* <td>30</td>
|
85 |
-
* </tr>
|
86 |
-
* </table>
|
87 |
-
*
|
88 |
-
* Example: Tracking an Event
|
89 |
-
* -------------
|
90 |
-
*
|
91 |
-
* $mp = Mixpanel::getInstance("MY_TOKEN");
|
92 |
-
*
|
93 |
-
* $mp->track("My Event");
|
94 |
-
*
|
95 |
-
* Example: Setting Profile Properties
|
96 |
-
* -------------
|
97 |
-
*
|
98 |
-
* $mp = Mixpanel::getInstance("MY_TOKEN", array("use_ssl" => false));
|
99 |
-
*
|
100 |
-
* $mp->people->set(12345, array(
|
101 |
-
* '$first_name' => "John",
|
102 |
-
* '$last_name' => "Doe",
|
103 |
-
* '$email' => "john.doe@example.com",
|
104 |
-
* '$phone' => "5555555555",
|
105 |
-
* 'Favorite Color' => "red"
|
106 |
-
* ));
|
107 |
-
*
|
108 |
-
*/
|
109 |
-
class Mixpanel extends Base_MixpanelBase {
|
110 |
-
|
111 |
-
|
112 |
-
/**
|
113 |
-
* An instance of the MixpanelPeople class (used to create/update profiles)
|
114 |
-
* @var MixpanelPeople
|
115 |
-
*/
|
116 |
-
public $people;
|
117 |
-
|
118 |
-
|
119 |
-
/**
|
120 |
-
* An instance of the MixpanelEvents class
|
121 |
-
* @var Producers_MixpanelEvents
|
122 |
-
*/
|
123 |
-
private $_events;
|
124 |
-
|
125 |
-
|
126 |
-
/**
|
127 |
-
* An instance of the Mixpanel class (for singleton use)
|
128 |
-
* @var Mixpanel
|
129 |
-
*/
|
130 |
-
private static $_instance;
|
131 |
-
|
132 |
-
|
133 |
-
/**
|
134 |
-
* Instantiates a new Mixpanel instance.
|
135 |
-
* @param $token
|
136 |
-
* @param array $options
|
137 |
-
*/
|
138 |
-
public function __construct($token, $options = array()) {
|
139 |
-
parent::__construct($options);
|
140 |
-
$this->people = new Producers_MixpanelPeople($token, $options);
|
141 |
-
$this->_events = new Producers_MixpanelEvents($token, $options);
|
142 |
-
}
|
143 |
-
|
144 |
-
|
145 |
-
/**
|
146 |
-
* Returns a singleton instance of Mixpanel
|
147 |
-
* @param $token
|
148 |
-
* @param array $options
|
149 |
-
* @return Mixpanel
|
150 |
-
*/
|
151 |
-
public static function getInstance($token, $options = array()) {
|
152 |
-
if(!isset(self::$_instance)) {
|
153 |
-
self::$_instance = new Mixpanel($token, $options);
|
154 |
-
}
|
155 |
-
return self::$_instance;
|
156 |
-
}
|
157 |
-
|
158 |
-
|
159 |
-
/**
|
160 |
-
* Add an array representing a message to be sent to Mixpanel to the in-memory queue.
|
161 |
-
* @param array $message
|
162 |
-
*/
|
163 |
-
public function enqueue($message = array()) {
|
164 |
-
$this->_events->enqueue($message);
|
165 |
-
}
|
166 |
-
|
167 |
-
|
168 |
-
/**
|
169 |
-
* Add an array representing a list of messages to be sent to Mixpanel to a queue.
|
170 |
-
* @param array $messages
|
171 |
-
*/
|
172 |
-
public function enqueueAll($messages = array()) {
|
173 |
-
$this->_events->enqueueAll($messages);
|
174 |
-
}
|
175 |
-
|
176 |
-
|
177 |
-
/**
|
178 |
-
* Flush the events queue
|
179 |
-
* @param int $desired_batch_size
|
180 |
-
*/
|
181 |
-
public function flush($desired_batch_size = 50) {
|
182 |
-
$this->_events->flush($desired_batch_size);
|
183 |
-
}
|
184 |
-
|
185 |
-
|
186 |
-
/**
|
187 |
-
* Empty the events queue
|
188 |
-
*/
|
189 |
-
public function reset() {
|
190 |
-
$this->_events->reset();
|
191 |
-
}
|
192 |
-
|
193 |
-
|
194 |
-
/**
|
195 |
-
* Identify the user you want to associate to tracked events
|
196 |
-
* @param string|int $user_id
|
197 |
-
*/
|
198 |
-
public function identify($user_id) {
|
199 |
-
$this->_events->identify($user_id);
|
200 |
-
}
|
201 |
-
|
202 |
-
/**
|
203 |
-
* Track an event defined by $event associated with metadata defined by $properties
|
204 |
-
* @param string $event
|
205 |
-
* @param array $properties
|
206 |
-
*/
|
207 |
-
public function track($event, $properties = array()) {
|
208 |
-
$this->_events->track($event, $properties);
|
209 |
-
}
|
210 |
-
|
211 |
-
|
212 |
-
/**
|
213 |
-
* Register a property to be sent with every event.
|
214 |
-
*
|
215 |
-
* If the property has already been registered, it will be
|
216 |
-
* overwritten. NOTE: Registered properties are only persisted for the life of the Mixpanel class instance.
|
217 |
-
* @param string $property
|
218 |
-
* @param mixed $value
|
219 |
-
*/
|
220 |
-
public function register($property, $value) {
|
221 |
-
$this->_events->register($property, $value);
|
222 |
-
}
|
223 |
-
|
224 |
-
|
225 |
-
/**
|
226 |
-
* Register multiple properties to be sent with every event.
|
227 |
-
*
|
228 |
-
* If any of the properties have already been registered,
|
229 |
-
* they will be overwritten. NOTE: Registered properties are only persisted for the life of the Mixpanel class
|
230 |
-
* instance.
|
231 |
-
* @param array $props_and_vals
|
232 |
-
*/
|
233 |
-
public function registerAll($props_and_vals = array()) {
|
234 |
-
$this->_events->registerAll($props_and_vals);
|
235 |
-
}
|
236 |
-
|
237 |
-
|
238 |
-
/**
|
239 |
-
* Register a property to be sent with every event.
|
240 |
-
*
|
241 |
-
* If the property has already been registered, it will NOT be
|
242 |
-
* overwritten. NOTE: Registered properties are only persisted for the life of the Mixpanel class instance.
|
243 |
-
* @param $property
|
244 |
-
* @param $value
|
245 |
-
*/
|
246 |
-
public function registerOnce($property, $value) {
|
247 |
-
$this->_events->registerOnce($property, $value);
|
248 |
-
}
|
249 |
-
|
250 |
-
|
251 |
-
/**
|
252 |
-
* Register multiple properties to be sent with every event.
|
253 |
-
*
|
254 |
-
* If any of the properties have already been registered,
|
255 |
-
* they will NOT be overwritten. NOTE: Registered properties are only persisted for the life of the Mixpanel class
|
256 |
-
* instance.
|
257 |
-
* @param array $props_and_vals
|
258 |
-
*/
|
259 |
-
public function registerAllOnce($props_and_vals = array()) {
|
260 |
-
$this->_events->registerAllOnce($props_and_vals);
|
261 |
-
}
|
262 |
-
|
263 |
-
|
264 |
-
/**
|
265 |
-
* Un-register an property to be sent with every event.
|
266 |
-
* @param string $property
|
267 |
-
*/
|
268 |
-
public function unregister($property) {
|
269 |
-
$this->_events->unregister($property);
|
270 |
-
}
|
271 |
-
|
272 |
-
|
273 |
-
/**
|
274 |
-
* Un-register a list of properties to be sent with every event.
|
275 |
-
* @param array $properties
|
276 |
-
*/
|
277 |
-
public function unregisterAll($properties) {
|
278 |
-
$this->_events->unregisterAll($properties);
|
279 |
-
}
|
280 |
-
|
281 |
-
|
282 |
-
/**
|
283 |
-
* Get a property that is set to be sent with every event
|
284 |
-
* @param string $property
|
285 |
-
* @return mixed
|
286 |
-
*/
|
287 |
-
public function getProperty($property)
|
288 |
-
{
|
289 |
-
return $this->_events->getProperty($property);
|
290 |
-
}
|
291 |
-
|
292 |
-
|
293 |
-
/**
|
294 |
-
* Alias an existing id with a different unique id. This is helpful when you want to associate a generated id
|
295 |
-
* (such as a session id) to a user id or username.
|
296 |
-
* @param string|int $original_id
|
297 |
-
* @param string|int $new_id
|
298 |
-
*/
|
299 |
-
public function createAlias($original_id, $new_id) {
|
300 |
-
$this->_events->createAlias($original_id, $new_id);
|
301 |
-
}
|
302 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once(dirname(__FILE__) . "/Base/MixpanelBase.php");
|
4 |
+
require_once(dirname(__FILE__) . "/Producers/MixpanelPeople.php");
|
5 |
+
require_once(dirname(__FILE__) . "/Producers/MixpanelEvents.php");
|
6 |
+
|
7 |
+
/**
|
8 |
+
* This is the main class for the Mixpanel PHP Library which provides all of the methods you need to track events and
|
9 |
+
* create/update profiles.
|
10 |
+
*
|
11 |
+
* Architecture
|
12 |
+
* -------------
|
13 |
+
*
|
14 |
+
* This library is built such that all messages are buffered in an in-memory "queue"
|
15 |
+
* The queue will be automatically flushed at the end of every request. Alternatively, you can call "flush()" manually
|
16 |
+
* at any time. Flushed messages will be passed to a Consumer's "persist" method. The library comes with a handful of
|
17 |
+
* Consumers. The "CurlConsumer" is used by default which will send the messages to Mixpanel using forked cURL processes.
|
18 |
+
* You can implement your own custom Consumer to customize how a message is sent to Mixpanel. This can be useful when
|
19 |
+
* you want to put messages onto a distributed queue (such as ActiveMQ or Kestrel) instead of writing to Mixpanel in
|
20 |
+
* the user thread.
|
21 |
+
*
|
22 |
+
* Options
|
23 |
+
* -------------
|
24 |
+
*
|
25 |
+
* <table width="100%" cellpadding="5">
|
26 |
+
* <tr>
|
27 |
+
* <th>Option</th>
|
28 |
+
* <th>Description</th>
|
29 |
+
* <th>Default</th>
|
30 |
+
* </tr>
|
31 |
+
* <tr>
|
32 |
+
* <td>max_queue_size</td>
|
33 |
+
* <td>The maximum number of items to buffer in memory before flushing</td>
|
34 |
+
* <td>1000</td>
|
35 |
+
* </tr>
|
36 |
+
* <tr>
|
37 |
+
* <td>debug</td>
|
38 |
+
* <td>Enable/disable debug mode</td>
|
39 |
+
* <td>false</td>
|
40 |
+
* </tr>
|
41 |
+
* <tr>
|
42 |
+
* <td>consumer</td>
|
43 |
+
* <td>The consumer to use for writing messages</td>
|
44 |
+
* <td>curl</td>
|
45 |
+
* </tr>
|
46 |
+
* <tr>
|
47 |
+
* <td>consumers</td>
|
48 |
+
* <td>An array of custom consumers in the format array(consumer_key => class_name)</td>
|
49 |
+
* <td>null</td>
|
50 |
+
* </tr>
|
51 |
+
* <tr>
|
52 |
+
* <td>host</td>
|
53 |
+
* <td>The host name for api calls (used by some consumers)</td>
|
54 |
+
* <td>api.mixpanel.com</td>
|
55 |
+
* </tr>
|
56 |
+
* <tr>
|
57 |
+
* <td>events_endpoint</td>
|
58 |
+
* <td>The endpoint for tracking events (relative to the host)</td>
|
59 |
+
* <td>/events</td>
|
60 |
+
* </tr>
|
61 |
+
* <tr>
|
62 |
+
* <td>people_endpoint</td>
|
63 |
+
* <td>The endpoint for making people updates (relative to the host)</td>
|
64 |
+
* <td>/engage</td>
|
65 |
+
* </tr>
|
66 |
+
* <tr>
|
67 |
+
* <td>use_ssl</td>
|
68 |
+
* <td>Tell the consumer whether or not to use ssl (when available)</td>
|
69 |
+
* <td>true</td>
|
70 |
+
* </tr>
|
71 |
+
* <tr>
|
72 |
+
* <td>error_callback</td>
|
73 |
+
* <td>The name of a function to be called on consumption failures</td>
|
74 |
+
* <td>null</td>
|
75 |
+
* </tr>
|
76 |
+
* <tr>
|
77 |
+
* <td>connect_timeout</td>
|
78 |
+
* <td>In both the SocketConsumer and CurlConsumer, this is used for the connection timeout (i.e. How long it has take to actually make a connection).
|
79 |
+
* <td>5</td>
|
80 |
+
* </tr>
|
81 |
+
* <tr>
|
82 |
+
* <td>timeout</td>
|
83 |
+
* <td>In the CurlConsumer (non-forked), it is used to determine how long the cURL call has to execute.
|
84 |
+
* <td>30</td>
|
85 |
+
* </tr>
|
86 |
+
* </table>
|
87 |
+
*
|
88 |
+
* Example: Tracking an Event
|
89 |
+
* -------------
|
90 |
+
*
|
91 |
+
* $mp = Mixpanel::getInstance("MY_TOKEN");
|
92 |
+
*
|
93 |
+
* $mp->track("My Event");
|
94 |
+
*
|
95 |
+
* Example: Setting Profile Properties
|
96 |
+
* -------------
|
97 |
+
*
|
98 |
+
* $mp = Mixpanel::getInstance("MY_TOKEN", array("use_ssl" => false));
|
99 |
+
*
|
100 |
+
* $mp->people->set(12345, array(
|
101 |
+
* '$first_name' => "John",
|
102 |
+
* '$last_name' => "Doe",
|
103 |
+
* '$email' => "john.doe@example.com",
|
104 |
+
* '$phone' => "5555555555",
|
105 |
+
* 'Favorite Color' => "red"
|
106 |
+
* ));
|
107 |
+
*
|
108 |
+
*/
|
109 |
+
class Mixpanel extends Base_MixpanelBase {
|
110 |
+
|
111 |
+
|
112 |
+
/**
|
113 |
+
* An instance of the MixpanelPeople class (used to create/update profiles)
|
114 |
+
* @var MixpanelPeople
|
115 |
+
*/
|
116 |
+
public $people;
|
117 |
+
|
118 |
+
|
119 |
+
/**
|
120 |
+
* An instance of the MixpanelEvents class
|
121 |
+
* @var Producers_MixpanelEvents
|
122 |
+
*/
|
123 |
+
private $_events;
|
124 |
+
|
125 |
+
|
126 |
+
/**
|
127 |
+
* An instance of the Mixpanel class (for singleton use)
|
128 |
+
* @var Mixpanel
|
129 |
+
*/
|
130 |
+
private static $_instance;
|
131 |
+
|
132 |
+
|
133 |
+
/**
|
134 |
+
* Instantiates a new Mixpanel instance.
|
135 |
+
* @param $token
|
136 |
+
* @param array $options
|
137 |
+
*/
|
138 |
+
public function __construct($token, $options = array()) {
|
139 |
+
parent::__construct($options);
|
140 |
+
$this->people = new Producers_MixpanelPeople($token, $options);
|
141 |
+
$this->_events = new Producers_MixpanelEvents($token, $options);
|
142 |
+
}
|
143 |
+
|
144 |
+
|
145 |
+
/**
|
146 |
+
* Returns a singleton instance of Mixpanel
|
147 |
+
* @param $token
|
148 |
+
* @param array $options
|
149 |
+
* @return Mixpanel
|
150 |
+
*/
|
151 |
+
public static function getInstance($token, $options = array()) {
|
152 |
+
if(!isset(self::$_instance)) {
|
153 |
+
self::$_instance = new Mixpanel($token, $options);
|
154 |
+
}
|
155 |
+
return self::$_instance;
|
156 |
+
}
|
157 |
+
|
158 |
+
|
159 |
+
/**
|
160 |
+
* Add an array representing a message to be sent to Mixpanel to the in-memory queue.
|
161 |
+
* @param array $message
|
162 |
+
*/
|
163 |
+
public function enqueue($message = array()) {
|
164 |
+
$this->_events->enqueue($message);
|
165 |
+
}
|
166 |
+
|
167 |
+
|
168 |
+
/**
|
169 |
+
* Add an array representing a list of messages to be sent to Mixpanel to a queue.
|
170 |
+
* @param array $messages
|
171 |
+
*/
|
172 |
+
public function enqueueAll($messages = array()) {
|
173 |
+
$this->_events->enqueueAll($messages);
|
174 |
+
}
|
175 |
+
|
176 |
+
|
177 |
+
/**
|
178 |
+
* Flush the events queue
|
179 |
+
* @param int $desired_batch_size
|
180 |
+
*/
|
181 |
+
public function flush($desired_batch_size = 50) {
|
182 |
+
$this->_events->flush($desired_batch_size);
|
183 |
+
}
|
184 |
+
|
185 |
+
|
186 |
+
/**
|
187 |
+
* Empty the events queue
|
188 |
+
*/
|
189 |
+
public function reset() {
|
190 |
+
$this->_events->reset();
|
191 |
+
}
|
192 |
+
|
193 |
+
|
194 |
+
/**
|
195 |
+
* Identify the user you want to associate to tracked events
|
196 |
+
* @param string|int $user_id
|
197 |
+
*/
|
198 |
+
public function identify($user_id) {
|
199 |
+
$this->_events->identify($user_id);
|
200 |
+
}
|
201 |
+
|
202 |
+
/**
|
203 |
+
* Track an event defined by $event associated with metadata defined by $properties
|
204 |
+
* @param string $event
|
205 |
+
* @param array $properties
|
206 |
+
*/
|
207 |
+
public function track($event, $properties = array()) {
|
208 |
+
$this->_events->track($event, $properties);
|
209 |
+
}
|
210 |
+
|
211 |
+
|
212 |
+
/**
|
213 |
+
* Register a property to be sent with every event.
|
214 |
+
*
|
215 |
+
* If the property has already been registered, it will be
|
216 |
+
* overwritten. NOTE: Registered properties are only persisted for the life of the Mixpanel class instance.
|
217 |
+
* @param string $property
|
218 |
+
* @param mixed $value
|
219 |
+
*/
|
220 |
+
public function register($property, $value) {
|
221 |
+
$this->_events->register($property, $value);
|
222 |
+
}
|
223 |
+
|
224 |
+
|
225 |
+
/**
|
226 |
+
* Register multiple properties to be sent with every event.
|
227 |
+
*
|
228 |
+
* If any of the properties have already been registered,
|
229 |
+
* they will be overwritten. NOTE: Registered properties are only persisted for the life of the Mixpanel class
|
230 |
+
* instance.
|
231 |
+
* @param array $props_and_vals
|
232 |
+
*/
|
233 |
+
public function registerAll($props_and_vals = array()) {
|
234 |
+
$this->_events->registerAll($props_and_vals);
|
235 |
+
}
|
236 |
+
|
237 |
+
|
238 |
+
/**
|
239 |
+
* Register a property to be sent with every event.
|
240 |
+
*
|
241 |
+
* If the property has already been registered, it will NOT be
|
242 |
+
* overwritten. NOTE: Registered properties are only persisted for the life of the Mixpanel class instance.
|
243 |
+
* @param $property
|
244 |
+
* @param $value
|
245 |
+
*/
|
246 |
+
public function registerOnce($property, $value) {
|
247 |
+
$this->_events->registerOnce($property, $value);
|
248 |
+
}
|
249 |
+
|
250 |
+
|
251 |
+
/**
|
252 |
+
* Register multiple properties to be sent with every event.
|
253 |
+
*
|
254 |
+
* If any of the properties have already been registered,
|
255 |
+
* they will NOT be overwritten. NOTE: Registered properties are only persisted for the life of the Mixpanel class
|
256 |
+
* instance.
|
257 |
+
* @param array $props_and_vals
|
258 |
+
*/
|
259 |
+
public function registerAllOnce($props_and_vals = array()) {
|
260 |
+
$this->_events->registerAllOnce($props_and_vals);
|
261 |
+
}
|
262 |
+
|
263 |
+
|
264 |
+
/**
|
265 |
+
* Un-register an property to be sent with every event.
|
266 |
+
* @param string $property
|
267 |
+
*/
|
268 |
+
public function unregister($property) {
|
269 |
+
$this->_events->unregister($property);
|
270 |
+
}
|
271 |
+
|
272 |
+
|
273 |
+
/**
|
274 |
+
* Un-register a list of properties to be sent with every event.
|
275 |
+
* @param array $properties
|
276 |
+
*/
|
277 |
+
public function unregisterAll($properties) {
|
278 |
+
$this->_events->unregisterAll($properties);
|
279 |
+
}
|
280 |
+
|
281 |
+
|
282 |
+
/**
|
283 |
+
* Get a property that is set to be sent with every event
|
284 |
+
* @param string $property
|
285 |
+
* @return mixed
|
286 |
+
*/
|
287 |
+
public function getProperty($property)
|
288 |
+
{
|
289 |
+
return $this->_events->getProperty($property);
|
290 |
+
}
|
291 |
+
|
292 |
+
|
293 |
+
/**
|
294 |
+
* Alias an existing id with a different unique id. This is helpful when you want to associate a generated id
|
295 |
+
* (such as a session id) to a user id or username.
|
296 |
+
* @param string|int $original_id
|
297 |
+
* @param string|int $new_id
|
298 |
+
*/
|
299 |
+
public function createAlias($original_id, $new_id) {
|
300 |
+
$this->_events->createAlias($original_id, $new_id);
|
301 |
+
}
|
302 |
+
}
|
src/GridGallery/Promo/Model/classes/lib/Producers/MixpanelBaseProducer.php
CHANGED
@@ -1,229 +1,229 @@
|
|
1 |
-
<?php
|
2 |
-
require_once(dirname(__FILE__) . "/../Base/MixpanelBase.php");
|
3 |
-
require_once(dirname(__FILE__) . "/../ConsumerStrategies/FileConsumer.php");
|
4 |
-
require_once(dirname(__FILE__) . "/../ConsumerStrategies/CurlConsumer.php");
|
5 |
-
require_once(dirname(__FILE__) . "/../ConsumerStrategies/SocketConsumer.php");
|
6 |
-
|
7 |
-
if (!function_exists('json_encode')) {
|
8 |
-
throw new Exception('The JSON PHP extension is required.');
|
9 |
-
}
|
10 |
-
|
11 |
-
/**
|
12 |
-
* Provides some base methods for use by a message Producer
|
13 |
-
*/
|
14 |
-
abstract class Producers_MixpanelBaseProducer extends Base_MixpanelBase {
|
15 |
-
|
16 |
-
|
17 |
-
/**
|
18 |
-
* @var string a token associated to a Mixpanel project
|
19 |
-
*/
|
20 |
-
protected $_token;
|
21 |
-
|
22 |
-
|
23 |
-
/**
|
24 |
-
* @var array a queue to hold messages in memory before flushing in batches
|
25 |
-
*/
|
26 |
-
private $_queue = array();
|
27 |
-
|
28 |
-
|
29 |
-
/**
|
30 |
-
* @var ConsumerStrategies_AbstractConsumer the consumer to use when flushing messages
|
31 |
-
*/
|
32 |
-
private $_consumer = null;
|
33 |
-
|
34 |
-
|
35 |
-
/**
|
36 |
-
* @var array The list of available consumers
|
37 |
-
*/
|
38 |
-
private $_consumers = array(
|
39 |
-
"file" => "ConsumerStrategies_FileConsumer",
|
40 |
-
"curl" => "ConsumerStrategies_CurlConsumer",
|
41 |
-
"socket" => "ConsumerStrategies_SocketConsumer"
|
42 |
-
);
|
43 |
-
|
44 |
-
|
45 |
-
/**
|
46 |
-
* If the queue reaches this size we'll auto-flush to prevent out of memory errors
|
47 |
-
* @var int
|
48 |
-
*/
|
49 |
-
protected $_max_queue_size = 1000;
|
50 |
-
|
51 |
-
|
52 |
-
/**
|
53 |
-
* Creates a new MixpanelBaseProducer, assings Mixpanel project token, registers custom Consumers, and instantiates
|
54 |
-
* the desired consumer
|
55 |
-
* @param $token
|
56 |
-
* @param array $options
|
57 |
-
*/
|
58 |
-
public function __construct($token, $options = array()) {
|
59 |
-
|
60 |
-
parent::__construct($options);
|
61 |
-
|
62 |
-
// register any customer consumers
|
63 |
-
if (array_key_exists("consumers", $options)) {
|
64 |
-
$this->_consumers = array_merge($this->_consumers, $options['consumers']);
|
65 |
-
}
|
66 |
-
|
67 |
-
// set max queue size
|
68 |
-
if (array_key_exists("max_queue_size", $options)) {
|
69 |
-
$this->_max_queue_size = $options['max_queue_size'];
|
70 |
-
}
|
71 |
-
|
72 |
-
// associate token
|
73 |
-
$this->_token = $token;
|
74 |
-
|
75 |
-
if ($this->_debug()) {
|
76 |
-
$this->_log("Using token: ".$this->_token);
|
77 |
-
}
|
78 |
-
|
79 |
-
// instantiate the chosen consumer
|
80 |
-
$this->_consumer = $this->_getConsumer();
|
81 |
-
|
82 |
-
}
|
83 |
-
|
84 |
-
|
85 |
-
/**
|
86 |
-
* Flush the queue when we destruct the client with retries
|
87 |
-
*/
|
88 |
-
public function __destruct() {
|
89 |
-
$attempts = 0;
|
90 |
-
$max_attempts = 10;
|
91 |
-
$success = false;
|
92 |
-
while (!$success && $attempts < $max_attempts) {
|
93 |
-
if ($this->_debug()) {
|
94 |
-
$this->_log("destruct flush attempt #".($attempts+1));
|
95 |
-
}
|
96 |
-
$success = $this->flush();
|
97 |
-
$attempts++;
|
98 |
-
}
|
99 |
-
}
|
100 |
-
|
101 |
-
|
102 |
-
/**
|
103 |
-
* Iterate the queue and write in batches using the instantiated Consumer Strategy
|
104 |
-
* @param int $desired_batch_size
|
105 |
-
* @return bool whether or not the flush was successful
|
106 |
-
*/
|
107 |
-
public function flush($desired_batch_size = 50) {
|
108 |
-
$queue_size = count($this->_queue);
|
109 |
-
$succeeded = true;
|
110 |
-
if ($this->_debug()) {
|
111 |
-
$this->_log("Flush called - queue size: ".$queue_size);
|
112 |
-
}
|
113 |
-
|
114 |
-
while($queue_size > 0 && $succeeded) {
|
115 |
-
$batch_size = min(array($queue_size, $desired_batch_size, $this->_options['max_batch_size']));
|
116 |
-
$batch = array_splice($this->_queue, 0, $batch_size);
|
117 |
-
$succeeded = $this->_persist($batch);
|
118 |
-
|
119 |
-
if (!$succeeded) {
|
120 |
-
if ($this->_debug()) {
|
121 |
-
$this->_log("Batch consumption failed!");
|
122 |
-
}
|
123 |
-
$this->_queue = array_merge($batch, $this->_queue);
|
124 |
-
|
125 |
-
if ($this->_debug()) {
|
126 |
-
$this->_log("added batch back to queue, queue size is now $queue_size");
|
127 |
-
}
|
128 |
-
}
|
129 |
-
|
130 |
-
$queue_size = count($this->_queue);
|
131 |
-
|
132 |
-
if ($this->_debug()) {
|
133 |
-
$this->_log("Batch of $batch_size consumed, queue size is now $queue_size");
|
134 |
-
}
|
135 |
-
}
|
136 |
-
return $succeeded;
|
137 |
-
}
|
138 |
-
|
139 |
-
|
140 |
-
/**
|
141 |
-
* Empties the queue without persisting any of the messages
|
142 |
-
*/
|
143 |
-
public function reset() {
|
144 |
-
$this->_queue = array();
|
145 |
-
}
|
146 |
-
|
147 |
-
|
148 |
-
/**
|
149 |
-
* Returns the in-memory queue
|
150 |
-
* @return array
|
151 |
-
*/
|
152 |
-
public function getQueue() {
|
153 |
-
return $this->_queue;
|
154 |
-
}
|
155 |
-
|
156 |
-
/**
|
157 |
-
* Returns the current Mixpanel project token
|
158 |
-
* @return string
|
159 |
-
*/
|
160 |
-
public function getToken() {
|
161 |
-
return $this->_token;
|
162 |
-
}
|
163 |
-
|
164 |
-
|
165 |
-
/**
|
166 |
-
* Given a strategy type, return a new PersistenceStrategy object
|
167 |
-
* @return ConsumerStrategies_AbstractConsumer
|
168 |
-
*/
|
169 |
-
protected function _getConsumer() {
|
170 |
-
$key = $this->_options['consumer'];
|
171 |
-
$Strategy = $this->_consumers[$key];
|
172 |
-
if ($this->_debug()) {
|
173 |
-
$this->_log("Using consumer: " . $key . " -> " . $Strategy);
|
174 |
-
}
|
175 |
-
$this->_options['endpoint'] = $this->_getEndpoint();
|
176 |
-
|
177 |
-
return new $Strategy($this->_options);
|
178 |
-
}
|
179 |
-
|
180 |
-
|
181 |
-
/**
|
182 |
-
* Add an array representing a message to be sent to Mixpanel to a queue.
|
183 |
-
* @param array $message
|
184 |
-
*/
|
185 |
-
public function enqueue($message = array()) {
|
186 |
-
array_push($this->_queue, $message);
|
187 |
-
|
188 |
-
// force a flush if we've reached our threshold
|
189 |
-
if (count($this->_queue) > $this->_max_queue_size) {
|
190 |
-
$this->flush();
|
191 |
-
}
|
192 |
-
|
193 |
-
if ($this->_debug()) {
|
194 |
-
$this->_log("Queued message: ".json_encode($message));
|
195 |
-
}
|
196 |
-
}
|
197 |
-
|
198 |
-
|
199 |
-
/**
|
200 |
-
* Add an array representing a list of messages to be sent to Mixpanel to a queue.
|
201 |
-
* @param array $messages
|
202 |
-
*/
|
203 |
-
public function enqueueAll($messages = array()) {
|
204 |
-
foreach($messages as $message) {
|
205 |
-
$this->enqueue($message);
|
206 |
-
}
|
207 |
-
|
208 |
-
}
|
209 |
-
|
210 |
-
|
211 |
-
/**
|
212 |
-
* Given an array of messages, persist it with the instantiated Persistence Strategy
|
213 |
-
* @param $message
|
214 |
-
* @return mixed
|
215 |
-
*/
|
216 |
-
protected function _persist($message) {
|
217 |
-
return $this->_consumer->persist($message);
|
218 |
-
}
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
/**
|
224 |
-
* Return the endpoint that should be used by a consumer that consumes messages produced by this producer.
|
225 |
-
* @return string
|
226 |
-
*/
|
227 |
-
abstract function _getEndpoint();
|
228 |
-
|
229 |
}
|
1 |
+
<?php
|
2 |
+
require_once(dirname(__FILE__) . "/../Base/MixpanelBase.php");
|
3 |
+
require_once(dirname(__FILE__) . "/../ConsumerStrategies/FileConsumer.php");
|
4 |
+
require_once(dirname(__FILE__) . "/../ConsumerStrategies/CurlConsumer.php");
|
5 |
+
require_once(dirname(__FILE__) . "/../ConsumerStrategies/SocketConsumer.php");
|
6 |
+
|
7 |
+
if (!function_exists('json_encode')) {
|
8 |
+
throw new Exception('The JSON PHP extension is required.');
|
9 |
+
}
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Provides some base methods for use by a message Producer
|
13 |
+
*/
|
14 |
+
abstract class Producers_MixpanelBaseProducer extends Base_MixpanelBase {
|
15 |
+
|
16 |
+
|
17 |
+
/**
|
18 |
+
* @var string a token associated to a Mixpanel project
|
19 |
+
*/
|
20 |
+
protected $_token;
|
21 |
+
|
22 |
+
|
23 |
+
/**
|
24 |
+
* @var array a queue to hold messages in memory before flushing in batches
|
25 |
+
*/
|
26 |
+
private $_queue = array();
|
27 |
+
|
28 |
+
|
29 |
+
/**
|
30 |
+
* @var ConsumerStrategies_AbstractConsumer the consumer to use when flushing messages
|
31 |
+
*/
|
32 |
+
private $_consumer = null;
|
33 |
+
|
34 |
+
|
35 |
+
/**
|
36 |
+
* @var array The list of available consumers
|
37 |
+
*/
|
38 |
+
private $_consumers = array(
|
39 |
+
"file" => "ConsumerStrategies_FileConsumer",
|
40 |
+
"curl" => "ConsumerStrategies_CurlConsumer",
|
41 |
+
"socket" => "ConsumerStrategies_SocketConsumer"
|
42 |
+
);
|
43 |
+
|
44 |
+
|
45 |
+
/**
|
46 |
+
* If the queue reaches this size we'll auto-flush to prevent out of memory errors
|
47 |
+
* @var int
|
48 |
+
*/
|
49 |
+
protected $_max_queue_size = 1000;
|
50 |
+
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Creates a new MixpanelBaseProducer, assings Mixpanel project token, registers custom Consumers, and instantiates
|
54 |
+
* the desired consumer
|
55 |
+
* @param $token
|
56 |
+
* @param array $options
|
57 |
+
*/
|
58 |
+
public function __construct($token, $options = array()) {
|
59 |
+
|
60 |
+
parent::__construct($options);
|
61 |
+
|
62 |
+
// register any customer consumers
|
63 |
+
if (array_key_exists("consumers", $options)) {
|
64 |
+
$this->_consumers = array_merge($this->_consumers, $options['consumers']);
|
65 |
+
}
|
66 |
+
|
67 |
+
// set max queue size
|
68 |
+
if (array_key_exists("max_queue_size", $options)) {
|
69 |
+
$this->_max_queue_size = $options['max_queue_size'];
|
70 |
+
}
|
71 |
+
|
72 |
+
// associate token
|
73 |
+
$this->_token = $token;
|
74 |
+
|
75 |
+
if ($this->_debug()) {
|
76 |
+
$this->_log("Using token: ".$this->_token);
|
77 |
+
}
|
78 |
+
|
79 |
+
// instantiate the chosen consumer
|
80 |
+
$this->_consumer = $this->_getConsumer();
|
81 |
+
|
82 |
+
}
|
83 |
+
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Flush the queue when we destruct the client with retries
|
87 |
+
*/
|
88 |
+
public function __destruct() {
|
89 |
+
$attempts = 0;
|
90 |
+
$max_attempts = 10;
|
91 |
+
$success = false;
|
92 |
+
while (!$success && $attempts < $max_attempts) {
|
93 |
+
if ($this->_debug()) {
|
94 |
+
$this->_log("destruct flush attempt #".($attempts+1));
|
95 |
+
}
|
96 |
+
$success = $this->flush();
|
97 |
+
$attempts++;
|
98 |
+
}
|
99 |
+
}
|
100 |
+
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Iterate the queue and write in batches using the instantiated Consumer Strategy
|
104 |
+
* @param int $desired_batch_size
|
105 |
+
* @return bool whether or not the flush was successful
|
106 |
+
*/
|
107 |
+
public function flush($desired_batch_size = 50) {
|
108 |
+
$queue_size = count($this->_queue);
|
109 |
+
$succeeded = true;
|
110 |
+
if ($this->_debug()) {
|
111 |
+
$this->_log("Flush called - queue size: ".$queue_size);
|
112 |
+
}
|
113 |
+
|
114 |
+
while($queue_size > 0 && $succeeded) {
|
115 |
+
$batch_size = min(array($queue_size, $desired_batch_size, $this->_options['max_batch_size']));
|
116 |
+
$batch = array_splice($this->_queue, 0, $batch_size);
|
117 |
+
$succeeded = $this->_persist($batch);
|
118 |
+
|
119 |
+
if (!$succeeded) {
|
120 |
+
if ($this->_debug()) {
|
121 |
+
$this->_log("Batch consumption failed!");
|
122 |
+
}
|
123 |
+
$this->_queue = array_merge($batch, $this->_queue);
|
124 |
+
|
125 |
+
if ($this->_debug()) {
|
126 |
+
$this->_log("added batch back to queue, queue size is now $queue_size");
|
127 |
+
}
|
128 |
+
}
|
129 |
+
|
130 |
+
$queue_size = count($this->_queue);
|
131 |
+
|
132 |
+
if ($this->_debug()) {
|
133 |
+
$this->_log("Batch of $batch_size consumed, queue size is now $queue_size");
|
134 |
+
}
|
135 |
+
}
|
136 |
+
return $succeeded;
|
137 |
+
}
|
138 |
+
|
139 |
+
|
140 |
+
/**
|
141 |
+
* Empties the queue without persisting any of the messages
|
142 |
+
*/
|
143 |
+
public function reset() {
|
144 |
+
$this->_queue = array();
|
145 |
+
}
|
146 |
+
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Returns the in-memory queue
|
150 |
+
* @return array
|
151 |
+
*/
|
152 |
+
public function getQueue() {
|
153 |
+
return $this->_queue;
|
154 |
+
}
|
155 |
+
|
156 |
+
/**
|
157 |
+
* Returns the current Mixpanel project token
|
158 |
+
* @return string
|
159 |
+
*/
|
160 |
+
public function getToken() {
|
161 |
+
return $this->_token;
|
162 |
+
}
|
163 |
+
|
164 |
+
|
165 |
+
/**
|
166 |
+
* Given a strategy type, return a new PersistenceStrategy object
|
167 |
+
* @return ConsumerStrategies_AbstractConsumer
|
168 |
+
*/
|
169 |
+
protected function _getConsumer() {
|
170 |
+
$key = $this->_options['consumer'];
|
171 |
+
$Strategy = $this->_consumers[$key];
|
172 |
+
if ($this->_debug()) {
|
173 |
+
$this->_log("Using consumer: " . $key . " -> " . $Strategy);
|
174 |
+
}
|
175 |
+
$this->_options['endpoint'] = $this->_getEndpoint();
|
176 |
+
|
177 |
+
return new $Strategy($this->_options);
|
178 |
+
}
|
179 |
+
|
180 |
+
|
181 |
+
/**
|
182 |
+
* Add an array representing a message to be sent to Mixpanel to a queue.
|
183 |
+
* @param array $message
|
184 |
+
*/
|
185 |
+
public function enqueue($message = array()) {
|
186 |
+
array_push($this->_queue, $message);
|
187 |
+
|
188 |
+
// force a flush if we've reached our threshold
|
189 |
+
if (count($this->_queue) > $this->_max_queue_size) {
|
190 |
+
$this->flush();
|
191 |
+
}
|
192 |
+
|
193 |
+
if ($this->_debug()) {
|
194 |
+
$this->_log("Queued message: ".json_encode($message));
|
195 |
+
}
|
196 |
+
}
|
197 |
+
|
198 |
+
|
199 |
+
/**
|
200 |
+
* Add an array representing a list of messages to be sent to Mixpanel to a queue.
|
201 |
+
* @param array $messages
|
202 |
+
*/
|
203 |
+
public function enqueueAll($messages = array()) {
|
204 |
+
foreach($messages as $message) {
|
205 |
+
$this->enqueue($message);
|
206 |
+
}
|
207 |
+
|
208 |
+
}
|
209 |
+
|
210 |
+
|
211 |
+
/**
|
212 |
+
* Given an array of messages, persist it with the instantiated Persistence Strategy
|
213 |
+
* @param $message
|
214 |
+
* @return mixed
|
215 |
+
*/
|
216 |
+
protected function _persist($message) {
|
217 |
+
return $this->_consumer->persist($message);
|
218 |
+
}
|
219 |
+
|
220 |
+
|
221 |
+
|
222 |
+
|
223 |
+
/**
|
224 |
+
* Return the endpoint that should be used by a consumer that consumes messages produced by this producer.
|
225 |
+
* @return string
|
226 |
+
*/
|
227 |
+
abstract function _getEndpoint();
|
228 |
+
|
229 |
}
|
src/GridGallery/Promo/Model/classes/lib/Producers/MixpanelEvents.php
CHANGED
@@ -1,164 +1,164 @@
|
|
1 |
-
<?php
|
2 |
-
require_once(dirname(__FILE__) . "/MixpanelBaseProducer.php");
|
3 |
-
require_once(dirname(__FILE__) . "/MixpanelPeople.php");
|
4 |
-
require_once(dirname(__FILE__) . "/../ConsumerStrategies/CurlConsumer.php");
|
5 |
-
|
6 |
-
/**
|
7 |
-
* Provides an API to track events on Mixpanel
|
8 |
-
*/
|
9 |
-
class Producers_MixpanelEvents extends Producers_MixpanelBaseProducer {
|
10 |
-
|
11 |
-
/**
|
12 |
-
* An array of properties to attach to every tracked event
|
13 |
-
* @var array
|
14 |
-
*/
|
15 |
-
private $_super_properties = array("mp_lib" => "php");
|
16 |
-
|
17 |
-
|
18 |
-
/**
|
19 |
-
* Track an event defined by $event associated with metadata defined by $properties
|
20 |
-
* @param string $event
|
21 |
-
* @param array $properties
|
22 |
-
*/
|
23 |
-
public function track($event, $properties = array()) {
|
24 |
-
|
25 |
-
// if no token is passed in, use current token
|
26 |
-
if (!array_key_exists("token", $properties)) $properties['token'] = $this->_token;
|
27 |
-
|
28 |
-
// if no time is passed in, use the current time
|
29 |
-
if (!array_key_exists('time', $properties)) $properties['time'] = time();
|
30 |
-
|
31 |
-
$params['event'] = $event;
|
32 |
-
$params['properties'] = array_merge($this->_super_properties, $properties);
|
33 |
-
|
34 |
-
$this->enqueue($params);
|
35 |
-
}
|
36 |
-
|
37 |
-
|
38 |
-
/**
|
39 |
-
* Register a property to be sent with every event. If the property has already been registered, it will be
|
40 |
-
* overwritten.
|
41 |
-
* @param string $property
|
42 |
-
* @param mixed $value
|
43 |
-
*/
|
44 |
-
public function register($property, $value) {
|
45 |
-
$this->_super_properties[$property] = $value;
|
46 |
-
}
|
47 |
-
|
48 |
-
|
49 |
-
/**
|
50 |
-
* Register multiple properties to be sent with every event. If any of the properties have already been registered,
|
51 |
-
* they will be overwritten.
|
52 |
-
* @param array $props_and_vals
|
53 |
-
*/
|
54 |
-
public function registerAll($props_and_vals = array()) {
|
55 |
-
foreach($props_and_vals as $property => $value) {
|
56 |
-
$this->register($property, $value);
|
57 |
-
}
|
58 |
-
}
|
59 |
-
|
60 |
-
|
61 |
-
/**
|
62 |
-
* Register a property to be sent with every event. If the property has already been registered, it will NOT be
|
63 |
-
* overwritten.
|
64 |
-
* @param $property
|
65 |
-
* @param $value
|
66 |
-
*/
|
67 |
-
public function registerOnce($property, $value) {
|
68 |
-
if (!isset($this->_super_properties[$property])) {
|
69 |
-
$this->register($property, $value);
|
70 |
-
}
|
71 |
-
}
|
72 |
-
|
73 |
-
|
74 |
-
/**
|
75 |
-
* Register multiple properties to be sent with every event. If any of the properties have already been registered,
|
76 |
-
* they will NOT be overwritten.
|
77 |
-
* @param array $props_and_vals
|
78 |
-
*/
|
79 |
-
public function registerAllOnce($props_and_vals = array()) {
|
80 |
-
foreach($props_and_vals as $property => $value) {
|
81 |
-
if (!isset($this->_super_properties[$property])) {
|
82 |
-
$this->register($property, $value);
|
83 |
-
}
|
84 |
-
}
|
85 |
-
}
|
86 |
-
|
87 |
-
|
88 |
-
/**
|
89 |
-
* Un-register an property to be sent with every event.
|
90 |
-
* @param string $property
|
91 |
-
*/
|
92 |
-
public function unregister($property) {
|
93 |
-
unset($this->_super_properties[$property]);
|
94 |
-
}
|
95 |
-
|
96 |
-
|
97 |
-
/**
|
98 |
-
* Un-register a list of properties to be sent with every event.
|
99 |
-
* @param array $properties
|
100 |
-
*/
|
101 |
-
public function unregisterAll($properties) {
|
102 |
-
foreach($properties as $property) {
|
103 |
-
$this->unregister($property);
|
104 |
-
}
|
105 |
-
}
|
106 |
-
|
107 |
-
|
108 |
-
/**
|
109 |
-
* Get a property that is set to be sent with every event
|
110 |
-
* @param string $property
|
111 |
-
* @return mixed
|
112 |
-
*/
|
113 |
-
public function getProperty($property) {
|
114 |
-
return $this->_super_properties[$property];
|
115 |
-
}
|
116 |
-
|
117 |
-
|
118 |
-
/**
|
119 |
-
* Identify the user you want to associate to tracked events
|
120 |
-
* @param string|int $user_id
|
121 |
-
*/
|
122 |
-
public function identify($user_id) {
|
123 |
-
$this->register("distinct_id", $user_id);
|
124 |
-
}
|
125 |
-
|
126 |
-
|
127 |
-
/**
|
128 |
-
* Alias an existing id with a different unique id. This is helpful when you want to associate a generated id to
|
129 |
-
* a username or e-mail address.
|
130 |
-
*
|
131 |
-
* Because aliasing can be extremely vulnerable to race conditions and ordering issues, we'll make a synchronous
|
132 |
-
* call directly to Mixpanel when this method is called. If it fails we'll throw an Exception as subsequent
|
133 |
-
* events are likely to be incorrectly tracked.
|
134 |
-
* @param string|int $original_id
|
135 |
-
* @param string|int $new_id
|
136 |
-
* @return array $msg
|
137 |
-
* @throws Exception
|
138 |
-
*/
|
139 |
-
public function createAlias($original_id, $new_id) {
|
140 |
-
$msg = array(
|
141 |
-
"event" => '$create_alias',
|
142 |
-
"properties" => array("distinct_id" => $original_id, "alias" => $new_id, "token" => $this->_token)
|
143 |
-
);
|
144 |
-
|
145 |
-
$options = array_merge($this->_options, array("endpoint" => $this->_getEndpoint(), "fork" => false));
|
146 |
-
$curlConsumer = new ConsumerStrategies_CurlConsumer($options);
|
147 |
-
$success = $curlConsumer->persist(array($msg));
|
148 |
-
if (!$success) {
|
149 |
-
error_log("Creating Mixpanel Alias (original id: $original_id, new id: $new_id) failed");
|
150 |
-
throw new Exception("Tried to create an alias but the call was not successful");
|
151 |
-
} else {
|
152 |
-
return $msg;
|
153 |
-
}
|
154 |
-
}
|
155 |
-
|
156 |
-
|
157 |
-
/**
|
158 |
-
* Returns the "events" endpoint
|
159 |
-
* @return string
|
160 |
-
*/
|
161 |
-
function _getEndpoint() {
|
162 |
-
return $this->_options['events_endpoint'];
|
163 |
-
}
|
164 |
}
|
1 |
+
<?php
|
2 |
+
require_once(dirname(__FILE__) . "/MixpanelBaseProducer.php");
|
3 |
+
require_once(dirname(__FILE__) . "/MixpanelPeople.php");
|
4 |
+
require_once(dirname(__FILE__) . "/../ConsumerStrategies/CurlConsumer.php");
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Provides an API to track events on Mixpanel
|
8 |
+
*/
|
9 |
+
class Producers_MixpanelEvents extends Producers_MixpanelBaseProducer {
|
10 |
+
|
11 |
+
/**
|
12 |
+
* An array of properties to attach to every tracked event
|
13 |
+
* @var array
|
14 |
+
*/
|
15 |
+
private $_super_properties = array("mp_lib" => "php");
|
16 |
+
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Track an event defined by $event associated with metadata defined by $properties
|
20 |
+
* @param string $event
|
21 |
+
* @param array $properties
|
22 |
+
*/
|
23 |
+
public function track($event, $properties = array()) {
|
24 |
+
|
25 |
+
// if no token is passed in, use current token
|
26 |
+
if (!array_key_exists("token", $properties)) $properties['token'] = $this->_token;
|
27 |
+
|
28 |
+
// if no time is passed in, use the current time
|
29 |
+
if (!array_key_exists('time', $properties)) $properties['time'] = time();
|
30 |
+
|
31 |
+
$params['event'] = $event;
|
32 |
+
$params['properties'] = array_merge($this->_super_properties, $properties);
|
33 |
+
|
34 |
+
$this->enqueue($params);
|
35 |
+
}
|
36 |
+
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Register a property to be sent with every event. If the property has already been registered, it will be
|
40 |
+
* overwritten.
|
41 |
+
* @param string $property
|
42 |
+
* @param mixed $value
|
43 |
+
*/
|
44 |
+
public function register($property, $value) {
|
45 |
+
$this->_super_properties[$property] = $value;
|
46 |
+
}
|
47 |
+
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Register multiple properties to be sent with every event. If any of the properties have already been registered,
|
51 |
+
* they will be overwritten.
|
52 |
+
* @param array $props_and_vals
|
53 |
+
*/
|
54 |
+
public function registerAll($props_and_vals = array()) {
|
55 |
+
foreach($props_and_vals as $property => $value) {
|
56 |
+
$this->register($property, $value);
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Register a property to be sent with every event. If the property has already been registered, it will NOT be
|
63 |
+
* overwritten.
|
64 |
+
* @param $property
|
65 |
+
* @param $value
|
66 |
+
*/
|
67 |
+
public function registerOnce($property, $value) {
|
68 |
+
if (!isset($this->_super_properties[$property])) {
|
69 |
+
$this->register($property, $value);
|
70 |
+
}
|
71 |
+
}
|
72 |
+
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Register multiple properties to be sent with every event. If any of the properties have already been registered,
|
76 |
+
* they will NOT be overwritten.
|
77 |
+
* @param array $props_and_vals
|
78 |
+
*/
|
79 |
+
public function registerAllOnce($props_and_vals = array()) {
|
80 |
+
foreach($props_and_vals as $property => $value) {
|
81 |
+
if (!isset($this->_super_properties[$property])) {
|
82 |
+
$this->register($property, $value);
|
83 |
+
}
|
84 |
+
}
|
85 |
+
}
|
86 |
+
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Un-register an property to be sent with every event.
|
90 |
+
* @param string $property
|
91 |
+
*/
|
92 |
+
public function unregister($property) {
|
93 |
+
unset($this->_super_properties[$property]);
|
94 |
+
}
|
95 |
+
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Un-register a list of properties to be sent with every event.
|
99 |
+
* @param array $properties
|
100 |
+
*/
|
101 |
+
public function unregisterAll($properties) {
|
102 |
+
foreach($properties as $property) {
|
103 |
+
$this->unregister($property);
|
104 |
+
}
|
105 |
+
}
|
106 |
+
|
107 |
+
|
108 |
+
/**
|
109 |
+
* Get a property that is set to be sent with every event
|
110 |
+
* @param string $property
|
111 |
+
* @return mixed
|
112 |
+
*/
|
113 |
+
public function getProperty($property) {
|
114 |
+
return $this->_super_properties[$property];
|
115 |
+
}
|
116 |
+
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Identify the user you want to associate to tracked events
|
120 |
+
* @param string|int $user_id
|
121 |
+
*/
|
122 |
+
public function identify($user_id) {
|
123 |
+
$this->register("distinct_id", $user_id);
|
124 |
+
}
|
125 |
+
|
126 |
+
|
127 |
+
/**
|
128 |
+
* Alias an existing id with a different unique id. This is helpful when you want to associate a generated id to
|
129 |
+
* a username or e-mail address.
|
130 |
+
*
|
131 |
+
* Because aliasing can be extremely vulnerable to race conditions and ordering issues, we'll make a synchronous
|
132 |
+
* call directly to Mixpanel when this method is called. If it fails we'll throw an Exception as subsequent
|
133 |
+
* events are likely to be incorrectly tracked.
|
134 |
+
* @param string|int $original_id
|
135 |
+
* @param string|int $new_id
|
136 |
+
* @return array $msg
|
137 |
+
* @throws Exception
|
138 |
+
*/
|
139 |
+
public function createAlias($original_id, $new_id) {
|
140 |
+
$msg = array(
|
141 |
+
"event" => '$create_alias',
|
142 |
+
"properties" => array("distinct_id" => $original_id, "alias" => $new_id, "token" => $this->_token)
|
143 |
+
);
|
144 |
+
|
145 |
+
$options = array_merge($this->_options, array("endpoint" => $this->_getEndpoint(), "fork" => false));
|
146 |
+
$curlConsumer = new ConsumerStrategies_CurlConsumer($options);
|
147 |
+
$success = $curlConsumer->persist(array($msg));
|
148 |
+
if (!$success) {
|
149 |
+
error_log("Creating Mixpanel Alias (original id: $original_id, new id: $new_id) failed");
|
150 |
+
throw new Exception("Tried to create an alias but the call was not successful");
|
151 |
+
} else {
|
152 |
+
return $msg;
|
153 |
+
}
|
154 |
+
}
|
155 |
+
|
156 |
+
|
157 |
+
/**
|
158 |
+
* Returns the "events" endpoint
|
159 |
+
* @return string
|
160 |
+
*/
|
161 |
+
function _getEndpoint() {
|
162 |
+
return $this->_options['events_endpoint'];
|
163 |
+
}
|
164 |
}
|
src/GridGallery/Promo/Model/classes/lib/Producers/MixpanelPeople.php
CHANGED
@@ -1,147 +1,147 @@
|
|
1 |
-
<?php
|
2 |
-
require_once(dirname(__FILE__) . "/MixpanelBaseProducer.php");
|
3 |
-
|
4 |
-
/**
|
5 |
-
* Provides an API to create/update profiles on Mixpanel
|
6 |
-
*/
|
7 |
-
class Producers_MixpanelPeople extends Producers_MixpanelBaseProducer {
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Internal method to prepare a message given the message data
|
11 |
-
* @param $distinct_id
|
12 |
-
* @param $operation
|
13 |
-
* @param $value
|
14 |
-
* @param null $ip
|
15 |
-
* @return array
|
16 |
-
*/
|
17 |
-
private function _constructPayload($distinct_id, $operation, $value, $ip = null, $ignore_time = false) {
|
18 |
-
$payload = array(
|
19 |
-
'$token' => $this->_token,
|
20 |
-
'$distinct_id' => $distinct_id,
|
21 |
-
$operation => $value
|
22 |
-
);
|
23 |
-
if ($ip !== null) $payload['$ip'] = $ip;
|
24 |
-
if ($ignore_time === true) $payload['$ignore_time'] = true;
|
25 |
-
return $payload;
|
26 |
-
}
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Set properties on a user record. If the profile does not exist, it creates it with these properties.
|
30 |
-
* If it does exist, it sets the properties to these values, overwriting existing values.
|
31 |
-
* @param string|int $distinct_id the distinct_id or alias of a user
|
32 |
-
* @param array $props associative array of properties to set on the profile
|
33 |
-
* @param string|null $ip the ip address of the client (used for geo-location)
|
34 |
-
* @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
|
35 |
-
*/
|
36 |
-
public function set($distinct_id, $props, $ip = null, $ignore_time = false) {
|
37 |
-
$payload = $this->_constructPayload($distinct_id, '$set', $props, $ip, $ignore_time);
|
38 |
-
$this->enqueue($payload);
|
39 |
-
}
|
40 |
-
|
41 |
-
/**
|
42 |
-
* Set properties on a user record. If the profile does not exist, it creates it with these properties.
|
43 |
-
* If it does exist, it sets the properties to these values but WILL NOT overwrite existing values.
|
44 |
-
* @param string|int $distinct_id the distinct_id or alias of a user
|
45 |
-
* @param array $props associative array of properties to set on the profile
|
46 |
-
* @param string|null $ip the ip address of the client (used for geo-location)
|
47 |
-
* @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
|
48 |
-
*/
|
49 |
-
public function setOnce($distinct_id, $props, $ip = null, $ignore_time = false) {
|
50 |
-
$payload = $this->_constructPayload($distinct_id, '$set_once', $props, $ip, $ignore_time);
|
51 |
-
$this->enqueue($payload);
|
52 |
-
}
|
53 |
-
|
54 |
-
/**
|
55 |
-
* Unset properties on a user record. If the profile does not exist, it creates it with no properties.
|
56 |
-
* If it does exist, it unsets these properties. NOTE: In other libraries we use 'unset' which is
|
57 |
-
* a reserved word in PHP.
|
58 |
-
* @param string|int $distinct_id the distinct_id or alias of a user
|
59 |
-
* @param array $props associative array of properties to unset on the profile
|
60 |
-
* @param string|null $ip the ip address of the client (used for geo-location)
|
61 |
-
* @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
|
62 |
-
*/
|
63 |
-
public function remove($distinct_id, $props, $ip = null, $ignore_time = false) {
|
64 |
-
$payload = $this->_constructPayload($distinct_id, '$unset', $props, $ip, $ignore_time);
|
65 |
-
$this->enqueue($payload);
|
66 |
-
}
|
67 |
-
|
68 |
-
/**
|
69 |
-
* Increments the value of a property on a user record. If the profile does not exist, it creates it and sets the
|
70 |
-
* property to the increment value.
|
71 |
-
* @param string|int $distinct_id the distinct_id or alias of a user
|
72 |
-
* @param $prop string the property to increment
|
73 |
-
* @param int $val the amount to increment the property by
|
74 |
-
* @param string|null $ip the ip address of the client (used for geo-location)
|
75 |
-
* @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
|
76 |
-
*/
|
77 |
-
public function increment($distinct_id, $prop, $val, $ip = null, $ignore_time = false) {
|
78 |
-
$payload = $this->_constructPayload($distinct_id, '$add', array("$prop" => $val), $ip, $ignore_time);
|
79 |
-
$this->enqueue($payload);
|
80 |
-
}
|
81 |
-
|
82 |
-
/**
|
83 |
-
* Adds $val to a list located at $prop. If the property does not exist, it will be created. If $val is a string
|
84 |
-
* and the list is empty or does not exist, a new list with one value will be created.
|
85 |
-
* @param string|int $distinct_id the distinct_id or alias of a user
|
86 |
-
* @param string $prop the property that holds the list
|
87 |
-
* @param string|array $val items to add to the list
|
88 |
-
* @param string|null $ip the ip address of the client (used for geo-location)
|
89 |
-
* @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
|
90 |
-
*/
|
91 |
-
public function append($distinct_id, $prop, $val, $ip = null, $ignore_time = false) {
|
92 |
-
$operation = gettype($val) == "array" ? '$union' : '$append';
|
93 |
-
$payload = $this->_constructPayload($distinct_id, $operation, array("$prop" => $val), $ip, $ignore_time);
|
94 |
-
$this->enqueue($payload);
|
95 |
-
}
|
96 |
-
|
97 |
-
/**
|
98 |
-
* Adds a transaction to the user's profile for revenue tracking
|
99 |
-
* @param string|int $distinct_id the distinct_id or alias of a user
|
100 |
-
* @param string $amount the transaction amount e.g. "20.50"
|
101 |
-
* @param null $timestamp the timestamp of when the transaction occurred (default to current timestamp)
|
102 |
-
* @param string|null $ip the ip address of the client (used for geo-location)
|
103 |
-
* @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
|
104 |
-
*/
|
105 |
-
public function trackCharge($distinct_id, $amount, $timestamp = null, $ip = null, $ignore_time = false) {
|
106 |
-
$timestamp = $timestamp == null ? time() : $timestamp;
|
107 |
-
$date_iso = date("c", $timestamp);
|
108 |
-
$transaction = array(
|
109 |
-
'$time' => $date_iso,
|
110 |
-
'$amount' => $amount
|
111 |
-
);
|
112 |
-
$val = array('$transactions' => $transaction);
|
113 |
-
$payload = $this->_constructPayload($distinct_id, '$append', $val, $ip, $ignore_time);
|
114 |
-
$this->enqueue($payload);
|
115 |
-
}
|
116 |
-
|
117 |
-
/**
|
118 |
-
* Clear all transactions stored on a user's profile
|
119 |
-
* @param string|int $distinct_id the distinct_id or alias of a user
|
120 |
-
* @param string|null $ip the ip address of the client (used for geo-location)
|
121 |
-
* @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
|
122 |
-
*/
|
123 |
-
public function clearCharges($distinct_id, $ip = null, $ignore_time = false) {
|
124 |
-
$payload = $this->_constructPayload($distinct_id, '$set', array('$transactions' => array()), $ip, $ignore_time);
|
125 |
-
$this->enqueue($payload);
|
126 |
-
}
|
127 |
-
|
128 |
-
/**
|
129 |
-
* Delete this profile from Mixpanel
|
130 |
-
* @param string|int $distinct_id the distinct_id or alias of a user
|
131 |
-
* @param string|null $ip the ip address of the client (used for geo-location)
|
132 |
-
* @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
|
133 |
-
*/
|
134 |
-
public function deleteUser($distinct_id, $ip = null, $ignore_time = false) {
|
135 |
-
$payload = $this->_constructPayload($distinct_id, '$delete', "", $ip, $ignore_time);
|
136 |
-
$this->enqueue($payload);
|
137 |
-
}
|
138 |
-
|
139 |
-
/**
|
140 |
-
* Returns the "engage" endpoint
|
141 |
-
* @return string
|
142 |
-
*/
|
143 |
-
function _getEndpoint() {
|
144 |
-
return $this->_options['people_endpoint'];
|
145 |
-
}
|
146 |
-
|
147 |
-
}
|
1 |
+
<?php
|
2 |
+
require_once(dirname(__FILE__) . "/MixpanelBaseProducer.php");
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Provides an API to create/update profiles on Mixpanel
|
6 |
+
*/
|
7 |
+
class Producers_MixpanelPeople extends Producers_MixpanelBaseProducer {
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Internal method to prepare a message given the message data
|
11 |
+
* @param $distinct_id
|
12 |
+
* @param $operation
|
13 |
+
* @param $value
|
14 |
+
* @param null $ip
|
15 |
+
* @return array
|
16 |
+
*/
|
17 |
+
private function _constructPayload($distinct_id, $operation, $value, $ip = null, $ignore_time = false) {
|
18 |
+
$payload = array(
|
19 |
+
'$token' => $this->_token,
|
20 |
+
'$distinct_id' => $distinct_id,
|
21 |
+
$operation => $value
|
22 |
+
);
|
23 |
+
if ($ip !== null) $payload['$ip'] = $ip;
|
24 |
+
if ($ignore_time === true) $payload['$ignore_time'] = true;
|
25 |
+
return $payload;
|
26 |
+
}
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Set properties on a user record. If the profile does not exist, it creates it with these properties.
|
30 |
+
* If it does exist, it sets the properties to these values, overwriting existing values.
|
31 |
+
* @param string|int $distinct_id the distinct_id or alias of a user
|
32 |
+
* @param array $props associative array of properties to set on the profile
|
33 |
+
* @param string|null $ip the ip address of the client (used for geo-location)
|
34 |
+
* @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
|
35 |
+
*/
|
36 |
+
public function set($distinct_id, $props, $ip = null, $ignore_time = false) {
|
37 |
+
$payload = $this->_constructPayload($distinct_id, '$set', $props, $ip, $ignore_time);
|
38 |
+
$this->enqueue($payload);
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Set properties on a user record. If the profile does not exist, it creates it with these properties.
|
43 |
+
* If it does exist, it sets the properties to these values but WILL NOT overwrite existing values.
|
44 |
+
* @param string|int $distinct_id the distinct_id or alias of a user
|
45 |
+
* @param array $props associative array of properties to set on the profile
|
46 |
+
* @param string|null $ip the ip address of the client (used for geo-location)
|
47 |
+
* @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
|
48 |
+
*/
|
49 |
+
public function setOnce($distinct_id, $props, $ip = null, $ignore_time = false) {
|
50 |
+
$payload = $this->_constructPayload($distinct_id, '$set_once', $props, $ip, $ignore_time);
|
51 |
+
$this->enqueue($payload);
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Unset properties on a user record. If the profile does not exist, it creates it with no properties.
|
56 |
+
* If it does exist, it unsets these properties. NOTE: In other libraries we use 'unset' which is
|
57 |
+
* a reserved word in PHP.
|
58 |
+
* @param string|int $distinct_id the distinct_id or alias of a user
|
59 |
+
* @param array $props associative array of properties to unset on the profile
|
60 |
+
* @param string|null $ip the ip address of the client (used for geo-location)
|
61 |
+
* @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
|
62 |
+
*/
|
63 |
+
public function remove($distinct_id, $props, $ip = null, $ignore_time = false) {
|
64 |
+
$payload = $this->_constructPayload($distinct_id, '$unset', $props, $ip, $ignore_time);
|
65 |
+
$this->enqueue($payload);
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Increments the value of a property on a user record. If the profile does not exist, it creates it and sets the
|
70 |
+
* property to the increment value.
|
71 |
+
* @param string|int $distinct_id the distinct_id or alias of a user
|
72 |
+
* @param $prop string the property to increment
|
73 |
+
* @param int $val the amount to increment the property by
|
74 |
+
* @param string|null $ip the ip address of the client (used for geo-location)
|
75 |
+
* @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
|
76 |
+
*/
|
77 |
+
public function increment($distinct_id, $prop, $val, $ip = null, $ignore_time = false) {
|
78 |
+
$payload = $this->_constructPayload($distinct_id, '$add', array("$prop" => $val), $ip, $ignore_time);
|
79 |
+
$this->enqueue($payload);
|
80 |
+
}
|
81 |
+
|
82 |
+
/**
|
83 |
+
* Adds $val to a list located at $prop. If the property does not exist, it will be created. If $val is a string
|
84 |
+
* and the list is empty or does not exist, a new list with one value will be created.
|
85 |
+
* @param string|int $distinct_id the distinct_id or alias of a user
|
86 |
+
* @param string $prop the property that holds the list
|
87 |
+
* @param string|array $val items to add to the list
|
88 |
+
* @param string|null $ip the ip address of the client (used for geo-location)
|
89 |
+
* @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
|
90 |
+
*/
|
91 |
+
public function append($distinct_id, $prop, $val, $ip = null, $ignore_time = false) {
|
92 |
+
$operation = gettype($val) == "array" ? '$union' : '$append';
|
93 |
+
$payload = $this->_constructPayload($distinct_id, $operation, array("$prop" => $val), $ip, $ignore_time);
|
94 |
+
$this->enqueue($payload);
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Adds a transaction to the user's profile for revenue tracking
|
99 |
+
* @param string|int $distinct_id the distinct_id or alias of a user
|
100 |
+
* @param string $amount the transaction amount e.g. "20.50"
|
101 |
+
* @param null $timestamp the timestamp of when the transaction occurred (default to current timestamp)
|
102 |
+
* @param string|null $ip the ip address of the client (used for geo-location)
|
103 |
+
* @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
|
104 |
+
*/
|
105 |
+
public function trackCharge($distinct_id, $amount, $timestamp = null, $ip = null, $ignore_time = false) {
|
106 |
+
$timestamp = $timestamp == null ? time() : $timestamp;
|
107 |
+
$date_iso = date("c", $timestamp);
|
108 |
+
$transaction = array(
|
109 |
+
'$time' => $date_iso,
|
110 |
+
'$amount' => $amount
|
111 |
+
);
|
112 |
+
$val = array('$transactions' => $transaction);
|
113 |
+
$payload = $this->_constructPayload($distinct_id, '$append', $val, $ip, $ignore_time);
|
114 |
+
$this->enqueue($payload);
|
115 |
+
}
|
116 |
+
|
117 |
+
/**
|
118 |
+
* Clear all transactions stored on a user's profile
|
119 |
+
* @param string|int $distinct_id the distinct_id or alias of a user
|
120 |
+
* @param string|null $ip the ip address of the client (used for geo-location)
|
121 |
+
* @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
|
122 |
+
*/
|
123 |
+
public function clearCharges($distinct_id, $ip = null, $ignore_time = false) {
|
124 |
+
$payload = $this->_constructPayload($distinct_id, '$set', array('$transactions' => array()), $ip, $ignore_time);
|
125 |
+
$this->enqueue($payload);
|
126 |
+
}
|
127 |
+
|
128 |
+
/**
|
129 |
+
* Delete this profile from Mixpanel
|
130 |
+
* @param string|int $distinct_id the distinct_id or alias of a user
|
131 |
+
* @param string|null $ip the ip address of the client (used for geo-location)
|
132 |
+
* @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
|
133 |
+
*/
|
134 |
+
public function deleteUser($distinct_id, $ip = null, $ignore_time = false) {
|
135 |
+
$payload = $this->_constructPayload($distinct_id, '$delete', "", $ip, $ignore_time);
|
136 |
+
$this->enqueue($payload);
|
137 |
+
}
|
138 |
+
|
139 |
+
/**
|
140 |
+
* Returns the "engage" endpoint
|
141 |
+
* @return string
|
142 |
+
*/
|
143 |
+
function _getEndpoint() {
|
144 |
+
return $this->_options['people_endpoint'];
|
145 |
+
}
|
146 |
+
|
147 |
+
}
|
src/GridGallery/Settings/views/index.twig
CHANGED
@@ -17,7 +17,7 @@
|
|
17 |
<div class="setting">
|
18 |
<div class="setting-description">
|
19 |
<label>{{ environment.translate('Send usage statistics') }}</label>
|
20 |
-
{{ h.showTooltip('
|
21 |
</div>
|
22 |
<div class="setting-control">
|
23 |
<input type="checkbox" name="settings[send_stats]" value="1" {% if settings.send_stats %}checked{% endif %} />
|
@@ -25,15 +25,15 @@
|
|
25 |
</div>
|
26 |
<div class="setting">
|
27 |
<div class="setting-description">
|
28 |
-
<label>{{ environment.translate('Image
|
29 |
-
{{ h.showTooltip('
|
30 |
</div>
|
31 |
<div class="setting-control">
|
32 |
<select name="settings[image_editor]">
|
33 |
{% set editors = {
|
34 |
auto: 'Auto',
|
35 |
gd: 'GD',
|
36 |
-
|
37 |
} %}
|
38 |
{% for name, title in editors %}
|
39 |
<option value="{{ name }}"
|
@@ -50,7 +50,7 @@
|
|
50 |
<div class="setting-description">
|
51 |
|
52 |
<label>{{ environment.translate('Roles') }}</label>
|
53 |
-
{{ h.showTooltip('
|
54 |
|
55 |
{% if environment.isPro() == false %}
|
56 |
<a target="_blank" href="{{ build_pro_url({ 'utm_medium': 'manage_roles' }) }}">
|
17 |
<div class="setting">
|
18 |
<div class="setting-description">
|
19 |
<label>{{ environment.translate('Send usage statistics') }}</label>
|
20 |
+
{{ h.showTooltip('If this option is enabled, the statistics about what plugin options you prefer to use will be collected and sent to us automatically. This information will help us make our solution better for you.', 'top', true) }}
|
21 |
</div>
|
22 |
<div class="setting-control">
|
23 |
<input type="checkbox" name="settings[send_stats]" value="1" {% if settings.send_stats %}checked{% endif %} />
|
25 |
</div>
|
26 |
<div class="setting">
|
27 |
<div class="setting-description">
|
28 |
+
<label>{{ environment.translate('Image Preprocessor') }}</label>
|
29 |
+
{{ h.showTooltip('Choose the preprocessor for image transformations (cropping, resizing etc.) Note: Changing the default settings may affect image quality. If you are not sure about how to use this option, please leave the settings by default.', 'top', true) }}
|
30 |
</div>
|
31 |
<div class="setting-control">
|
32 |
<select name="settings[image_editor]">
|
33 |
{% set editors = {
|
34 |
auto: 'Auto',
|
35 |
gd: 'GD',
|
36 |
+
imagic: 'Imagick',
|
37 |
} %}
|
38 |
{% for name, title in editors %}
|
39 |
<option value="{{ name }}"
|
50 |
<div class="setting-description">
|
51 |
|
52 |
<label>{{ environment.translate('Roles') }}</label>
|
53 |
+
{{ h.showTooltip('Here you may assign the roles of the persons, that are allowed to use the plugin. This feature is useful when you need to depute your site management to someone else. Administrator is included by default.', 'top', true) }}
|
54 |
|
55 |
{% if environment.isPro() == false %}
|
56 |
<a target="_blank" href="{{ build_pro_url({ 'utm_medium': 'manage_roles' }) }}">
|
src/GridGallery/Ui/views/type.twig
CHANGED
@@ -157,6 +157,8 @@
|
|
157 |
{% endmacro %}
|
158 |
|
159 |
{% macro list_image(image, sliderSettings, galleryId) %}
|
|
|
|
|
160 |
{% set nonProMsg = 'Available in PRO' %}
|
161 |
<tr data-entity data-entity-id="{{ image.id }}" data-settings="{{ sliderSettings|json_encode|e }}" data-entity-type="photo" data-entity-info="{{ image|json_encode|e }}" class="ggImgInfoRow">
|
162 |
<th scope="row" class="check-column ggImgVertMoveCol">
|
@@ -186,15 +188,69 @@
|
|
186 |
<td class="title column-title">
|
187 |
<form id="photo-editor-{{ image.id }}" class="photo-editor attachment-{{ image.attachment.id }}">
|
188 |
<div class="gg-tab-links gg-image-params" data-tabs="gg-image-{{ image.id }}">
|
189 |
-
<div class="gg-tab-link active" data-tab-info="page-{{ image.id }}-1">
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
<div class="gg-tab-link" data-tab-info="page-{{ image.id }}-
|
197 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
198 |
|
199 |
<a data-image-id="{{ image.id }}" data-attachment-id="{{ image.attachment.id }}"
|
200 |
class="add-new-h2 button replace-image">
|
157 |
{% endmacro %}
|
158 |
|
159 |
{% macro list_image(image, sliderSettings, galleryId) %}
|
160 |
+
{% import '@core/helpers.twig' as hlp %}
|
161 |
+
|
162 |
{% set nonProMsg = 'Available in PRO' %}
|
163 |
<tr data-entity data-entity-id="{{ image.id }}" data-settings="{{ sliderSettings|json_encode|e }}" data-entity-type="photo" data-entity-info="{{ image|json_encode|e }}" class="ggImgInfoRow">
|
164 |
<th scope="row" class="check-column ggImgVertMoveCol">
|
188 |
<td class="title column-title">
|
189 |
<form id="photo-editor-{{ image.id }}" class="photo-editor attachment-{{ image.attachment.id }}">
|
190 |
<div class="gg-tab-links gg-image-params" data-tabs="gg-image-{{ image.id }}">
|
191 |
+
<div class="gg-tab-link active" data-tab-info="page-{{ image.id }}-1">
|
192 |
+
{{ translate('Caption') }}
|
193 |
+
{{ hlp.showTooltip(
|
194 |
+
translate('Add image caption. You may find detailed caption settings at Settings > Captions page.')
|
195 |
+
~ ' <a target=\'_blank\' href=\'https://supsystic.com/documentation/images-settings/\'>https://supsystic.com/documentation/images-settings/</a>'
|
196 |
+
, 'top', true) }}
|
197 |
+
</div>
|
198 |
+
<div class="gg-tab-link" data-tab-info="page-{{ image.id }}-2">
|
199 |
+
{{ translate('Description') }}
|
200 |
+
{{ hlp.showTooltip(
|
201 |
+
translate('Add image description. You may find detailed description settings at Settings>Captions page. Note: in order to show descriptions and to change the description settings \'Caption builder\' option should be enabled first.')
|
202 |
+
~ ' <a target=\'_blank\' href=\'https://supsystic.com/documentation/images-settings/\'>https://supsystic.com/documentation/images-settings/</a>'
|
203 |
+
, 'top', true) }}
|
204 |
+
</div>
|
205 |
+
<div class="gg-tab-link" data-tab-info="page-{{ image.id }}-3">
|
206 |
+
{{ translate('SEO') }}
|
207 |
+
{{ hlp.showTooltip(
|
208 |
+
translate('Add SEO keywords, separated by comma, or SEO-optimized sentences. They will appear under your image, when it opens in pop-up window.')
|
209 |
+
~ ' <a target=\'_blank\' href=\'https://supsystic.com/documentation/images-settings/\'>https://supsystic.com/documentation/images-settings/</a>'
|
210 |
+
, 'top', true) }}
|
211 |
+
</div>
|
212 |
+
<div class="gg-tab-link" data-tab-info="page-{{ image.id }}-4">
|
213 |
+
{{ translate('Link') }}
|
214 |
+
{{ hlp.showTooltip(
|
215 |
+
translate('You may add the link, which opens when clicking on your image thumbnail instead of pop-up window. Note: if you add video URL, this option will be inactive.')
|
216 |
+
~ ' <a target=\'_blank\' href=\'https://supsystic.com/documentation/images-settings/\'>https://supsystic.com/documentation/images-settings/</a>'
|
217 |
+
, 'top', true) }}
|
218 |
+
</div>
|
219 |
+
<div class="gg-tab-link" data-tab-info="page-{{ image.id }}-5">
|
220 |
+
{{ translate('Video') }}
|
221 |
+
{{ hlp.showTooltip(
|
222 |
+
translate('Here you may add the video url. After clicking on the image thumbnail, video will open in pop-up window instead of the image.')
|
223 |
+
~ ' <a target=\'_blank\' href=\'https://supsystic.com/documentation/images-settings/\'>https://supsystic.com/documentation/images-settings/</a>'
|
224 |
+
, 'top', true) }}
|
225 |
+
</div>
|
226 |
+
<div class="gg-tab-link" data-tab-info="page-{{ image.id }}-6">
|
227 |
+
{{ translate('Categories') }}
|
228 |
+
{{ hlp.showTooltip(
|
229 |
+
translate('If you want to arrange your gallery by categories, you should add category names here and separate them by commas.')
|
230 |
+
~ ' <a target=\'_blank\' href=\'https://supsystic.com/documentation/images-settings/\'>https://supsystic.com/documentation/images-settings/</a>'
|
231 |
+
, 'top', true) }}
|
232 |
+
</div>
|
233 |
+
<div class="gg-tab-link" data-tab-info="page-{{ image.id }}-7">
|
234 |
+
{{ translate('Linked images') }}
|
235 |
+
{{ hlp.showTooltip(
|
236 |
+
translate('Here you may choose one or several linked images for this image thumbnail. Note: this option works only with Popup theme #7.')
|
237 |
+
~ ' <a target=\'_blank\' href=\'https://supsystic.com/example/linked-images-popup/\'>https://supsystic.com/example/linked-images-popup/</a>'
|
238 |
+
, 'top', true) }}
|
239 |
+
</div>
|
240 |
+
<div class="gg-tab-link" data-tab-info="page-{{ image.id }}-8">
|
241 |
+
{{ translate('Crop') }}
|
242 |
+
{{ hlp.showTooltip(
|
243 |
+
translate('In some gallery types image thumbnails are cropped. Here you may select the crop position to be sure that the most important part of the image will be visible.')
|
244 |
+
~ ' <a target=\'_blank\' href=\'https://supsystic.com/documentation/images-settings/\'>https://supsystic.com/documentation/images-settings/</a>'
|
245 |
+
, 'top', true) }}
|
246 |
+
</div>
|
247 |
+
<div class="gg-tab-link" data-tab-info="page-{{ image.id }}-9">
|
248 |
+
{{ translate('Image on hover') }}
|
249 |
+
{{ hlp.showTooltip(
|
250 |
+
translate('Here you may add the image that will the original image when mouse cursor is over the thumbnail. Note: in order to make this feature work, you should enable \'Image on hover\' option in Settings > Captions.')
|
251 |
+
~ ' <a target=\'_blank\' href=\'https://supsystic.com/documentation/images-settings/\'>https://supsystic.com/documentation/images-settings/</a>'
|
252 |
+
, 'top', true) }}
|
253 |
+
</div>
|
254 |
|
255 |
<a data-image-id="{{ image.id }}" data-attachment-id="{{ image.attachment.id }}"
|
256 |
class="add-new-h2 button replace-image">
|