Current Path : /var/www/html/wp-content/themes/church-event/vamtam/admin/classes/ |
Current File : /var/www/html/wp-content/themes/church-event/vamtam/admin/classes/skin-management.php |
<?php /** * Skin management * * @package wpv */ /** * class WpvSkinManagement */ class WpvSkinManagement extends WpvAjax { /** * Hook ajax actions */ public function __construct() { $this->actions = array( 'save-skin' => 'save_skin', 'available-skins' => 'available_skins', 'delete-skin' => 'delete_skin', 'load-skin' => 'load_skin', ); parent::__construct(); } /** * Output HTML for the skin import <select> */ public function available_skins() { $skins_dir = opendir(WPV_SAVED_OPTIONS); if(isset($_POST['prefix'])) { $prefix = $_POST['prefix'].'_'; echo '<option value="">'.__('Available skins', 'church-event').'</option>'; while($file = readdir($skins_dir)): if($file != "." && $file != ".." && strpos($file, $prefix) == 0): ?> <option value="<?php echo $file ?>"><?php echo str_replace($prefix, '', $file) ?></option> <?php endif; endwhile; closedir($skins_dir); } exit; } /** * Imports a skin */ public function load_skin() { $name = $_POST['name']; $file = $_POST['file']; wpv_update_option('last-active-skin', $name); $data = json_decode(file_get_contents(WPV_SAVED_OPTIONS.$file)); foreach($data as $id=>$val) { if(is_string($val)) $val = str_replace('{WPV_SAMPLES_URI}', WPV_SAMPLES_URI, $val); wpv_update_option($id, $val); } wpv_finalize_custom_css(); echo json_encode(array( 'data' => $data, 'text' => '<span class="success">'.__('The skin has been imported successfully. Have fun!', 'church-event').'</span>', )); exit; } /** * Deletes a skin */ public function delete_skin() { $file = preg_replace( '/[^-\w\d ]/', '', trim( $_POST['file'] ) ); if( @unlink( WPV_SAVED_OPTIONS . $file ) ) { echo '<span class="success">'. __('Success.', 'church-event') . '</span>'; exit; } echo '<span class="error">'. __('Cannot delete file.', 'church-event') . '</span>'; exit; } /** * Saves the current theme options in a new skin */ public function save_skin() { $file = preg_replace( '/[^-\w\d ]/', '', trim( $_POST['file'] ) ); $pages = array('general', 'layout', 'styles', 'import'); $skin_data = array(); foreach($pages as $page_str) { $tabs = include WPV_THEME_OPTIONS . $page_str . '/list.php'; foreach($tabs as $tab) { $tab_contents = include WPV_THEME_OPTIONS.$page_str."/$tab.php"; foreach($tab_contents as $field) { if(!isset($field['static']) || !$field['static']) { $type = $field['type']; if(isset($field['id'])) { $skin_data = array_merge($skin_data, $this->get_values($this->process_option_id($type, $field['id']))); } else { $skin_data = array_merge($skin_data, $this->get_values($this->process_option_noid($type, $field))); } } } } } if(file_put_contents(WPV_SAVED_OPTIONS . $file, json_encode($skin_data))) { echo '<span class="success">'. __('Success.', 'church-event') . '</span>'; exit; } echo '<span class="error">'. __('Cannot save file.', 'church-event') . '</span>'; exit; } /** * Gets the values of a list of options * @param array $ids list of option names * @return array options with values */ private function get_values($ids) { $res = array(); foreach($ids as $id) { $res[$id] = wpv_get_option($id); } return $res; } /** * Maps the multiple-option rows to their individual keys * @param string $type option type * @param string $id option id prefix * @return array list of option ids */ private function process_option_id($type, $id) { $suffixes = array( 'font' => array( 'size', 'lheight', 'face', 'weight', 'color', ), 'background' => array( 'image', 'opacity', 'color', 'position', 'attachment', 'repeat', 'size', ), ); if ( isset( $suffixes[ $type ] ) ) { return array_map( function( $a ) use ( $id ) { return $id . '-' . $a; }, $suffixes[ $type ] ); } return array($id); } /** * Processes option rows which do not have IDs * * @param string $type option type * @param array $option option row config * @return array option IDs after expansion */ private function process_option_noid($type, $option) { if($type == 'select_checkbox') return array($option['id_select'], $option['id_checkbox']); if($type == 'social') { $res = array(); $places = array('post', 'page', 'portfolio', 'lightbox', 'product', 'tribe'); $networks = array('twitter', 'facebook', 'googleplus', 'pinterest'); foreach($places as $place) { foreach($networks as $network) { $res[] = "share-$place-$network"; } } return $res; } if($option['type'] == 'horizontal_blocks') { $id = $option['id_prefix']; $res = array($id); for($i=1; $i<=$option['max']; $i++) { $res[] = "$id-$i-width"; $res[] = "$id-$i-last"; $res[] = "$id-$i-empty"; } return $res; } if($option['type'] == 'color-row') { return array_keys($option['inputs']); } if($option['type'] == 'select-row') { return array_keys($option['selects']); } return array(); } }