Menu
1 week ago
views
1 week ago
AdminController.php
1 week ago
DashboardWidgets.php
6 months ago
PackageTemplate.php
4 years ago
PackageTemplate.php
294 lines
| 1 | <?php |
| 2 | |
| 3 | |
| 4 | namespace WPDM\Admin; |
| 5 | |
| 6 | |
| 7 | use WPDM\__\FileSystem; |
| 8 | |
| 9 | class PackageTemplate |
| 10 | { |
| 11 | public $templateType = 'link'; |
| 12 | private $dir; |
| 13 | |
| 14 | function __construct($templateType = 'link') |
| 15 | { |
| 16 | $this->templateType = $templateType; |
| 17 | $this->dir = WP_CONTENT_DIR . "/wpdm-assets/{$templateType}-templates/"; |
| 18 | FileSystem::mkDir($this->dir, 0755, true); |
| 19 | } |
| 20 | |
| 21 | function type($templateType) |
| 22 | { |
| 23 | $templateType = !in_array($templateType, ['link', 'page']) ? 'link' : $templateType; |
| 24 | $this->templateType = $templateType; |
| 25 | $this->dir = WP_CONTENT_DIR . "/wpdm-assets/{$templateType}-templates/"; |
| 26 | FileSystem::mkDir($this->dir, 0755, true); |
| 27 | return $this; |
| 28 | } |
| 29 | |
| 30 | function covertAll($templateType = null) |
| 31 | { |
| 32 | if ($templateType !== null) |
| 33 | $this->type($templateType); |
| 34 | if(!file_exists($this->dir)){ |
| 35 | \WPDM\__\Messages::error("Failed to create template directory ( {$this->dir} )!", 0, 'notify'); |
| 36 | return $this; |
| 37 | } |
| 38 | $tpldata = get_option("_fm_{$this->templateType}_templates", false); |
| 39 | if (!is_array($tpldata)) |
| 40 | $tpldata = maybe_unserialize($tpldata); |
| 41 | if ($tpldata) { |
| 42 | delete_option("_fm_{$this->templateType}_templates"); |
| 43 | foreach ($tpldata as $id => $tpl) { |
| 44 | $file = $this->dir . '/' . $id . '.xml'; |
| 45 | $tpl['content'] = stripslashes_deep($tpl['content']); |
| 46 | $tpl['css'] = stripslashes_deep($tpl['css']); |
| 47 | $data = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><template><tplid>{$id}</tplid><name>{$tpl['title']}</name><designer>Admin</designer><code><![CDATA[{$tpl['content']}]]></code><css><![CDATA[{$tpl['css']}]]></css></template>"; |
| 48 | file_put_contents($file, $data); |
| 49 | |
| 50 | } |
| 51 | } |
| 52 | return $this; |
| 53 | } |
| 54 | |
| 55 | function import($url, $templateType = null) |
| 56 | { |
| 57 | |
| 58 | if ($templateType !== null) |
| 59 | $this->type($templateType); |
| 60 | $data = wpdm_remote_get($url); |
| 61 | $local_file_path = $this->dir . '/' . basename($url); |
| 62 | file_put_contents($local_file_path, $data); |
| 63 | |
| 64 | } |
| 65 | |
| 66 | function add($id, $name, $code, $css = '', $templateType = null) |
| 67 | { |
| 68 | if ($templateType !== null) |
| 69 | $this->type($templateType); |
| 70 | |
| 71 | $file = $this->dir . '/' . $id . '.xml'; |
| 72 | $code = stripslashes_deep($code); |
| 73 | $data = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><template><tplid>{$id}</tplid><name>{$name}</name><designer>Admin</designer><code><![CDATA[{$code}]]></code><css><![CDATA[{$css}]]></css></template>"; |
| 74 | file_put_contents($file, $data); |
| 75 | return $this; |
| 76 | } |
| 77 | |
| 78 | function delete($id, $templateType = null) |
| 79 | { |
| 80 | if ($templateType !== null) |
| 81 | $this->type($templateType); |
| 82 | |
| 83 | $id = wpdm_sanitize_var($id, 'filename'); |
| 84 | if ($id && file_exists($this->dir . $id . '.xml')) |
| 85 | @unlink($this->dir . $id . '.xml'); |
| 86 | |
| 87 | return $this; |
| 88 | } |
| 89 | |
| 90 | function get($template, $templateType = null, $contentOnly = false) |
| 91 | { |
| 92 | if ($templateType !== null) |
| 93 | $this->type($templateType); |
| 94 | $template = str_replace(".xml", "", $template); |
| 95 | $file = $this->dir . $template . '.xml'; |
| 96 | $tpl = []; |
| 97 | if (file_exists($file)) { |
| 98 | $data = file_get_contents($file); |
| 99 | $ddoc = new \DOMDocument(); |
| 100 | $valid = $ddoc->loadXML($data); |
| 101 | if(!$valid || !is_object($ddoc->getElementsByTagName('code')->item(0))) return false; |
| 102 | $tpl = []; |
| 103 | $tpl['ID'] = $ddoc->getElementsByTagName('tplid')->item(0)->textContent; |
| 104 | $tpl['name'] = $ddoc->getElementsByTagName('name')->item(0)->textContent; |
| 105 | $tpl['content'] = $ddoc->getElementsByTagName('code')->item(0)->textContent; |
| 106 | $tpl['css'] = $ddoc->getElementsByTagName('css')->item(0)->textContent; |
| 107 | $tpl['file'] = $file; |
| 108 | $add_styles = $this->templateType === 'page' ? "<style>{$tpl['css']}</style>" : ''; |
| 109 | return $contentOnly ? $tpl['content'] . $add_styles : $tpl; |
| 110 | } |
| 111 | return false; |
| 112 | } |
| 113 | |
| 114 | function getInfo($template, $templateType = null) |
| 115 | { |
| 116 | if ($templateType !== null) |
| 117 | $this->type($templateType); |
| 118 | |
| 119 | $info = $this->get($template, $templateType); |
| 120 | if (!$info) { |
| 121 | $theme_template_dir = get_stylesheet_directory().'/download-manager/'.$this->templateType . '-templates/'; |
| 122 | $template_template_dir = get_template_directory().'/download-manager/'.$this->templateType . '-templates/'; |
| 123 | $core_templates_dir = WPDM()->package->templateDir . $this->templateType . '-templates/'; |
| 124 | $template_name = str_replace(".php", "", $template).".php"; |
| 125 | $file = $core_templates_dir.str_replace(".php", "", $template).".php"; |
| 126 | if(file_exists($theme_template_dir.$template_name)) |
| 127 | $file = $theme_template_dir.$template_name; |
| 128 | else if(file_exists($template_template_dir.$template_name)) |
| 129 | $file = $template_template_dir.$template_name; |
| 130 | if(file_exists($file)) { |
| 131 | $tmpdata = file_get_contents( $file ); |
| 132 | $regx = "/WPDM.*Template[\s]*:([^\-\->]+)/"; |
| 133 | $name = $template; |
| 134 | if ( preg_match( $regx, $tmpdata, $matches ) ) { |
| 135 | $name = $matches[1]; |
| 136 | } |
| 137 | $info = ['ID' => $template, 'name' => $name, 'content' => $tmpdata, 'css' => '', 'file' => $file]; |
| 138 | } |
| 139 | } |
| 140 | return $info; |
| 141 | } |
| 142 | |
| 143 | function getCustomTemplates($templateType = null) |
| 144 | { |
| 145 | if ($templateType !== null) |
| 146 | $this->type($templateType); |
| 147 | $_templates = FileSystem::scanDir($this->dir, false, false, '.xml'); |
| 148 | $templates = []; |
| 149 | foreach ($_templates as $tplid) { |
| 150 | $tplid = str_replace(".xml", "", $tplid); |
| 151 | $template = $this->get($tplid, $this->templateType); |
| 152 | $templates[$tplid] = $template; |
| 153 | } |
| 154 | return $templates; |
| 155 | } |
| 156 | |
| 157 | |
| 158 | function getTemplates($templateType = null, $activeOnly = false) |
| 159 | { |
| 160 | if ($templateType !== null) |
| 161 | $this->type($templateType); |
| 162 | |
| 163 | $tplstatus = maybe_unserialize(get_option("_fm_{$this->templateType}_template_status")); |
| 164 | |
| 165 | $xactivetpls = array(); |
| 166 | $activetpls = array(); |
| 167 | if (is_array($tplstatus)) { |
| 168 | foreach ($tplstatus as $tpl => $active) { |
| 169 | if (!$active) |
| 170 | $xactivetpls[] = $tpl; |
| 171 | else |
| 172 | $activetpls[] = $tpl; |
| 173 | } |
| 174 | } |
| 175 | |
| 176 | $all_templates = array(); |
| 177 | |
| 178 | |
| 179 | //Load custom templates |
| 180 | $custom_templates = $this->getCustomTemplates(); |
| 181 | $all_templates = $custom_templates; |
| 182 | |
| 183 | //Load all core template provided with the plugin |
| 184 | $core_templates_dir = WPDM()->package->templateDir . $this->templateType . '-templates/'; |
| 185 | $core_templates = FileSystem::scanDir($core_templates_dir, false, true, '.php'); |
| 186 | foreach ($core_templates as $core_template) { |
| 187 | $all_templates[basename($core_template)] = $core_template; |
| 188 | } |
| 189 | |
| 190 | //Load all template from parent theme, override core template |
| 191 | if (get_stylesheet_directory() !== get_template_directory()) { |
| 192 | $parent_theme_dir = get_template_directory() . '/download-manager/' . $this->templateType . '-templates/'; |
| 193 | $parent_theme_templates = FileSystem::scanDir($parent_theme_dir, false, true, '.php'); |
| 194 | foreach ($parent_theme_templates as $theme_template) { |
| 195 | $all_templates[basename($theme_template)] = $theme_template; |
| 196 | } |
| 197 | } |
| 198 | |
| 199 | //Load all template from active theme, override core or parent template |
| 200 | $theme_dir = get_stylesheet_directory() . '/download-manager/' . $this->templateType . '-templates/'; |
| 201 | $theme_templates = FileSystem::scanDir($theme_dir, false, true, '.php'); |
| 202 | foreach ($theme_templates as $theme_template) { |
| 203 | $all_templates[basename($theme_template)] = $theme_template; |
| 204 | } |
| 205 | |
| 206 | return $all_templates; |
| 207 | |
| 208 | } |
| 209 | |
| 210 | function getStyles($templateType = null) |
| 211 | { |
| 212 | if ($templateType !== null) |
| 213 | $this->type($templateType); |
| 214 | $styles = []; //TempStorage::get('__wpdm_custom_link_template_styles'); |
| 215 | //if( $styles !== '' ) return $styles; |
| 216 | $templates = $this->getCustomTemplates($this->templateType); |
| 217 | |
| 218 | foreach ($templates as $template) { |
| 219 | $styles[$template['ID']] = stripslashes_deep($template['css']); |
| 220 | } |
| 221 | $styles = implode("\r\n", $styles); |
| 222 | //TempStorage::set("__wpdm_custom_link_template_styles", $styles); |
| 223 | //wpdmdd($styles); |
| 224 | return $styles; |
| 225 | } |
| 226 | |
| 227 | function dropdown($params, $activeOnly = false) |
| 228 | { |
| 229 | extract($params); |
| 230 | $type = isset($type) && in_array($type, array('link', 'page', 'email')) ? esc_attr($type) : 'link'; |
| 231 | $tplstatus = maybe_unserialize(get_option("_fm_{$type}_template_status")); |
| 232 | |
| 233 | $xactivetpls = array(); |
| 234 | $activetpls = array(); |
| 235 | if (is_array($tplstatus)) { |
| 236 | foreach ($tplstatus as $tpl => $active) { |
| 237 | if (!$active) |
| 238 | $xactivetpls[] = $tpl; |
| 239 | else |
| 240 | $activetpls[] = $tpl; |
| 241 | } |
| 242 | } |
| 243 | |
| 244 | |
| 245 | $templates = $this->getTemplates($type); |
| 246 | |
| 247 | //Field Name |
| 248 | $name = isset($name) ? $name : $type . '_template'; |
| 249 | |
| 250 | //Field css |
| 251 | $css = isset($css) ? "style='$css'" : ''; |
| 252 | |
| 253 | $class = isset($class) ? $class : ''; |
| 254 | |
| 255 | //Field ID |
| 256 | $id = isset($id) ? $id : uniqid(); |
| 257 | |
| 258 | //Default value |
| 259 | $default = $type == 'link' ? 'link-template-default.php' : 'page-template-default.php'; |
| 260 | $xdf = str_replace(".php", "", $default); |
| 261 | if (is_array($xactivetpls) && count($xactivetpls) > 0) |
| 262 | $default = (in_array($xdf, $xactivetpls) || in_array($default, $xactivetpls)) && isset($activetpls[0]) ? $activetpls[0] : $default; |
| 263 | |
| 264 | $html = "<select name='$name' id='$id' class='form-control {$class} template {$type}_template' {$css}><option value='$default'>Select " . ucfirst($type) . " Template</option>"; |
| 265 | $data = array(); |
| 266 | if (is_array($templates)) { |
| 267 | foreach ($templates as $id => $template) { |
| 268 | $name = null; |
| 269 | $_id = str_replace(".php", "", $id); |
| 270 | if (!$activeOnly || ($activeOnly && (!isset($tplstatus[$_id]) || (int)$tplstatus[$_id] === 1))) { |
| 271 | if (!is_array($template) && $template) { |
| 272 | $tmpdata = file_get_contents($template); |
| 273 | $regx = "/WPDM.*Template[\s]*:([^\-\->]+)/"; |
| 274 | if (preg_match($regx, $tmpdata, $matches)) { |
| 275 | $name = $matches[1]; |
| 276 | } else continue; |
| 277 | } else { |
| 278 | $name = $template['name']; |
| 279 | } |
| 280 | if ($name) { |
| 281 | $eselected = isset($selected) && $selected == $id ? 'selected=selected' : ''; |
| 282 | $html .= "<option value='{$id}' {$eselected}>{$name}</option>"; |
| 283 | } |
| 284 | } |
| 285 | } |
| 286 | } |
| 287 | |
| 288 | $html .= "</select>"; |
| 289 | |
| 290 | return $html; |
| 291 | } |
| 292 | |
| 293 | } |
| 294 |