Current Path : /home/ncdcgo/public_html/wp-content/plugins backup/newsletter/includes/ |
Current File : /home/ncdcgo/public_html/wp-content/plugins backup/newsletter/includes/themes.php |
<?php defined('ABSPATH') || exit; /** * @property string $id Theme identifier * @property string $dir Absolute path to the theme folder * @property string $name Theme name */ class TNP_Theme { var $dir; var $name; public function get_defaults() { @include $this->dir . '/theme-defaults.php'; if (!isset($theme_defaults) || !is_array($theme_defaults)) { return array(); } return $theme_defaults; } } /** * Registers a Newsletter theme to be shown as option on standard newsletter creation * Designers love functions... * @param string $dir The absolute path of a folder containing a Newsletter theme */ function tnp_register_theme($dir) { NewsletterThemes::register_theme($dir); } class NewsletterThemes { var $module; var $is_extension = false; static $registered_theme_dirs = array(); static function register_theme($dir) { if (!file_exists($dir . '/theme.php')) { $error = new WP_Error('1', 'theme.php missing on folder ' . $dir); return $error; } self::$registered_theme_dirs[] = $dir; return true; } function __construct($module, $is_extension = false) { $this->module = $module; $this->is_extension = $is_extension; } /** * Build an associative array which represent a theme starting from the theme * parsing the files in the theme folder.<br> * dir - the full path to the theme folder<br> * url - the full url to the theme folder (to reference assets like images)<br> * id - the folder name, used as unique identifier<br> * screenshot - url to an image representing the theme (400x400)<br> * name - the readable theme name extracted from the theme.php<br> * * description - not used * type - not used * * @param string $dir * @return array */ function build_theme($dir) { if (!is_dir($dir)) { return null; } if (!is_file($dir . '/theme.php')) { return null; } $data = get_file_data($dir . '/theme.php', array('name' => 'Name', 'type' => 'Type', 'description' => 'Description')); $data['id'] = basename($dir); $data['dir'] = $dir; if (empty($data['name'])) { $data['name'] = $data['id']; } if (empty($data['type'])) { $data['type'] = 'standard'; } $relative_dir = substr($dir, strlen(WP_CONTENT_DIR)); $data['url'] = content_url($relative_dir); $screenshot = $dir . '/screenshot.png'; if (is_file($screenshot)) { $relative_dir = substr($dir, strlen(WP_CONTENT_DIR)); $data['screenshot'] = $data['url'] . '/screenshot.png'; } else { $data['screenshot'] = plugins_url('newsletter') . '/emails/images/theme-screenshot.png'; } return $data; } function get_all_with_data() { $list = array(); // Packaged themes $list['default'] = $this->build_theme(NEWSLETTER_DIR . '/emails/themes/default'); $list['blank'] = $this->build_theme(NEWSLETTER_DIR . '/emails/themes/blank'); $list['cta-2015'] = $this->build_theme(NEWSLETTER_DIR . '/emails/themes/cta-2015'); $list['vimeo-like'] = $this->build_theme(NEWSLETTER_DIR . '/emails/themes/vimeo-like'); $list['pint'] = $this->build_theme(NEWSLETTER_DIR . '/emails/themes/pint'); // Extensions folder scan $dir = WP_CONTENT_DIR . '/extensions/newsletter/' . $this->module . '/themes'; $handle = @opendir($dir); if ($handle !== false) { while ($file = readdir($handle)) { $data = $this->build_theme($dir . '/' . $file); if (!$data || isset($list[$data['id']])) { continue; } $list[$data['id']] = $data; } closedir($handle); } // Registered themes do_action('newsletter_register_themes'); foreach (self::$registered_theme_dirs as $dir) { $data = $this->build_theme($dir); if (!$data || isset($list[$data['id']])) { continue; } $list[$data['id']] = $data; } return $list; } /** * Returns a data structure containing the theme details. * * @param string $id * @return array */ function get_theme($id) { $themes = $this->get_all_with_data(); if (isset($themes[$id])) { return $themes[$id]; } return null; } /** * * @param type $theme * @param type $options * @param type $module */ function save_options($theme_id, &$options) { $theme_options = array(); foreach ($options as $key => &$value) { if (substr($key, 0, 6) != 'theme_') continue; $theme_options[$key] = $value; } update_option('newsletter_' . $this->module . '_theme_' . $theme_id, $theme_options, false); } function get_options($theme_id) { $options = get_option('newsletter_' . $this->module . '_theme_' . $theme_id); // To avoid merge problems. if (!is_array($options)) { $options = []; } $theme = $this->get_theme($theme_id); $file = $theme['dir'] . '/theme-defaults.php'; if (is_file($file)) { @include $file; } if (isset($theme_defaults) && is_array($theme_defaults)) { $options = array_merge($theme_defaults, $options); } $info_options = Newsletter::instance()->get_options('info'); foreach ($info_options as $key => $value) { $options['main_' . $key] = $value; } return $options; } }