* @author ThemePunch <info@themepunch.com>
* @link https://www.themepunch.com/
* @copyright 2024 ThemePunch
if(!defined('ABSPATH')) exit();
class RevSliderFunctionsAdmin extends RevSliderFunctions {
* get the full object of:
* +- Object Library Images
* - Object Library Videos
public function get_full_library($include = array('all'), $tmp_slide_uid = array(), $refresh_from_server = false, $get_static_slide = false, $page = false){
$include = (array)$include;
$template = new RevSliderTemplate();
$library = new RevSliderObjectLibrary();
$slide = new RevSliderSlide();
$tmp_slide_uid = ($tmp_slide_uid !== false) ? (array)$tmp_slide_uid : array();
if($refresh_from_server){ //refresh list from server
if(in_array('all', $include) || in_array('moduletemplates', $include)){
$template->_get_template_list(true);
$object['moduletemplates']['tags'] = $object['moduletemplates']['tags'] ?? $template->get_template_categories();
asort($object['moduletemplates']['tags']);
if(in_array('all', $include) || in_array('layers', $include) || in_array('videos', $include) || in_array('images', $include) || in_array('objects', $include)){
$library->_get_list(true);
if(in_array('all', $include) || in_array('layers', $include)){
$object['layers']['tags'] = $object['layers']['tags'] ?? $library->get_objects_categories('4');
asort($object['layers']['tags']);
if(in_array('all', $include) || in_array('videos', $include)){
$object['videos']['tags'] = $object['videos']['tags'] ?? $library->get_objects_categories('3');
asort($object['videos']['tags']);
if(in_array('all', $include) || in_array('images', $include)){
$object['images']['tags'] = $object['images']['tags'] ?? $library->get_objects_categories('2');
asort($object['images']['tags']);
if(in_array('all', $include) || in_array('objects', $include)){
$object['objects']['tags'] = $object['objects']['tags'] ?? $library->get_objects_categories('1');
asort($object['objects']['tags']);
$object = apply_filters('revslider_get_full_library_refresh', $object, $include, $tmp_slide_uid, $refresh_from_server, $get_static_slide, $this);
if(in_array('moduletemplates', $include) || in_array('all', $include)) $object['moduletemplates']['items'] = $object['moduletemplates']['items'] ?? $template->get_tp_template_sliders_for_library($refresh_from_server, $page);
if(in_array('moduletemplateslides', $include) || in_array('all', $include)) $object['moduletemplateslides']['items'] = $object['moduletemplateslides']['items'] ?? $template->get_tp_template_slides_for_library($tmp_slide_uid);
if(in_array('modules', $include) || in_array('all', $include)) $object['modules']['items'] = $object['modules']['items'] ?? $this->get_slider_overview();
if(in_array('moduleslides', $include) || in_array('all', $include)) $object['moduleslides']['items'] = $object['moduleslides']['items'] ?? $slide->get_slides_for_library($tmp_slide_uid, $get_static_slide);
if(in_array('svgs', $include) || in_array('all', $include)) $object['svgs']['items'] = $object['svgs']['items'] ?? $library->get_svg_sets_full();
if(in_array('svgcustom', $include) || in_array('all', $include)) $object['svgcustom']['items'] = $object['svgcustom']['items'] ?? $library->get_custom_svgs();
if(in_array('fonticons', $include) || in_array('all', $include)) $object['fonticons']['items'] = $object['fonticons']['items'] ?? $library->get_font_icons();
if(in_array('layers', $include) || in_array('all', $include)) $object['layers']['items'] = $object['layers']['items'] ?? $library->load_objects('4');
if(in_array('videos', $include) || in_array('all', $include)) $object['videos']['items'] = $object['videos']['items'] ?? $library->load_objects('3');
if(in_array('images', $include) || in_array('all', $include)) $object['images']['items'] = $object['images']['items'] ?? $library->load_objects('2');
if(in_array('objects', $include) || in_array('all', $include)) $object['objects']['items'] = $object['objects']['items'] ?? $library->load_objects('1');
return apply_filters('revslider_get_full_library', $object, $include, $tmp_slide_uid, $refresh_from_server, $get_static_slide, $this);
* get the short library with categories and how many elements exist
public function get_short_library($sliders = false){
$template = new RevSliderTemplate();
$library = new RevSliderObjectLibrary();
$sliders = ($sliders === false) ? $this->get_slider_overview() : $sliders;
foreach($sliders ?? [] as $slider){
$tags = $this->get_val($slider, 'tags', array());
foreach($tags ?? [] as $tag){
if(trim($tag) !== '' && !isset($slider_cat[$tag])) $slider_cat[$tag] = ucwords($tag);
$m_templates = $template->get_template_categories();
$svgs = $library->get_svg_categories();
$fonticons = $library->get_font_tags();
$objects = $library->get_objects_categories('1');
'moduletemplates' => array('tags' => $m_templates),
'modules' => array('tags' => $slider_cat),
'svgs' => array('tags' => $svgs),
'fonticons' => array('tags' => $fonticons),
'layers' => array('tags' => $library->get_objects_categories('4')),
'videos' => array('tags' => $library->get_objects_categories('3')),
'images' => array('tags' => $library->get_objects_categories('2')),
'objects' => array('tags' => $objects)
$custom = $library->get_custom_tags();
foreach($custom ?? [] as $tag_name => $tag_value){
$tags[$tag_name] = array('tags' => $tag_value);
return apply_filters('revslider_get_short_library', $tags, $library, $this);
* Get Sliders data for the overview page
public function get_slider_overview(){
$SR_GLOBALS['data_init'] = false;
$rs_slider = new RevSliderSlider();
$rs_slide = new RevSliderSlide();
$sliders = $rs_slider->get_sliders(false);
$rs_folder = new RevSliderFolder();
$folders = $rs_folder->get_folders();
$sliders = array_merge($sliders, $folders);
foreach($sliders as $slider){
$slider_list[] = $slider->get_id();
$_slides_raw = $rs_slide->get_all_slides_raw($slider_list);
$slides_raw = $this->get_val($_slides_raw, 'first_slides', array());
$slides_ids = $this->get_val($_slides_raw, 'slide_ids', array());
foreach($sliders as $k => $slider){
$sid = $slider->get_id();
foreach($slides_raw as $s => $r){
if($r->get_slider_id() !== $sid) continue;
foreach($slides_ids as $_s => $_sv){
if($this->get_val($_sv, 'slider_id') === $sid){
$slide_ids[] = $this->get_val($_sv, 'id');
if(empty($slide_ids)) $slide_ids = false;
$slides = (empty($slides)) ? false : $slides;
$slider->init_layer = false;
$data[] = $slider->get_overview_data(false, $slides, $slide_ids);
$SR_GLOBALS['data_init'] = true;
* insert custom animations
* @before: RevSliderOperations::insertCustomAnim();
public function insert_animation($animation, $type){
$handle = $this->get_val($animation, 'name', false);
if($handle !== false && trim($handle) !== ''){
'handle' => $this->get_val($animation, 'name'),
'params' => json_encode($animation),
$result = $wpdb->insert($wpdb->prefix . RevSliderFront::TABLE_LAYER_ANIMATIONS, $arr);
return ($result) ? $wpdb->insert_id : $result;
* update custom animations
* @before: RevSliderOperations::updateCustomAnim();
public function update_animation($animation_id, $animation, $type){
'handle' => $this->get_val($animation, 'name'),
'params' => json_encode($animation),
$result = $wpdb->update($wpdb->prefix . RevSliderFront::TABLE_LAYER_ANIMATIONS, $arr, array('id' => $animation_id));
return ($result) ? $animation_id : $result;
* delete custom animations
* @before: RevSliderOperations::deleteCustomAnim();
* @param int $animation_id
public function delete_animation($animation_id){
return $wpdb->delete($wpdb->prefix . RevSliderFront::TABLE_LAYER_ANIMATIONS, array('id' => $animation_id));
* create a page with revslider shortcodes included
* @before: RevSliderOperations::create_slider_page();
* @param array $additions
public static function create_slider_page($added, $modals = array(), $additions = array()){
if(!is_array($added)) return apply_filters('revslider_create_slider_page', $new_page_id, $added);
$page_id = get_option('rs_import_page_id', 1);
//get alias of all new Sliders that got created and add them as a shortcode onto a page
$slider = new RevSliderSlider();
$slider->init_by_id($sid);
$alias = $slider->get_alias();
$usage = (in_array($sid, $modals, true)) ? ' usage="modal"' : '';
$addition = (isset($additions[$sid])) ? ' ' . $additions[$sid] : '';
if(strpos($addition, 'usage=\"modal\"') !== false) $usage = ''; //remove as not needed two times
if(version_compare($wp_version, '5.0', '>=')){ //add gutenberg code
$ov_data = $slider->get_overview_data();
$title = $slider->get_val($ov_data, 'title', '');
$img = $slider->get_val($ov_data, array('bg', 'src'), '');
$wrap_addition = ($img !== '') ? ',"sliderImage":"'.$img.'"' : '';
$div_addition = ($title !== '') ? ' data-slidertitle="'.$title.'"' : '';
$zindex_pos = strpos($addition, 'zindex=\"');
if($zindex_pos !== false){
$zindex = substr($addition, $zindex_pos + 9, strpos($addition, '\"', $zindex_pos + 9) - ($zindex_pos + 9));
$div_addition .= ' style="z-index:'.$zindex.';"';
$wrap_addition .= ',"zindex":"'.$zindex.'"';
$content .= '<!-- wp:themepunch/revslider {"checked":true'.$wrap_addition.'} -->'."\n";
$content .= '<div class="wp-block-themepunch-revslider revslider" data-modal="false"'.$div_addition.'>';
$content .= '[rev_slider alias="'.$alias.'"'.$usage.$addition.'][/rev_slider]'; //this way we will reorder as last comes first
if(version_compare($wp_version, '5.0', '>=')){ //add gutenberg code
$content .= '</div>'."\n".'<!-- /wp:themepunch/revslider -->'."\n";
$new_page_id = wp_insert_post(
'post_title' => wp_strip_all_tags('RevSlider Page '.$page_id), //$title
'post_content' => $content,
'post_status' => 'draft',
'page_template' => '../public/views/revslider-page-template.php'
if(is_wp_error($new_page_id)) $new_page_id = 0; //fallback to 0
update_option('rs_import_page_id', $page_id);
return apply_filters('revslider_create_slider_page', $new_page_id, $added);
* add notices from ThemePunch
public function add_notices(){
$notices = (array)get_option('revslider-notices', false);
$rs_valid = $this->_truefalse(get_option('revslider-valid', 'false'));
if(empty($notices) || !is_array($notices)) return $_n;
$n_discarted = get_option('revslider-notices-dc', array());
foreach($notices as $notice){
if(in_array($notice->code, $n_discarted)) continue;
if(isset($notice->version) && version_compare($notice->version, RS_REVISION, '<=')) continue;
if(isset($notice->registered)){ //if this is set, only show the notice if the plugin state is the same
$registered = $this->_truefalse($notice->registered);
if($registered !== $rs_valid) continue;
if(isset($notice->show_until) && $notice->show_until !== '0000-00-00 00:00:00'){
if(strtotime($notice->show_until) < time()) continue;
* returns an object of current system values
public function get_system_requirements(){
$basedir = $this->get_val($dir, 'basedir').'/';
$ml = ini_get('memory_limit');
$mlb = wp_convert_hr_to_bytes($ml);
$umf = ini_get('upload_max_filesize');
$umfb = wp_convert_hr_to_bytes($umf);
$pms = ini_get('post_max_size');
$pmsb = wp_convert_hr_to_bytes($pms);
$map = $wpdb->get_row("SHOW VARIABLES LIKE 'max_allowed_packet';");
$map = $this->get_val($map, 'Value', 0);
$mlg = ($mlb >= 268435456) ? true : false;
$umfg = ($umfb >= 33554432) ? true : false;
$pmsg = ($pmsb >= 33554432) ? true : false;
$mapg = ($map >= 16777216) ? true : false;
'has' => size_format($mlb),
'min' => size_format(268435456),
'upload_max_filesize' => array(
'has' => size_format($umfb),
'min' => size_format(33554432),
'post_max_size' => array(
'has' => size_format($pmsb),
'min' => size_format(33554432),
'max_allowed_packet' => array(
'has' => size_format($map),
'min' => size_format(16777216),
'upload_folder_writable' => wp_is_writable($basedir),
'zlib_enabled' => function_exists('gzcompress') && function_exists('gzuncompress'),
'object_library_writable' => wp_image_editor_supports(array('methods' => array('resize', 'save'))),
'server_connect' => get_option('revslider-connection', false),
* import a media file uploaded through the browser to the media library
public function import_upload_media(){
require_once(ABSPATH . 'wp-admin/includes/file.php');
$import_file = $this->get_val($_FILES, 'import_file');
$error = $this->get_val($import_file, 'error');
$return = array('error' => __('File not found', 'revslider'));
return array('error' => __('No file sent', 'revslider'));
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
return array('error' => __('Exceeded filesize limit', 'revslider'));
$path = $this->get_val($import_file, 'tmp_name');
if(isset($path['error'])) return array('error' => $path['error']);
if(file_exists($path) == false) return array('error' => __('File not found', 'revslider'));
if($this->get_val($import_file, 'size') > wp_max_upload_size()) return array('error' => __('Exceeded filesize limit', 'revslider'));
$mime_types = array_merge($this->get_val($SR_GLOBALS, array('mime_types', 'image')), $this->get_val($SR_GLOBALS, array('mime_types', 'video')));
$file_mime = mime_content_type($path);
if(!in_array($file_mime, $mime_types)) return array('error' => __('WordPress doesn\'t allow this filetype', 'revslider'));
$file_name = basename($this->get_val($import_file, 'name'));
$file_type = wp_check_filetype($file_name, $mime_types);
if($this->get_val($file_type, 'ext', false) === false || $this->get_val($file_type, 'type', false) === false) return array('error' => __('WordPress doesn\'t allow this filetype', 'revslider'));
$upload_dir = wp_upload_dir();
while(file_exists($new_path)){
$new_path = $upload_dir['path']. '/' .$i. '-' .$file_name;
if(move_uploaded_file($path, $new_path)){
$upload_id = wp_insert_attachment(
'post_mime_type' => $file_mime,
'post_title' => preg_replace( '/\.[^.]+$/', '', $file_name),
'post_name' => sanitize_title_with_dashes(str_replace('_', '-', $file_name)),
'post_status' => 'inherit'
require_once(ABSPATH . 'wp-admin/includes/image.php');
@wp_update_attachment_metadata($upload_id, wp_generate_attachment_metadata($upload_id, $new_path));
//$meta = wp_get_attachment_metadata( $attachment->ID );
$img_dim = @wp_get_attachment_image_src($upload_id, 'full');
$width = ($img_dim !== false) ? $this->get_val($img_dim, 1, '') : '';
$height = ($img_dim !== false) ? $this->get_val($img_dim, 2, '') : '';
$return = array('error' => false, 'id' => $upload_id, 'path' => wp_get_attachment_url($upload_id), 'width' => $width, 'height' => $height); //$new_path
* Create Multilanguage for JavaScript
public function get_javascript_multilanguage(){
'clipboardfirefox' => __('Please consult the Slider Revolution manual to learn how to use clipboard functionality with Firefox', 'revslider'),
'clipboardnotvalid' => __('Imported Content has no Valid Revolution Slider Structure', 'revslider'),
'clipboardwarning' => __('Clipboard Function is not available on Unsecure Websites', 'revslider'),
'clipboardexport' => __('Selected Layers exported to Clipboard', 'revslider'),
'clipboardimport' => __('Selected Layers imported from Clipboard', 'revslider'),
'up' => __('Up', 'revslider'),
'down' => __('Down', 'revslider'),
'left' => __('Left', 'revslider'),
'right' => __('Right', 'revslider'),
'horizontal' => __('Horizontal', 'revslider'),
'vertical' => __('Vertical', 'revslider'),
'reversed' => __('Reverse', 'revslider'),
'previewnotworking' => __('The preview could not be loaded due to some conflict with another WordPress theme or plugin', 'revslider'),
'checksystemnotworking' => __('Server connection issues, contact your hosting provider for further assistance', 'revslider'),
'editskins' => __('Edit Skin List', 'revslider'),
'globalcoloractive' => __('Color Skin Active', 'revslider'),
'corejs' => __('Core JavaScript', 'revslider'),
'corecss' => __('Core CSS', 'revslider'),
'coretools' => __('Core Tools (GreenSock & Co)', 'revslider'),
'enablecompression' => __('Enable Server Compression', 'revslider'),
'notduringinsetmode' => __('Resize and Drag is not available if Layer Size set to Inset', 'revslider'),
'insetrequirements' => __('Move Layer into a Group and set Position to Absolute before selecting Full Inset', 'revslider'),
'noservercompression' => __('Not Available, read FAQ', 'revslider'),
'servercompression' => __('Serverside Compression', 'revslider'),
'sizeafteroptim' => __('Size after Optimization', 'revslider'),
'chgimgsizesrc' => __('Change Image Size or Src', 'revslider'),
'pickandim' => __('Pick another Dimension', 'revslider'),
'optimize' => __('Optimize', 'revslider'),
'savechanges' => __('Save Changes', 'revslider'),
'applychanges' => __('Apply Changes', 'revslider'),
'suggestion' => __('Suggestion', 'revslider'),
'toosmall' => __('Too Small', 'revslider'),