PageRenderTime 55ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 1ms

/wp-content/plugins/LayerSlider/layerslider.php

https://github.com/alniko009/magic
PHP | 1573 lines | 1208 code | 187 blank | 178 comment | 101 complexity | 6fc33bb4cec4ed1cc00f2ddfb920af7e MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1
  1. <?php
  2. /*
  3. Plugin Name: LayerSlider WP
  4. Plugin URI: http://codecanyon.net/user/kreatura/
  5. Description: LayerSlider is the most advanced responsive WordPress slider plugin with the famous Parallax Effect and over 200 2D & 3D transitions.
  6. Version: 4.6.3
  7. Author: Kreatura Media
  8. Author URI: http://kreaturamedia.com/
  9. */
  10. /********************************************************/
  11. /* Actions */
  12. /********************************************************/
  13. require_once dirname(__FILE__) . '/lib/class.km.autoupdate.plugins.php';
  14. // Globals
  15. $GLOBALS['lsPluginPath'] = plugins_url('/', __FILE__);
  16. $GLOBALS['lsAutoUpdateBox'] = true;
  17. // Constants
  18. define('LS_ROOT_PATH', __FILE__);
  19. define('LS_PLUGIN_VERSION', '4.6.3');
  20. define('LS_PLUGIN_SLUG', basename(dirname(__FILE__)));
  21. define('LS_PLUGIN_BASE', plugin_basename(__FILE__));
  22. // Activation hook for creating the initial DB table
  23. register_activation_hook(__FILE__, 'layerslider_activation_scripts');
  24. // Run activation scripts when adding new sites to a multisite installation
  25. add_action('wpmu_new_blog', 'layerslider_new_site');
  26. // Register custom settings menu
  27. add_action('admin_menu', 'layerslider_settings_menu');
  28. // Auto update
  29. if(get_option('layerslider-validated', '0')) {
  30. new KM_PluginUpdates(array(
  31. 'root' => LS_ROOT_PATH,
  32. 'version' => LS_PLUGIN_VERSION,
  33. 'repo' => 'http://updates.kreaturamedia.com/plugins/',
  34. 'channel' => get_option('layerslider-release-channel', 'stable'),
  35. 'license' => get_option('layerslider-purchase-code', '')
  36. ));
  37. }
  38. // Hook to trigger plugin override functions
  39. add_action('after_setup_theme', 'layerslider_loaded');
  40. // Link content resources
  41. add_action('wp_enqueue_scripts', 'layerslider_enqueue_content_res');
  42. // Link admin resources
  43. add_action('admin_enqueue_scripts', 'layerslider_enqueue_admin_res');
  44. // AJAXs
  45. add_action('wp_ajax_ls_save_screen_options', 'ls_save_screen_options');
  46. add_action('wp_ajax_layerslider_verify_purchase_code', 'layerslider_verify_purchase_code');
  47. // Add shortcode
  48. add_shortcode("layerslider","layerslider_init");
  49. // Widget action
  50. add_action( 'widgets_init', create_function( '', 'register_widget("LayerSlider_Widget");' ) );
  51. // Load plugin locale
  52. add_action('plugins_loaded', 'layerslider_load_lang');
  53. // Remove slider
  54. if(isset($_GET['page']) && $_GET['page'] == 'layerslider' && isset($_GET['action']) && $_GET['action'] == 'remove') {
  55. add_action('admin_init', 'layerslider_removeslider');
  56. }
  57. // Duplicate slider
  58. if(isset($_GET['page']) && $_GET['page'] == 'layerslider' && isset($_GET['action']) && $_GET['action'] == 'duplicate') {
  59. add_action('admin_init', 'layerslider_duplicateslider');
  60. }
  61. // Import sample sliders
  62. if(isset($_GET['page']) && $_GET['page'] == 'layerslider' && isset($_GET['action']) && $_GET['action'] == 'import_sample') {
  63. add_action('admin_init', 'layerslider_import_sample_slider');
  64. }
  65. // Convert data storage
  66. if(isset($_GET['page']) && $_GET['page'] == 'layerslider' && isset($_GET['action']) && $_GET['action'] == 'convert') {
  67. add_action('admin_init', 'layerslider_convert');
  68. }
  69. // Help menu
  70. add_filter('contextual_help', 'layerslider_help', 10, 3);
  71. if(strstr($_SERVER['REQUEST_URI'], '?page=layerslider')) {
  72. add_action('admin_notices', 'layerslider_update_notice');
  73. }
  74. // Storage notice
  75. if(get_option('layerslider-slides') != false) {
  76. // Get current page
  77. global $pagenow;
  78. // Plugins page
  79. if($pagenow == 'plugins.php' || $pagenow == 'index.php' || strstr($_SERVER['REQUEST_URI'], 'layerslider')) {
  80. add_action('admin_notices', 'layerslider_admin_notice');
  81. }
  82. }
  83. /********************************************************/
  84. /* LayerSlider locale */
  85. /********************************************************/
  86. function layerslider_load_lang() {
  87. load_plugin_textdomain('LayerSlider', false, basename(dirname(__FILE__)) . '/languages/' );
  88. }
  89. /********************************************************/
  90. /* CuteSlider activation scripts */
  91. /********************************************************/
  92. function layerslider_activation_scripts() {
  93. // Multi-site
  94. if(is_multisite()) {
  95. // Get WPDB Object
  96. global $wpdb;
  97. // Get current site
  98. $old_site = $wpdb->blogid;
  99. // Get all sites
  100. $sites = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs");
  101. // Iterate over the sites
  102. foreach($sites as $site) {
  103. switch_to_blog($site);
  104. layerslider_create_db_table();
  105. }
  106. // Switch back the old site
  107. switch_to_blog($old_site);
  108. // Single-site
  109. } else {
  110. layerslider_create_db_table();
  111. }
  112. }
  113. /********************************************************/
  114. /* LayerSlider new site activation */
  115. /********************************************************/
  116. function layerslider_new_site($blog_id) {
  117. // Get WPDB Object
  118. global $wpdb;
  119. // Get current site
  120. $old_site = $wpdb->blogid;
  121. // Switch to new site
  122. switch_to_blog($blog_id);
  123. // Run activation scripts
  124. layerslider_create_db_table();
  125. // Switch back the old site
  126. switch_to_blog($old_site);
  127. }
  128. /********************************************************/
  129. /* LayerSlider database table create */
  130. /********************************************************/
  131. function layerslider_create_db_table() {
  132. // Get WPDB Object
  133. global $wpdb;
  134. // Table name
  135. $table_name = $wpdb->prefix . "layerslider";
  136. // Building the query
  137. $sql = "CREATE TABLE $table_name (
  138. id int(10) NOT NULL AUTO_INCREMENT,
  139. name varchar(100) NOT NULL,
  140. data mediumtext NOT NULL,
  141. date_c int(10) NOT NULL,
  142. date_m int(11) NOT NULL,
  143. flag_hidden tinyint(1) NOT NULL DEFAULT 0,
  144. flag_deleted tinyint(1) NOT NULL DEFAULT 0,
  145. PRIMARY KEY (id)
  146. );";
  147. // Executing the query
  148. require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
  149. // Execute the query
  150. dbDelta($sql);
  151. }
  152. /********************************************************/
  153. /* Check purchase code */
  154. /********************************************************/
  155. function layerslider_verify_purchase_code() {
  156. global $wp_version;
  157. // Get data
  158. $pcode = get_option('layerslider-purchase-code', '');
  159. $validated = get_option('layerslider-validated', '0');
  160. $channel = ($_POST['channel'] === 'beta') ? 'beta' : 'stable';
  161. // Save sent data
  162. update_option('layerslider-release-channel', $channel);
  163. update_option('layerslider-purchase-code', $_POST['purchase_code']);
  164. // Release channel
  165. if($validated == 1) {
  166. if($pcode == $_POST['purchase_code']) {
  167. die(json_encode(array('success' => true, 'message' => __('Your settings were successfully saved.', 'LayerSlider'))));
  168. }
  169. }
  170. // Verify license
  171. $response = wp_remote_post('http://activate.kreaturamedia.com/', array(
  172. 'user-agent' => 'WordPress/'.$wp_version.'; '.get_bloginfo('url'),
  173. 'body' => array(
  174. 'plugin' => urlencode('LayerSlider WP'),
  175. 'license' => urlencode($_POST['purchase_code'])
  176. )
  177. ));
  178. // Valid
  179. if($response['body'] == 'valid') {
  180. update_option('layerslider-validated', '1');
  181. die(json_encode(array('success' => true, 'message' => __('Thank you for purchasing LayerSlider WP. You successfully validated your purchase code for auto-updates.', 'LayerSlider'))));
  182. // Invalid
  183. } else {
  184. update_option('layerslider-validated', '0');
  185. die(json_encode(array('success' => false, 'message' => __("Your purchase code doesn't appear to be valid. Please make sure that you entered your purchase code correctly.", "LayerSlider"))));
  186. }
  187. }
  188. function layerslider_loaded() {
  189. if(has_action('layerslider_ready')) {
  190. do_action('layerslider_ready');
  191. }
  192. }
  193. /********************************************************/
  194. /* Enqueue Content Scripts */
  195. /********************************************************/
  196. function layerslider_enqueue_content_res() {
  197. wp_enqueue_script('layerslider_js', $GLOBALS['lsPluginPath'].'js/layerslider.kreaturamedia.jquery.js', array('jquery'), LS_PLUGIN_VERSION );
  198. wp_enqueue_script('jquery_easing', $GLOBALS['lsPluginPath'].'js/jquery-easing-1.3.js', array('jquery'), '1.3.0' );
  199. wp_enqueue_script('transit', $GLOBALS['lsPluginPath'].'js/jquerytransit.js', array('jquery'), '0.9.9' );
  200. wp_enqueue_script('layerslider_transitions', $GLOBALS['lsPluginPath'].'js/layerslider.transitions.js', array(), LS_PLUGIN_VERSION );
  201. wp_enqueue_style('layerslider_css', $GLOBALS['lsPluginPath'].'css/layerslider.css', array(), LS_PLUGIN_VERSION );
  202. // Custom transitions
  203. $upload_dir = wp_upload_dir();
  204. $custom_trs = $upload_dir['basedir'] . '/layerslider.custom.transitions.js';
  205. $custom_trs_url = $upload_dir['baseurl'] . '/layerslider.custom.transitions.js';
  206. if(file_exists($custom_trs)) {
  207. wp_enqueue_script('layerslider_custom_transitions', $custom_trs_url, array(), LS_PLUGIN_VERSION );
  208. }
  209. // Custom CSS
  210. $custom_css = $upload_dir['basedir'] . '/layerslider.custom.css';
  211. $custom_css_url = $upload_dir['baseurl'] . '/layerslider.custom.css';
  212. if(file_exists($custom_css)) {
  213. wp_enqueue_style('layerslider_custom_css', $custom_css_url, array(), LS_PLUGIN_VERSION );
  214. }
  215. }
  216. /********************************************************/
  217. /* Enqueue Admin Scripts */
  218. /********************************************************/
  219. function layerslider_enqueue_admin_res() {
  220. // Get WP version
  221. global $wp_version;
  222. // Global
  223. wp_enqueue_style('layerslider_global_css', $GLOBALS['lsPluginPath'].'css/global.css', array(), LS_PLUGIN_VERSION );
  224. // LayerSlider
  225. if(isset($_GET['page']) && strstr($_GET['page'], 'layerslider') != false) {
  226. // New Media Library
  227. if(function_exists( 'wp_enqueue_media' )){
  228. wp_enqueue_media();
  229. }
  230. wp_enqueue_script('thickbox');
  231. wp_enqueue_style('thickbox');
  232. wp_enqueue_script('jquery-ui-sortable');
  233. wp_enqueue_script('jquery-ui-draggable');
  234. wp_enqueue_script('wp-pointer');
  235. wp_enqueue_style('wp-pointer');
  236. wp_enqueue_script('json2');
  237. wp_enqueue_script('layerslider_admin_js', $GLOBALS['lsPluginPath'].'js/admin.js', array('jquery'), LS_PLUGIN_VERSION );
  238. wp_enqueue_style('layerslider_admin_css', $GLOBALS['lsPluginPath'].'css/admin.css', array(), LS_PLUGIN_VERSION );
  239. // MiniColor
  240. wp_enqueue_script('minicolor', $GLOBALS['lsPluginPath'].'js/minicolors/jquery.minicolors.js', array('jquery'), LS_PLUGIN_VERSION );
  241. wp_enqueue_style('minicolor', $GLOBALS['lsPluginPath'].'js/minicolors/jquery.minicolors.css', array(), LS_PLUGIN_VERSION );
  242. // LayerSlider for preview
  243. wp_enqueue_script('layerslider_js', $GLOBALS['lsPluginPath'].'js/layerslider.kreaturamedia.jquery.js', array('jquery'), LS_PLUGIN_VERSION );
  244. wp_enqueue_script('layerslider_transitions', $GLOBALS['lsPluginPath'].'js/layerslider.transitions.js', array(), LS_PLUGIN_VERSION );
  245. wp_enqueue_script('jquery_easing', $GLOBALS['lsPluginPath'].'js/jquery-easing-1.3.js', array('jquery'), '1.3.0' );
  246. wp_enqueue_script('transit', $GLOBALS['lsPluginPath'].'js/jquerytransit.js', array('jquery'), '0.9.9' );
  247. wp_enqueue_script('layerslider_tr_gallery', $GLOBALS['lsPluginPath'].'js/layerslider.transitiongallery.js', array('jquery'), LS_PLUGIN_VERSION );
  248. wp_enqueue_style('layerslider_css', $GLOBALS['lsPluginPath'].'css/layerslider.css', array(), LS_PLUGIN_VERSION );
  249. wp_enqueue_style('layerslider_tr_gallery', $GLOBALS['lsPluginPath'].'css/layerslider.transitiongallery.css', array(), LS_PLUGIN_VERSION );
  250. // Custom transitions
  251. $upload_dir = wp_upload_dir();
  252. $custom_trs = $upload_dir['basedir'] . '/layerslider.custom.transitions.js';
  253. $custom_trs_url = $upload_dir['baseurl'] . '/layerslider.custom.transitions.js';
  254. if(file_exists($custom_trs)) {
  255. wp_enqueue_script('layerslider_custom_transitions', $custom_trs_url, array(), LS_PLUGIN_VERSION );
  256. }
  257. // Custom CSS
  258. $custom_css = $upload_dir['basedir'] . '/layerslider.custom.css';
  259. $custom_css_url = $upload_dir['baseurl'] . '/layerslider.custom.css';
  260. if(file_exists($custom_css)) {
  261. wp_enqueue_style('layerslider_custom_css', $custom_css_url, array(), LS_PLUGIN_VERSION );
  262. }
  263. }
  264. // Transition builder
  265. if(isset($_GET['page']) && strstr($_GET['page'], 'layerslider_transition_builder') != false) {
  266. wp_enqueue_script('layerslider_tr_builder', $GLOBALS['lsPluginPath'].'js/builder.js', array('jquery'), LS_PLUGIN_VERSION );
  267. }
  268. }
  269. function layerslider_help($contextual_help, $screen_id, $screen) {
  270. if(strstr($_SERVER['REQUEST_URI'], 'layerslider')) {
  271. if(function_exists('file_get_contents')) {
  272. // List view
  273. if(isset($_GET['page']) && $_GET['page'] == 'layerslider' && !isset($_GET['action'])) {
  274. // Overview
  275. $screen->add_help_tab(array(
  276. 'id' => 'home_overview',
  277. 'title' => 'Overview',
  278. 'content' => file_get_contents(dirname(__FILE__).'/docs/home_overview.html')
  279. ));
  280. // Need help?
  281. $screen->add_help_tab(array(
  282. 'id' => 'ls_faq',
  283. 'title' => 'Need help?',
  284. 'content' => file_get_contents(dirname(__FILE__).'/docs/faq.html')
  285. ));
  286. // Managing sliders
  287. $screen->add_help_tab(array(
  288. 'id' => 'home_screen',
  289. 'title' => 'Managing sliders',
  290. 'content' => file_get_contents(dirname(__FILE__).'/docs/managing_sliders.html')
  291. ));
  292. // Inserting LayerSlider to a page
  293. $screen->add_help_tab(array(
  294. 'id' => 'inserting_slider',
  295. 'title' => 'Inserting LayerSlider to a page',
  296. 'content' => file_get_contents(dirname(__FILE__).'/docs/inserting_slider.html')
  297. ));
  298. // Export / Import
  299. $screen->add_help_tab(array(
  300. 'id' => 'exportimport',
  301. 'title' => 'Export / Import',
  302. 'content' => file_get_contents(dirname(__FILE__).'/docs/exportimport.html')
  303. ));
  304. // Sample slider
  305. $screen->add_help_tab(array(
  306. 'id' => 'sample_slider',
  307. 'title' => 'Sample sliders',
  308. 'content' => file_get_contents(dirname(__FILE__).'/docs/sample_slider.html')
  309. ));
  310. // Skin editor
  311. } elseif(strstr($_SERVER['REQUEST_URI'], 'layerslider_skin_editor')) {
  312. // Overview
  313. $screen->add_help_tab(array(
  314. 'id' => 'skin_overview',
  315. 'title' => 'Overview',
  316. 'content' => file_get_contents(dirname(__FILE__).'/docs/skin_overview.html')
  317. ));
  318. // Styles editor
  319. } elseif(strstr($_SERVER['REQUEST_URI'], 'layerslider_style_editor')) {
  320. // Overview
  321. $screen->add_help_tab(array(
  322. 'id' => 'styles_overview',
  323. 'title' => 'Overview',
  324. 'content' => file_get_contents(dirname(__FILE__).'/docs/styles_overview.html')
  325. ));
  326. // Transition builder
  327. } elseif(strstr($_SERVER['REQUEST_URI'], 'layerslider_transition_builder')) {
  328. // Overview
  329. $screen->add_help_tab(array(
  330. 'id' => 'transition_overview',
  331. 'title' => 'Overview',
  332. 'content' => file_get_contents(dirname(__FILE__).'/docs/transition_overview.html')
  333. ));
  334. // Getting started
  335. $screen->add_help_tab(array(
  336. 'id' => 'transition_start',
  337. 'title' => 'Getting started',
  338. 'content' => file_get_contents(dirname(__FILE__).'/docs/transition_start.html')
  339. ));
  340. // 3D transitions
  341. $screen->add_help_tab(array(
  342. 'id' => 'transition_3d',
  343. 'title' => '3D transitions',
  344. 'content' => file_get_contents(dirname(__FILE__).'/docs/transition_3d.html')
  345. ));
  346. // Easings
  347. $screen->add_help_tab(array(
  348. 'id' => 'transition_easings',
  349. 'title' => 'Easings',
  350. 'content' => file_get_contents(dirname(__FILE__).'/docs/transition_easings.html')
  351. ));
  352. // Editor view
  353. } else {
  354. // Overview
  355. $screen->add_help_tab(array(
  356. 'id' => 'overview',
  357. 'title' => 'Overview',
  358. 'content' => file_get_contents(dirname(__FILE__).'/docs/edit_overview.html')
  359. ));
  360. // Need help?
  361. $screen->add_help_tab(array(
  362. 'id' => 'ls_faq',
  363. 'title' => 'Need help?',
  364. 'content' => file_get_contents(dirname(__FILE__).'/docs/faq.html')
  365. ));
  366. // Getting started video
  367. /*
  368. $screen->add_help_tab(array(
  369. 'id' => 'gettingstarted',
  370. 'title' => 'Getting started',
  371. 'content' => file_get_contents(dirname(__FILE__).'/docs/gettingstarted.html')
  372. ));*/
  373. // Inserting LayerSlider to a page
  374. $screen->add_help_tab(array(
  375. 'id' => 'inserting_slider',
  376. 'title' => 'Inserting LayerSlider to a page',
  377. 'content' => file_get_contents(dirname(__FILE__).'/docs/inserting_slider.html')
  378. ));
  379. // Slider types
  380. $screen->add_help_tab(array(
  381. 'id' => 'slider_types',
  382. 'title' => 'Slider types',
  383. 'content' => file_get_contents(dirname(__FILE__).'/docs/slider_types.html')
  384. ));
  385. // Slide options
  386. $screen->add_help_tab(array(
  387. 'id' => 'layer_options',
  388. 'title' => 'Slide options',
  389. 'content' => file_get_contents(dirname(__FILE__).'/docs/layer_options.html')
  390. ));
  391. // Layer options
  392. $screen->add_help_tab(array(
  393. 'id' => 'sublayer_options',
  394. 'title' => 'Layer options',
  395. 'content' => file_get_contents(dirname(__FILE__).'/docs/sublayer_options.html')
  396. ));
  397. // WYSIWYG Editor
  398. $screen->add_help_tab(array(
  399. 'id' => 'wysiwyg_editor',
  400. 'title' => 'WYSIWYG Editor',
  401. 'content' => file_get_contents(dirname(__FILE__).'/docs/wysiwyg_editor.html')
  402. ));
  403. // Embedding videos
  404. $screen->add_help_tab(array(
  405. 'id' => 'embedding_videos',
  406. 'title' => 'Embedding videos',
  407. 'content' => file_get_contents(dirname(__FILE__).'/docs/embedding_videos.html')
  408. ));
  409. // Translation & Language support
  410. $screen->add_help_tab(array(
  411. 'id' => 'language_support',
  412. 'title' => 'Translation & Language support',
  413. 'content' => file_get_contents(dirname(__FILE__).'/docs/language_support.html')
  414. ));
  415. // Other features
  416. $screen->add_help_tab(array(
  417. 'id' => 'other_features',
  418. 'title' => 'Other features',
  419. 'content' => file_get_contents(dirname(__FILE__).'/docs/other_features.html')
  420. ));
  421. // Event callbacks
  422. $screen->add_help_tab(array(
  423. 'id' => 'event_callbacks',
  424. 'title' => 'Event callbacks',
  425. 'content' => file_get_contents(dirname(__FILE__).'/docs/event_callbacks.html')
  426. ));
  427. // LayerSlider API
  428. $screen->add_help_tab(array(
  429. 'id' => 'layerslider_api',
  430. 'title' => 'LayerSlider API',
  431. 'content' => file_get_contents(dirname(__FILE__).'/docs/api.html')
  432. ));
  433. }
  434. } else {
  435. // Error
  436. $screen->add_help_tab(array(
  437. 'id' => 'error',
  438. 'title' => 'Error',
  439. 'content' => 'This help section couldn\'t show you the documentation because your server don\'t support the "file_get_contents" function'
  440. ));
  441. }
  442. }
  443. }
  444. /********************************************************/
  445. /* LayerSlider Screen Options */
  446. /********************************************************/
  447. function ls_save_screen_options() {
  448. if(!isset($_POST['options']) || empty($_POST['options'])) {
  449. $_POST['options'] = array();
  450. }
  451. update_option('lsScreenOptions', $_POST['options']);
  452. }
  453. /********************************************************/
  454. /* Loads settings menu */
  455. /********************************************************/
  456. function layerslider_settings_menu() {
  457. // Menu hook
  458. global $layerslider_hook;
  459. // Get custom capability
  460. $capability = get_option('layerslider_custom_capability', 'manage_options');
  461. // Create new top-level menu
  462. $layerslider_hook = add_menu_page('LayerSlider WP', 'LayerSlider WP', $capability, 'layerslider', 'layerslider_router', $GLOBALS['lsPluginPath'].'img/icon_16x16.png');
  463. // Add sub-menus
  464. add_submenu_page('layerslider', 'LayerSlider WP', __('All Sliders', 'LayerSlider'), $capability, 'layerslider', 'layerslider_router');
  465. add_submenu_page('layerslider', 'Add New LayerSlider', __('Add New', 'LayerSlider'), $capability, 'layerslider_add_new', 'layerslider_add_new');
  466. add_submenu_page('layerslider', 'LayerSlider WP Skin Editor', __('Skin Editor', 'LayerSlider'), $capability, 'layerslider_skin_editor', 'layerslider_skin_editor');
  467. add_submenu_page('layerslider', 'LayerSlider WP Transition Builder', __('Transition Builder', 'LayerSlider'), $capability, 'layerslider_transition_builder', 'layerslider_transition_builder');
  468. add_submenu_page('layerslider', 'LayerSlider WP Custom Styles Editor', __('Custom Styles Editor', 'LayerSlider'), $capability, 'layerslider_style_editor', 'layerslider_style_editor');
  469. // Call register settings function
  470. add_action( 'admin_init', 'layerslider_register_settings' );
  471. }
  472. /********************************************************/
  473. /* Settings page */
  474. /********************************************************/
  475. function layerslider_router() {
  476. // Plugin activatation
  477. if(isset($_GET['action']) && $_GET['action'] == 'add') {
  478. include(dirname(__FILE__).'/add.php');
  479. // Edit
  480. } elseif(isset($_GET['action']) && $_GET['action'] == 'edit') {
  481. include(dirname(__FILE__).'/edit.php');
  482. } elseif(isset($_GET['action']) && $_GET['action'] == 'test_install') {
  483. include(dirname(__FILE__).'/testinstall.php');
  484. // List
  485. } else {
  486. include(dirname(__FILE__).'/list.php');
  487. }
  488. }
  489. function layerslider_add_new() {
  490. include(dirname(__FILE__).'/add.php');
  491. }
  492. function layerslider_skin_editor() {
  493. include(dirname(__FILE__).'/editor.php');
  494. }
  495. function layerslider_style_editor() {
  496. include(dirname(__FILE__).'/style_editor.php');
  497. }
  498. function layerslider_transition_builder() {
  499. include(dirname(__FILE__).'/builder.php');
  500. }
  501. /********************************************************/
  502. /* Register settings */
  503. /********************************************************/
  504. function layerslider_register_settings() {
  505. // Global settings
  506. if(isset($_POST['ls-access-permission']) && strstr($_SERVER['REQUEST_URI'], 'layerslider')) {
  507. // Get capability
  508. $capability = ($_POST['custom_role'] == 'custom') ? $_POST['custom_capability'] : $_POST['custom_role'];
  509. // Error message
  510. $error = __('Your account does not have the necessary permission you chose, and your settings have not been saved to prevent locking yourself out of the plugin.', 'LayerSlider');
  511. $success = __('Permission changes have been saved successfully.', 'LayerSlider');
  512. // Test value
  513. if(empty($capability) || !current_user_can($capability)) {
  514. header('Location: admin.php?page=layerslider&error=1&message='.urlencode($error));
  515. die();
  516. } else {
  517. update_option('layerslider_custom_capability', $capability);
  518. header('Location: admin.php?page=layerslider&message='.urlencode($success));
  519. die();
  520. }
  521. }
  522. // Add slider
  523. if(isset($_POST['posted_add']) && strstr($_SERVER['REQUEST_URI'], 'layerslider')) {
  524. if(!isset($_POST['layerslider-slides'])) {
  525. return;
  526. }
  527. // Get WPDB Object
  528. global $wpdb;
  529. // Table name
  530. $table_name = $wpdb->prefix . "layerslider";
  531. // Create new record
  532. if($_POST['layerkey'] == 0) {
  533. // Execute query
  534. $wpdb->query(
  535. $wpdb->prepare("INSERT INTO $table_name
  536. (name, data, date_c, date_m)
  537. VALUES (%s, %s, %d, %d)",
  538. '',
  539. '',
  540. time(),
  541. time()
  542. )
  543. );
  544. // Empty slider
  545. $slider = array();
  546. // ID
  547. $id = mysql_insert_id();
  548. } else {
  549. // Get slider
  550. $slider = $wpdb->get_row("SELECT * FROM $table_name ORDER BY id DESC LIMIT 1" , ARRAY_A);
  551. // ID
  552. $id = $slider['id'];
  553. $slider = json_decode($slider['data'], true);
  554. }
  555. // Add modifications
  556. if(isset($_POST['layerslider-slides']['properties']['relativeurls'])) {
  557. $slider['properties'] = $_POST['layerslider-slides']['properties'];
  558. $slider['layers'][ $_POST['layerkey'] ] = layerslider_convert_urls($_POST['layerslider-slides']['layers'][$_POST['layerkey']]);
  559. } else {
  560. $slider['properties'] = $_POST['layerslider-slides']['properties'];
  561. $slider['layers'][ $_POST['layerkey'] ] = $_POST['layerslider-slides']['layers'][$_POST['layerkey']];
  562. }
  563. // WPML
  564. if(function_exists('icl_register_string')) {
  565. layerslider_register_wpml_strings($id, $slider);
  566. }
  567. // DB data
  568. $name = esc_sql($slider['properties']['title']);
  569. $data = esc_sql(json_encode($slider));
  570. // Update
  571. $wpdb->query("UPDATE $table_name SET
  572. name = '$name',
  573. data = '$data',
  574. date_m = '".time()."'
  575. ORDER BY id DESC LIMIT 1");
  576. // Echo last ID for redirect
  577. echo $id;
  578. // Redirect back
  579. //header('Location: '.$_SERVER['REQUEST_URI'].'');
  580. die();
  581. }
  582. // Edit slider
  583. if(isset($_POST['posted_edit']) && strstr($_SERVER['REQUEST_URI'], 'layerslider')) {
  584. if(!isset($_POST['layerslider-slides'])) {
  585. return;
  586. }
  587. // Get WPDB Object
  588. global $wpdb;
  589. // Table name
  590. $table_name = $wpdb->prefix . "layerslider";
  591. // Get the IF of the slider
  592. $id = (int) $_GET['id'];
  593. // Get slider
  594. $slider = $wpdb->get_row("SELECT * FROM $table_name WHERE id = ".(int)$id." ORDER BY date_c DESC LIMIT 1" , ARRAY_A);
  595. $data = json_decode($slider['data'], true);
  596. // Empty the slider
  597. if($_POST['layerkey'] == 0) {
  598. $data = array();
  599. }
  600. // Add modifications
  601. if(isset($_POST['layerslider-slides']['properties']['relativeurls'])) {
  602. $data['properties'] = $_POST['layerslider-slides']['properties'];
  603. $data['layers'][ $_POST['layerkey'] ] = layerslider_convert_urls($_POST['layerslider-slides']['layers'][$_POST['layerkey']]);
  604. } else {
  605. $data['properties'] = $_POST['layerslider-slides']['properties'];
  606. $data['layers'][ $_POST['layerkey'] ] = $_POST['layerslider-slides']['layers'][$_POST['layerkey']];
  607. }
  608. // WPML
  609. if(function_exists('icl_register_string')) {
  610. layerslider_register_wpml_strings($id, $data);
  611. }
  612. // DB data
  613. $name = esc_sql($data['properties']['title']);
  614. $data = esc_sql(json_encode($data));
  615. // Update
  616. $wpdb->query("UPDATE $table_name SET
  617. name = '$name',
  618. data = '$data',
  619. date_m = '".time()."'
  620. WHERE id = '$id' LIMIT 1");
  621. // Redirect back
  622. //header('Location: '.$_SERVER['REQUEST_URI'].'');
  623. die();
  624. }
  625. // Import settings
  626. if(isset($_POST['ls-import']) && strstr($_SERVER['REQUEST_URI'], 'layerslider')) {
  627. // Check export file if any
  628. if(!is_uploaded_file($_FILES['import_file']['tmp_name'])) {
  629. header('Location: '.$_SERVER['REQUEST_URI'].'&error=1&message='.urlencode('Choose a file to import sliders.'));
  630. die('No data received.');
  631. }
  632. // Get decoded file data
  633. $data = base64_decode(file_get_contents($_FILES['import_file']['tmp_name']));
  634. // Parsing JSON or PHP object
  635. if(!$parsed = json_decode($data, true)) {
  636. $parsed = unserialize($data);
  637. }
  638. // Iterate over imported sliders
  639. if(is_array($parsed)) {
  640. // DB stuff
  641. global $wpdb;
  642. $table_name = $wpdb->prefix . "layerslider";
  643. // Import sliders
  644. foreach($parsed as $item) {
  645. $wpdb->query(
  646. $wpdb->prepare("INSERT INTO $table_name (name, data, date_c, date_m)
  647. VALUES (%s, %s, %d, %d)",
  648. $item['properties']['title'], json_encode($item), time(), time()
  649. )
  650. );
  651. }
  652. // Success
  653. header('Location: '.menu_page_url('layerslider', 0).'&message='.urlencode('Slider imported successfully.'));
  654. // Fail
  655. } else {
  656. header('Location: '.menu_page_url('layerslider', 0).'&error=1&message='.urlencode('The import file seems to be invalid or corrupted.'));
  657. }
  658. die();
  659. }
  660. if(isset($_POST['ls-export']) && strstr($_SERVER['REQUEST_URI'], 'layerslider')) {
  661. // All sliders
  662. if($_POST['sliders'] == -1) {
  663. $sliders = lsSliders(200, false, true);
  664. foreach($sliders as $item) {
  665. $data[] = $item['data'];
  666. }
  667. // Specific slider
  668. } elseif(!empty($_POST['sliders']) && is_numeric($_POST['sliders'])) {
  669. $sliders = lsSliderById( (int) $_POST['sliders']);
  670. $data[] = $sliders['data'];
  671. } else {
  672. die('Invalid data received.');
  673. }
  674. // Slider name
  675. $name = 'LayerSlider Export '.date('Y-m-d').' at '.date('H.i.s').'.json';
  676. // Set the headers to force a download
  677. header('Content-type: application/force-download');
  678. header('Content-Disposition: attachment; filename="'.str_replace(' ', '_', $name).'"');
  679. // Output
  680. die(base64_encode(json_encode($data)));
  681. }
  682. // Skin Editor
  683. if(isset($_POST['posted_ls_skin_editor']) && strstr($_SERVER['REQUEST_URI'], 'layerslider')) {
  684. // GET SKIN
  685. if(isset($_GET['skin']) && !empty($_GET['skin'])) {
  686. $skin = $_GET['skin'];
  687. } else {
  688. // Open folder
  689. $handle = opendir(dirname(__FILE__) . '/skins');
  690. // Iterate over the contents
  691. while (false !== ($entry = readdir($handle))) {
  692. if($entry == '.' || $entry == '..' || $entry == 'preview') {
  693. continue;
  694. } else {
  695. $skin = $entry;
  696. break;
  697. }
  698. }
  699. }
  700. // Get file path
  701. $file = dirname(__FILE__) . '/skins/' . $skin . '/skin.css';
  702. // Get content
  703. $content = $_POST['contents'];
  704. // Write to file
  705. $status = @file_put_contents($file, $content);
  706. if(!$status) {
  707. wp_die(__("It looks like your files isn't writable, so PHP couldn't make any changes (CHMOD).", "LayerSlider"), __('Cannot write to file', 'LayerSlider'), array('back_link' => true) );
  708. } else {
  709. header('Location: admin.php?page=layerslider_skin_editor&skin='.$skin.'&edited=1');
  710. }
  711. }
  712. // Transition builder
  713. if(isset($_POST['posted_ls_transition_builder']) && strstr($_SERVER['REQUEST_URI'], 'layerslider')) {
  714. // Array to hold transitions
  715. $transitions = array();
  716. // Get transitions
  717. $transitions['t2d'] = isset($_POST['t2d']) ? $_POST['t2d'] : array();
  718. $transitions['t3d'] = isset($_POST['t3d']) ? $_POST['t3d'] : array();
  719. array_walk_recursive($transitions['t2d'], 'layerslider_builder_convert_numbers');
  720. array_walk_recursive($transitions['t3d'], 'layerslider_builder_convert_numbers');
  721. // Iterate over the sections
  722. foreach($transitions['t3d'] as $key => $val) {
  723. // Rows
  724. if(strstr($val['rows'], ',')) { $tmp = explode(',', $val['rows']); $tmp[0] = (int) trim($tmp[0]); $tmp[1] = (int) trim($tmp[1]); $transitions['t3d'][$key]['rows'] = $tmp; }
  725. else { $transitions['t3d'][$key]['rows'] = (int) $val['rows']; }
  726. // Cols
  727. if(strstr($val['cols'], ',')) { $tmp = explode(',', $val['cols']); $tmp[0] = (int) trim($tmp[0]); $tmp[1] = (int) trim($tmp[1]); $transitions['t3d'][$key]['cols'] = $tmp; }
  728. else { $transitions['t3d'][$key]['cols'] = (int) $val['cols']; }
  729. // Depth
  730. if(isset($val['tile']['depth'])) {
  731. $transitions['t3d'][$key]['tile']['depth'] = 'large';
  732. }
  733. // Before
  734. if(!isset($val['before']['enabled'])) {
  735. unset($transitions['t3d'][$key]['before']['transition']);
  736. }
  737. // After
  738. if(!isset($val['after']['enabled'])) {
  739. unset($transitions['t3d'][$key]['after']['transition']);
  740. }
  741. }
  742. // Iterate over the sections
  743. foreach($transitions['t2d'] as $key => $val) {
  744. if(strstr($val['rows'], ',')) { $tmp = explode(',', $val['rows']); $tmp[0] = (int) trim($tmp[0]); $tmp[1] = (int) trim($tmp[1]); $transitions['t2d'][$key]['rows'] = $tmp; }
  745. else { $transitions['t2d'][$key]['rows'] = (int) $val['rows']; }
  746. if(strstr($val['cols'], ',')) { $tmp = explode(',', $val['cols']); $tmp[0] = (int) trim($tmp[0]); $tmp[1] = (int) trim($tmp[1]); $transitions['t2d'][$key]['cols'] = $tmp; }
  747. else { $transitions['t2d'][$key]['cols'] = (int) $val['cols']; }
  748. if(empty($val['transition']['rotateX']))
  749. unset($transitions['t2d'][$key]['transition']['rotateX']);
  750. if(empty($val['transition']['rotateY']))
  751. unset($transitions['t2d'][$key]['transition']['rotateY']);
  752. if(empty($val['transition']['rotate']))
  753. unset($transitions['t2d'][$key]['transition']['rotate']);
  754. if(empty($val['transition']['scale']) || $val['transition']['scale'] == '1.0' || $val['transition']['scale'] == '1')
  755. unset($transitions['t2d'][$key]['transition']['scale']);
  756. }
  757. // Custom transitions file
  758. $upload_dir = wp_upload_dir();
  759. $custom_trs = $upload_dir['basedir'] . '/layerslider.custom.transitions.js';
  760. // Build transition file
  761. $data = 'var layerSliderCustomTransitions = ';
  762. $data.= json_encode($transitions);
  763. $data.= ';';
  764. // Write to file
  765. file_put_contents($custom_trs, $data);
  766. die('SUCCESS');
  767. }
  768. // Styles Editor
  769. if(isset($_POST['posted_ls_styles_editor']) && strstr($_SERVER['REQUEST_URI'], 'layerslider')) {
  770. // Get uploads dir
  771. $upload_dir = wp_upload_dir();
  772. $upload_dir = $upload_dir['basedir'];
  773. // Get css file
  774. $file = $upload_dir . '/layerslider.custom.css';
  775. // Get content
  776. $content = stripslashes($_POST['contents']);
  777. // Write to file
  778. $status = @file_put_contents($file, $content);
  779. if(!$status) {
  780. wp_die(__("It looks like your files isn't writable, so PHP couldn't make any changes (CHMOD).", "LayerSlider"), __('Cannot write to file', 'LayerSlider'), array('back_link' => true) );
  781. } else {
  782. header('Location: admin.php?page=layerslider_style_editor&edited=1');
  783. }
  784. }
  785. }
  786. function layerslider_builder_convert_numbers(&$item, $key) {
  787. if(is_numeric($item)) {
  788. $item = (float) $item;
  789. }
  790. }
  791. /********************************************************/
  792. /* WPML Layer's String Translation */
  793. /********************************************************/
  794. function layerslider_register_wpml_strings($slider_id, $data) {
  795. global $wpdb;
  796. $table_name = $wpdb->prefix . "layerslider";
  797. $slider = $wpdb->get_row("SELECT * FROM $table_name WHERE id = ".(int)$slider_id." ORDER BY date_c DESC LIMIT 1" , ARRAY_A);
  798. $slider = json_decode($slider['data'], true);
  799. foreach($data['layers'] as $layerkey => $layer) {
  800. foreach($layer['sublayers'] as $sublayerkey => $sublayer) {
  801. if($sublayer['type'] != 'img') {
  802. icl_register_string('LayerSlider WP', '<'.$sublayer['type'].':'.substr(sha1($sublayer['html']), 0, 10).'> layer on slide #'.($layerkey+1).' in slider #'.$slider_id.'', $sublayer['html']);
  803. }
  804. }
  805. }
  806. }
  807. /********************************************************/
  808. /* Public functions: insert LayerSlider */
  809. /********************************************************/
  810. function layerslider($id = 0, $page = '') {
  811. // Check id
  812. if(!isset($id) || empty($id)) {
  813. echo '[LayerSlider WP] You need to specify the "id" parameter for the layerslider() function call';
  814. return;
  815. }
  816. // Page filter
  817. if(isset($page) && !empty($page)) {
  818. // Get page name
  819. global $pagename;
  820. // Get page ID
  821. $pageid = (string) get_the_ID();
  822. // Get pages
  823. $pages = explode(',', $page);
  824. // Iterate over the pages
  825. foreach($pages as $page) {
  826. if($page == 'homepage' && is_front_page()) {
  827. echo layerslider_init(array('id' => $id));
  828. } else if($pageid == $page) {
  829. echo layerslider_init(array('id' => $id));
  830. } else if($pagename == $page) {
  831. echo layerslider_init(array('id' => $id));
  832. }
  833. }
  834. // All pages
  835. } else {
  836. echo layerslider_init(array('id' => $id));
  837. }
  838. }
  839. /********************************************************/
  840. /* Public functions: get LayerSlider sliders */
  841. /********************************************************/
  842. function lsSliderById($id = 0) {
  843. // No ID
  844. if($id == 0) {
  845. return false;
  846. }
  847. // Get DB stuff
  848. global $wpdb;
  849. $table_name = $wpdb->prefix . "layerslider";
  850. // Get data
  851. $link = $slider = $wpdb->get_row("SELECT * FROM $table_name WHERE id = ".(int)$id." ORDER BY date_c DESC LIMIT 1" , ARRAY_A);
  852. // No results
  853. if($link == null) {
  854. return false;
  855. }
  856. // Convert data
  857. $slider['data'] = json_decode($slider['data'], true);
  858. // Return the slider
  859. return $slider;
  860. }
  861. function lsSliders($limit = 50, $desc = true, $withData = false) {
  862. // Get DB stuff
  863. global $wpdb;
  864. $table_name = $wpdb->prefix . "layerslider";
  865. // Order
  866. $order = ($desc === true) ? 'DESC' : 'ASC';
  867. // Data
  868. $data = ($withData === true) ? ' data,' : '';
  869. // Get sliders
  870. $link = $sliders = $wpdb->get_results( "SELECT id, name,$data date_c, date_m FROM $table_name
  871. WHERE flag_hidden = '0' AND flag_deleted = '0'
  872. ORDER BY id $order LIMIT ".(int)$limit."", ARRAY_A );
  873. // No results
  874. if($link == null) {
  875. return array();
  876. }
  877. return $sliders;
  878. }
  879. /********************************************************/
  880. /* LayerSlider init */
  881. /********************************************************/
  882. function layerslider_init($atts) {
  883. // ID check
  884. if(!isset($atts['id']) || empty($atts['id'])) {
  885. return '[LayerSliderWP] '.__('Invalid shortcode', 'LayerSlider').'';
  886. }
  887. // Get slider ID
  888. $id = $atts['id'];
  889. // Get WPDB Object
  890. global $wpdb;
  891. // Table name
  892. $table_name = $wpdb->prefix . "layerslider";
  893. // Get slider
  894. $slider = $wpdb->get_row("SELECT * FROM $table_name
  895. WHERE id = ".(int)$id." AND flag_hidden = '0'
  896. AND flag_deleted = '0'
  897. ORDER BY date_c DESC LIMIT 1" , ARRAY_A);
  898. // Result check
  899. if($slider == null) {
  900. return '[LayerSliderWP] '.__('Slider not found', 'LayerSlider').'';
  901. }
  902. // Decode data
  903. $slides = json_decode($slider['data'], true);
  904. // Returned data
  905. $data = '';
  906. if(!defined('NL')) {
  907. define("NL", "\r\n");
  908. }
  909. if(!defined('TAB')) {
  910. define("TAB", "\t");
  911. }
  912. // Include slider file
  913. include(dirname(__FILE__).'/init.php');
  914. include(dirname(__FILE__).'/slider.php');
  915. // Return data
  916. return $data;
  917. }
  918. /********************************************************/
  919. /* LayerSlider notices */
  920. /********************************************************/
  921. function layerslider_admin_notice() {
  922. ?>
  923. <div id="layerslider_notice" class="updated">
  924. <img src="<?php echo $GLOBALS['lsPluginPath'].'img/ls_80x80.png' ?>" alt="WeatherSlider icon">
  925. <h1><?php _e('The new version of LayerSlider WP is almost ready!', 'LayerSlider') ?></h1>
  926. <p>
  927. <?php _e('For a faster and more reliable solution, LayerSlider WP needs to convert your data associated with the plugin. Your sliders and settings will remain still, and it only takes a click on this button.', 'LayerSlider') ?>
  928. <a href="admin.php?page=layerslider&action=convert"><?php _e('Convert Data', 'LayerSlider') ?></a>
  929. </p>
  930. <div class="clear"></div>
  931. </div>
  932. <?php
  933. }
  934. function layerslider_update_notice() {
  935. // Get plugin updates
  936. $updates = get_plugin_updates();
  937. // Check for update
  938. if(isset($updates[LS_PLUGIN_BASE]) && isset($updates[LS_PLUGIN_BASE]->update)) {
  939. $update = $updates[LS_PLUGIN_BASE];
  940. add_thickbox();
  941. ?>
  942. <div id="layerslider_notice">
  943. <img src="<?php echo $GLOBALS['lsPluginPath'].'img/ls_80x80.png' ?>" alt="WeatherSlider icon">
  944. <h1><?php _e('Update available for LayerSlider WP!', 'LayerSlider') ?></h1>
  945. <p>
  946. <?php echo sprintf(__('You have version %1$s. Update to version %2$s.', 'LayerSlider'), $update->Version, $update->update->new_version); ?><br>
  947. <i><?php echo $update->update->upgrade_notice ?></i>
  948. <a href="plugin-install.php?tab=plugin-information&plugin=LayerSlider&section=changelog&TB_iframe=true&width=640&height=747" class="thickbox">
  949. <?php _e('Review changes & Install', 'LayerSlider') ?>
  950. </a>
  951. </p>
  952. <div class="clear"></div>
  953. </div>
  954. <?php
  955. }
  956. }
  957. /********************************************************/
  958. /* LayerSlider storage convert */
  959. /********************************************************/
  960. function layerslider_convert() {
  961. // Get WPDB Object
  962. global $wpdb;
  963. // Table name
  964. $table_name = $wpdb->prefix . "layerslider";
  965. // Building the query
  966. $sql = "CREATE TABLE IF NOT EXISTS `$table_name` (
  967. `id` int(10) NOT NULL AUTO_INCREMENT,
  968. `name` varchar(100) NOT NULL,
  969. `data` text NOT NULL,
  970. `date_c` int(10) NOT NULL,
  971. `date_m` int(11) NOT NULL,
  972. `flag_hidden` tinyint(1) NOT NULL DEFAULT '0',
  973. `flag_deleted` tinyint(1) NOT NULL DEFAULT '0',
  974. PRIMARY KEY (`id`)
  975. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";
  976. // Executing the query
  977. require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
  978. // Execute the query
  979. dbDelta($sql);
  980. // Get sliders if any
  981. $sliders = get_option('layerslider-slides');
  982. // There is no sliders, exit
  983. if($sliders == false) {
  984. header('Location: admin.php?page=layerslider');
  985. die();
  986. }
  987. // Unserialize
  988. $sliders = is_array($sliders) ? $sliders : unserialize($sliders);
  989. // Iterate over them
  990. foreach($sliders as $key => $slider) {
  991. $wpdb->query(
  992. $wpdb->prepare("INSERT INTO $table_name
  993. ( name, data, date_c, date_m )
  994. VALUES
  995. (
  996. '%s', '%s', '%d', '%d'
  997. )",
  998. $slider['properties']['title'],
  999. json_encode($slider),
  1000. time(),
  1001. time()
  1002. )
  1003. );
  1004. }
  1005. // Remove old data
  1006. delete_option('layerslider-slides');
  1007. // Done, exit
  1008. header('Location: admin.php?page=layerslider');
  1009. die();
  1010. }
  1011. /********************************************************/
  1012. /* Action to duplicate slider */
  1013. /********************************************************/
  1014. function layerslider_duplicateslider() {
  1015. // Check ID
  1016. if(!isset($_GET['id'])) {
  1017. return;
  1018. }
  1019. // Get the ID of the slider
  1020. $id = (int) $_GET['id'];
  1021. // Get WPDB Object
  1022. global $wpdb;
  1023. // Table name
  1024. $table_name = $wpdb->prefix . "layerslider";
  1025. // Get slider
  1026. $slider = $wpdb->get_row("SELECT * FROM $table_name WHERE id = ".(int)$id." ORDER BY date_c DESC LIMIT 1" , ARRAY_A);
  1027. $slider = json_decode($slider['data'], true);
  1028. // Name check
  1029. if(empty($slider['properties']['title'])) {
  1030. $slider['properties']['title'] = 'Unnamed';
  1031. }
  1032. // Rename
  1033. $slider['properties']['title'] .= ' copy';
  1034. // Insert the duplicate
  1035. $wpdb->query(
  1036. $wpdb->prepare("INSERT INTO $table_name
  1037. (name, data, date_c, date_m)
  1038. VALUES (%s, %s, %d, %d)",
  1039. $slider['properties']['title'],
  1040. json_encode($slider),
  1041. time(),
  1042. time()
  1043. )
  1044. );
  1045. // Success
  1046. header('Location: admin.php?page=layerslider');
  1047. die();
  1048. }
  1049. /********************************************************/
  1050. /* Action to remove slider */
  1051. /********************************************************/
  1052. function layerslider_removeslider() {
  1053. // Check ID
  1054. if(!isset($_GET['id'])) {
  1055. return;
  1056. }
  1057. // Get the ID of the slider
  1058. $id = (int) $_GET['id'];
  1059. // Get WPDB Object
  1060. global $wpdb;
  1061. // Table name
  1062. $table_name = $wpdb->prefix . "layerslider";
  1063. // Remove the slider
  1064. $wpdb->query("UPDATE $table_name SET flag_deleted = '1' WHERE id = '$id' LIMIT 1");
  1065. // Success
  1066. header('Location: admin.php?page=layerslider');
  1067. die();
  1068. }
  1069. /********************************************************/
  1070. /* Action to import sample slider */
  1071. /********************************************************/
  1072. function layerslider_import_sample_slider() {
  1073. // Base64 encoded, serialized slider export code
  1074. $sample_slider = json_decode(base64_decode(file_get_contents(dirname(__FILE__).'/sampleslider/sample_sliders.txt')), true);
  1075. // Iterate over the sliders
  1076. foreach($sample_slider as $sliderkey => $slider) {
  1077. // Iterate over the layers
  1078. foreach($sample_slider[$sliderkey]['layers'] as $layerkey => $layer) {
  1079. // Change background images if any
  1080. if(!empty($sample_slider[$sliderkey]['layers'][$layerkey]['properties']['background'])) {
  1081. $sample_slider[$sliderkey]['layers'][$layerkey]['properties']['background'] = $GLOBALS['lsPluginPath'].'sampleslider/'.basename($layer['properties']['background']);
  1082. }
  1083. // Change thumbnail images if any
  1084. if(!empty($sample_slider[$sliderkey]['layers'][$layerkey]['properties']['thumbnail'])) {
  1085. $sample_slider[$sliderkey]['layers'][$layerkey]['properties']['thumbnail'] = $GLOBALS['lsPluginPath'].'sampleslider/'.basename($layer['properties']['thumbnail']);
  1086. }
  1087. // Iterate over the sublayers
  1088. if(isset($layer['sublayers']) && !empty($layer['sublayers'])) {
  1089. foreach($layer['sublayers'] as $sublayerkey => $sublayer) {
  1090. // Only IMG sublayers
  1091. if($sublayer['type'] == 'img') {
  1092. $sample_slider[$sliderkey]['layers'][$layerkey]['sublayers'][$sublayerkey]['image'] = $GLOBALS['lsPluginPath'].'sampleslider/'.basename($sublayer['image']);
  1093. }
  1094. }
  1095. }
  1096. }
  1097. }
  1098. // Get WPDB Object
  1099. global $wpdb;
  1100. // Table name
  1101. $table_name = $wpdb->prefix . "layerslider";
  1102. // Append duplicate
  1103. foreach($sample_slider as $key => $val) {
  1104. // Insert the duplicate
  1105. $wpdb->query(
  1106. $wpdb->prepare("INSERT INTO $table_name
  1107. (name, data, date_c, date_m)
  1108. VALUES (%s, %s, %d, %d)",
  1109. $val['properties']['title'],
  1110. json_encode($val),
  1111. time(),
  1112. time()
  1113. )
  1114. );
  1115. }
  1116. // Success
  1117. header('Location: admin.php?page=layerslider');
  1118. die();
  1119. }
  1120. /********************************************************/
  1121. /* MISC */
  1122. /********************************************************/
  1123. function layerslider_check_unit($str) {
  1124. if(strstr($str, 'px') == false && strstr($str, '%') == false) {
  1125. return $str.'px';
  1126. } else {
  1127. return $str;
  1128. }
  1129. }
  1130. function layerslider_convert_urls($arr) {
  1131. // Layer BG
  1132. if(strpos($arr['properties']['background'], 'http://') !== false) {
  1133. $arr['properties']['background'] = parse_url($arr['properties']['background'], PHP_URL_PATH);
  1134. }
  1135. // Layer Thumb
  1136. if(strpos($arr['properties']['thumbnail'], 'http://') !== false) {
  1137. $arr['properties']['thumbnail'] = parse_url($arr['properties']['thumbnail'], PHP_URL_PATH);
  1138. }
  1139. // Image sublayers
  1140. foreach($arr['sublayers'] as $sublayerkey => $sublayer) {
  1141. if($sublayer['type'] == 'img') {
  1142. if(strpos($sublayer['image'], 'http://') !== false) {
  1143. $arr['sublayers'][$sublayerkey]['image'] = parse_url($sublayer['image'], PHP_URL_PATH);
  1144. }
  1145. }
  1146. }
  1147. return $arr;
  1148. }
  1149. /********************************************************/
  1150. /* Widget settings */
  1151. /********************************************************/
  1152. class LayerSlider_Widget extends WP_Widget {
  1153. function LayerSlider_Widget() {
  1154. $widget_ops = array( 'classname' => 'layerslider_widget', 'description' => __('Insert a slider with LayerSlider WP Widget', 'LayerSlider') );
  1155. $control_ops = array( 'id_base' => 'layerslider_widget' );
  1156. $this->WP_Widget( 'layerslider_widget', __('LayerSlider WP Widget', 'LayerSlider'), $widget_ops, $control_ops );
  1157. }
  1158. function widget( $args, $instance ) {
  1159. extract( $args );
  1160. $title = apply_filters('widget_title', $instance['title'] );
  1161. echo $before_widget;
  1162. if ( $title )
  1163. echo $before_title . $title . $after_title;
  1164. // Call layerslider_init to show the slider
  1165. echo do_shortcode('[layerslider id="'.$instance['id'].'"]');
  1166. echo $after_widget;
  1167. }
  1168. function update( $new_instance, $old_instance ) {
  1169. $instance = $old_instance;
  1170. /* Strip tags for title and name to remove HTML (important for text inputs). */
  1171. $instance['id'] = strip_tags( $new_instance['id'] );
  1172. $instance['title'] = strip_tags( $new_instance['title'] );
  1173. return $instance;
  1174. }
  1175. function form( $instance ) {
  1176. // Defaults
  1177. $defaults = array( 'title' => __('LayerSlider', 'LayerSlider'));
  1178. $instance = wp_parse_args( (array) $instance, $defaults );
  1179. // Get WPDB Object
  1180. global $wpdb;
  1181. // Table name
  1182. $table_name = $wpdb->prefix . "layerslider";
  1183. // Get sliders
  1184. $sliders = $wpdb->get_results( "SELECT * FROM $table_name
  1185. WHERE flag_hidden = '0' AND flag_deleted = '0'
  1186. ORDER BY date_c ASC LIMIT 100" );
  1187. ?>
  1188. <p>
  1189. <label for="<?php echo $this->get_field_id( 'id' ); ?>"><?php _e('Choose a slider:', 'LayerSlider') ?></label><br>
  1190. <?php if($sliders != null && !empty($sliders)) { ?>
  1191. <select id="<?php echo $this->get_field_id( 'id' ); ?>" name="<?php echo $this->get_field_name( 'id' ); ?>">
  1192. <?php foreach($sliders as $item) : ?>
  1193. <?php $name = empty($item->name) ? 'Unnamed' : $item->name; ?>
  1194. <?php if(($item->id) == $instance['id']) { ?>
  1195. <option value="<?php echo $item->id?>" selected="selected"><?php echo $name ?> | #<?php echo $item->id?></option>
  1196. <?php } else { ?>
  1197. <option value="<?php echo $item->id?>"><?php echo $name ?> | #<?php echo $item->id?></option>
  1198. <?php } ?>
  1199. <?php endforeach; ?>
  1200. </select>
  1201. <?php } else { ?>
  1202. <?php _e("You didn't create any slider yet.", "LayerSlider", "LayerSlider") ?>
  1203. <?php } ?>
  1204. </p>
  1205. <p>
  1206. <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e('Title:', 'LayerSlider'); ?></label>
  1207. <input id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" class="widefat" />
  1208. </p>
  1209. <?php
  1210. }
  1211. }