File "theme_controller.php"
Full Path: /home/attunedd/public_html/wp-content/plugins/theme-editor/app/controller/theme_controller.php
File size: 16.76 KB
MIME-type: text/x-php
Charset: utf-8
<?php namespace te\app\thm_cnt;
use ZipArchive;
class theme_editor_theme_controller {
var $image_type_posibilities = array('png','jpg','gif');
var $download_type_possibilities = array('zip','eot','svg','ttf','woff','otf','woff2','mo','po','pot');
var $defcmt = 'cobalt';
/*
* construct
*/
public function __construct() {
$opt = get_option('mk_te_settings_options');
if(isset($opt['code_editor_theme'])) {
$this->defcmt = $opt['code_editor_theme'];
}
}
/*
* Theme Data
*/
public function te_get_theme_data() {
$themes = wp_get_themes();
if ( empty( $themes ) ) {
wp_die( '<p>' . __( 'There are no themes installed on this site.', 'tm-editor' ) . '</p>' );
}
if ( isset( $_REQUEST['theme'] ) ) {
$theme = stripslashes( esc_html( $_REQUEST['theme'] ) );
}
if ( isset( $_REQUEST['file'] ) ) {
$file = stripslashes( esc_html( $_REQUEST['file'] ) );
$theme = $_REQUEST['file'];
}
if ( empty( $theme ) ) {
$theme = wp_get_theme();
}
$stylesheet = '';
if ( $theme && WP_34 ) {
$stylesheet = urldecode( $theme );
if ( is_object( $theme ) ) {
$stylesheet = urldecode( $theme->stylesheet );
}
}
elseif ( WP_34 ) {
$stylesheet = get_stylesheet();
}
if ( WP_34 ) {
$wp_theme = wp_get_theme( $stylesheet );
}
else {
$wp_theme = '';
}
if ( empty( $file ) ) {
if ( WP_34 ) {
$file = basename( $wp_theme['Stylesheet Dir'] ) . '/style.css';
}
else {
$file = basename( $themes[ $theme ]['Stylesheet Dir'] ) . '/style.css';
}
}
else {
$file = stripslashes( $file );
}
if ( WP_34 ) {
$tf = $this->get_files_and_folders( ( WPWINDOWS ) ? str_replace( "/", "\\", $wp_theme['Theme Root'] . '/' . $file ) : $wp_theme['Theme Root'] . '/' . $file, 0, 'theme' );
}
else {
$tf = $this->get_files_and_folders( ( WPWINDOWS ) ? str_replace( "/", "\\", $themes[ $theme ]['Theme Root'] . '/' . $file ) : $themes[ $theme ]['Theme Root'] . '/' . $file, 0, 'theme' );
}
foreach ( $tf as $theme_file ) {
foreach ( $theme_file as $k => $t ) {
if ( $k == 'file' ) {
$theme_files[] = $t;
}
}
}
$file = validate_file_to_edit( ( WPWINDOWS ) ? str_replace( "/", "\\", $file ) : $file, $theme_files );
if ( WP_34 ) {
$current_theme_root = $wp_theme['Theme Root'] . '/' . dirname( $file ) . '/';
}
else {
$current_theme_root = $themes[ $theme ]['Theme Root'] . '/' . dirname( $file ) . '/';
}
$real_file = $current_theme_root . basename( $file );
if ( isset( $_POST['new-content'] ) && file_exists( $real_file ) && is_writable( $real_file ) ) {
$new_content = stripslashes( $_POST['new-content'] );
if ( file_get_contents( $real_file ) === $new_content ) {
}
else {
$f = fopen( $real_file, 'w+' );
fwrite( $f, $new_content );
fclose( $f );
}
}
$content = file_get_contents( $real_file );
$content = esc_textarea( $content );
$scroll_to = isset( $_REQUEST['scroll_to'] ) ? ( int ) $_REQUEST['scroll_to'] : 0;
$data = array(
'themes' => $themes,
'theme' => $theme,
'wp_theme' => $wp_theme,
'stylesheet' => $stylesheet,
'theme_files' => $theme_files,
'current_theme_root' => $current_theme_root,
'real_file' => $real_file,
'content' => $content,
'scroll_to' => $scroll_to,
'file' => $file,
'content-type' => 'theme'
);
return $data;
}
/*
* Get Files And Folders
*/
public static function get_files_and_folders( $dir, $contents, $type ) {
$slash = '/';
if ( WPWINDOWS ) {
$slash = '\\';
}
$output = array();
if ( is_dir( $dir ) ) {
if ( $handle = opendir( $dir ) ) {
$size_document_root = strlen( $_SERVER['DOCUMENT_ROOT'] );
$pos = strrpos( $dir, $slash );
$topdir = substr( $dir, 0, $pos + 1 );
$i = 0;
while ( false !== ( $file = readdir( $handle ) ) ) {
if ( $file != '.' && $file != '..' && substr( $file, 0, 1 ) != '.' ) {
$rows[ $i ]['data'] = $file;
$rows[ $i ]['dir'] = is_dir( $dir . $slash . $file );
$i++;
}
}
closedir( $handle );
}
if ( isset( $rows ) ) {
$size = count( $rows );
$rows = self::mk_s_r( $rows );
for( $i = 0; $i < $size; ++$i ) {
$topdir = $dir . $slash . $rows[ $i ]['data'];
$output[ $i ]['name'] = $rows[ $i ]['data'];
$output[ $i ]['path'] = $topdir;
if ( $rows[ $i ]['dir'] ) {
$output[ $i ]['filetype'] = 'folder';
$output[ $i ]['extension'] = 'folder';
$output[ $i ]['filesize'] = '';
}
else {
$output[ $i ]['writable'] = false;
if ( is_writable( $output[ $i ]['path'] ) ) {
$output[ $i ]['writable'] = true;
}
$output[ $i ]['filetype'] = 'file';
$path = pathinfo( $output[ $i ]['name'] );
if ( isset( $path['extension'] ) ) {
$output[ $i ]['extension'] = strtolower( $path['extension'] );
}
$output[ $i ]['filesize'] = '( ' . round( filesize( $topdir ) * .0009765625, 2) . ' KB)';
if ( $type == 'theme' ) {
$oldFile = str_replace( realpath( get_theme_root() ) . $slash, '', $output[ $i ]['path'] );
$oldFile2 = str_replace(get_theme_root(),'', $oldFile);
$mlu = str_replace('//','/', $oldFile2);
$output[ $i ]['file'] = str_replace('/\\','\\', $oldFile2);
//$output[ $i ]['file'] = $oldFile;
$output[ $i ]['file'] = str_replace('//','/', $output[ $i ]['file']);
$output[ $i ]['url'] = get_theme_root_uri().$slash.$mlu;
}
else {
//$output[ $i ]['file'] = str_replace( realpath( WP_PLUGIN_DIR ) . $slash, '', $output[ $i ]['path'] );
$oldFile = str_replace( realpath( WP_PLUGIN_DIR ) . $slash, '', $output[ $i ]['path'] );
$oldFile2 = str_replace(WP_PLUGIN_DIR,'', $oldFile);
$mlu = str_replace('//','/', $oldFile2);
$output[ $i ]['file'] = str_replace('/\\','\\', $oldFile2);
$output[ $i ]['url'] = plugins_url() . $slash . $mlu;
}
}
}
}
else {
$output[-1] = 'This Folder contains no contents!';
}
}
elseif ( is_file( $dir ) ) {
if ( isset( $contents ) && $contents == 1 ) {
$output['name'] = basename( $dir );
$output['path'] = $dir;
$output['filetype'] = 'file';
$path = pathinfo( $output['name'] );
if ( isset( $path['extension'] ) ) {
$output['extension'] = strtolower( $path['extension'] );
}
$output['content'] = file_get_contents( $dir );
$output['writable'] = false;
if ( is_writable( $output['path'] ) ) {
$output['writable'] = true;
}
if ( $type == 'theme' ) {
$output['file'] = str_replace( realpath( get_theme_root() ) . $slash, '', $output['path'] );
$output['url'] = get_theme_root_uri() . $slash . $output['file'];
}
else {
$output['file'] = str_replace( realpath( WP_PLUGIN_DIR ) . $slash, '', $output['path'] );
$output['url'] = plugins_url() . $slash . $output['file'];
}
}
else {
$pos = strrpos( $dir, $slash );
$newdir = substr( $dir, 0, $pos );
if ( $handle = opendir( $newdir ) ) {
$size_document_root = strlen( $_SERVER['DOCUMENT_ROOT'] );
$pos = strrpos( $newdir, $slash );
$topdir = substr( $newdir, 0, $pos + 1 );
$i = 0;
while ( false !== ( $file = readdir( $handle ) ) ) {
if ( $file != '.' && $file != '..' && substr( $file, 0, 1 ) != '.' /*&& $this->allowed_files( $newdir, $file )*/ ) {
$rows[ $i ]['data'] = $file;
$rows[ $i ]['dir'] = is_dir( $newdir . $slash . $file );
$i++;
}
}
closedir( $handle );
}
if ( isset( $rows ) ) {
$size = count( $rows );
$rows = self::mk_s_r( $rows );
for( $i = 0; $i < $size; ++$i ) {
$topdir = $newdir . $slash . $rows[ $i ]['data'];
$output[ $i ]['name'] = $rows[ $i ]['data'];
$output[ $i ]['path'] = $topdir;
if ( $rows[ $i ]['dir'] ) {
$output[ $i ]['filetype'] = 'folder';
$output[ $i ]['extension'] = 'folder';
$output[ $i ]['filesize'] = '';
}
else {
$output[ $i ]['writable'] = false;
if ( is_writable( $output[ $i ]['path'] ) ) {
$output[ $i ]['writable'] = true;
}
$output[ $i ]['filetype'] = 'file';
$path = pathinfo( $rows[ $i ]['data'] );
if ( isset( $path['extension'] ) ) {
$output[ $i ]['extension'] = strtolower( $path['extension'] );
}
$output[ $i ]['filesize'] = '( ' . round( filesize( $topdir ) * .0009765625, 2) . ' KB)';
}
if ( $output[ $i ]['path'] == $dir ) {
$output[ $i ]['content'] = file_get_contents( $dir );
}
$output[ $i ]['writable'] = false;
if ( is_writable( $output[ $i ]['path'] ) ) {
$output[ $i ]['writable'] = true;
}
if ( $type == 'theme' ) {
$output[ $i ]['file'] = str_replace( realpath( get_theme_root() ) . $slash, '', $output[ $i ]['path'] );
$output[ $i ]['url'] = get_theme_root_uri() . $slash . $output[ $i ]['file'];
}
else {
$output[ $i ]['file'] = str_replace( realpath( WP_PLUGIN_DIR ) . $slash, '', $output[ $i ]['path'] );
$output[ $i ]['url'] = plugins_url() . $slash . $output[ $i ]['file'];
}
}
}
else {
$output[-1] = 'Unable to open!';
}
}
}
else {
$output[-1] = 'Unable to open!';
};
return $output;
}
/*
* mk_s_r
*/
public static function mk_s_r( $data ) {
$size = count( $data );
for( $i = 0; $i < $size; ++$i ) {
$row_num = self::mk_f_s( $i, $size, $data );
$tmp = $data[ $row_num ];
$data[ $row_num ] = $data[ $i ];
$data[ $i ] = $tmp;
}
return $data;
}
/*
* mk_f_s
*/
public static function mk_f_s( $i, $end, $data ) {
$min['pos'] = $i;
$min['value'] = $data[ $i ]['data'];
$min['dir'] = $data[ $i ]['dir'];
for(; $i < $end; ++$i ) {
if ( $data[ $i ]['dir'] ) {
if ( $min['dir'] ) {
if ( $data[ $i ]['data'] < $min['value'] ) {
$min['value'] = $data[ $i ]['data'];
$min['dir'] = $data[ $i ]['dir'];
$min['pos'] = $i;
}
}
else {
$min['value'] = $data[ $i ]['data'];
$min['dir'] = $data[ $i ]['dir'];
$min['pos'] = $i;
}
}
else {
if (!$min['dir'] && $data[ $i ]['data'] < $min['value'] ) {
$min['value'] = $data[ $i ]['data'];
$min['dir'] = $data[ $i ]['dir'];
$min['pos'] = $i;
}
}
}
return $min['pos'];
}
/*
* download_file
*/
public function download_file( $file_path, $type ) {
if ( ( $type == 'theme' && current_user_can( 'edit_themes' ) ) || ( $type == 'plugin' && current_user_can( 'edit_plugins' ) ) ) {
$slash = '/';
if ( WPWINDOWS ) {
$slash = '\\';
}
if ( file_exists( $file_path ) ) {
$etag = md5_file($file_path);
$filename = basename( $file_path );
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($file_path)) . ' GMT');
header("Etag: ".$etag);
header('Content-Type: application/Octet-stream');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file_path));
header('Connection: close');
readfile($file_path);
exit();
}
}
}
/*
* Delete Dirtory
*/
public function deleteDir($dirPath) {
if (substr($dirPath, strlen($dirPath) - 1, 1) != '/') {
$dirPath .= '/';
}
$files = glob($dirPath . '*', GLOB_MARK);
foreach ($files as $file) {
if (is_dir($file)) {
$this->deleteDir($file);
} else {
unlink($file);
}
}
return rmdir($dirPath);
}
/*
* Delete Files
*/
public function deleteFile($filePath) {
return unlink($filePath);
}
/*
* Download Theme
*/
public function download_theme( $theme_name ) {
if ( current_user_can( 'edit_themes' ) ) {
$slash = '/';
if ( WPWINDOWS ) {
$slash = '\\';
}
$position = strpos( $theme_name, $slash );
$theme_name = substr( $theme_name, 0, $position );
$theme = wp_get_theme( $theme_name );
if ( $theme->exists() ) {
$directory = $theme->get_stylesheet_directory(). $slash;
$filename = $theme_name . '.zip';
$zip = self::compress( $directory, $filename );
if ( $zip ) {
header( 'Content-Disposition: attachment; filename="' . $theme_name . '.zip' . '"');
header( 'Content-Description: File Transfer' );
header( 'Content-Type: application/octet-stream' );
header( 'Content-Transfer-Encoding: binary' );
header( 'Pragma: public' );
header( 'Content-Length: ' . filesize( $filename ) );
ob_clean();
flush();
readfile( $filename );
unlink( $filename );
exit;
}
else {
wp_redirect( admin_url( 'themes.php?page=theme_editor_theme&error=3' ) );
exit;
}
}
else {
wp_redirect( admin_url( 'themes.php?page=theme_editor_theme&error=2' ) );
exit;
}
}
else {
wp_redirect( admin_url( 'themes.php?page=theme_editor_theme&error=1' ) );
exit;
}
}
/*
* compress
*/
public static function compress( $directory, $filename ) {
$zip = new \ZipArchive;
if ( ! $zip->open( $filename, ZIPARCHIVE::CREATE ) ) {
}
self::add_files_to_zip( $directory, $zip );
return $zip->close();
}
/*
* Zip
*/
public static function add_files_to_zip( $directory, $zip, $zipdir='' ) {
if ( is_dir( $directory ) ) {
if ( $dh = opendir( $directory ) ) {
while ( ( $file = readdir( $dh ) ) !== false ) {
if (!is_file( $directory . $file ) ) {
if ( ( $file !== ".") && ( $file !== "..") ) {
self::add_files_to_zip( $directory . $file . "/", $zip, $zipdir . $file . "/");
}
}
else {
$zip->addFile( $directory . $file, $zipdir . $file );
}
}
}
}
}
/*
* Load css
*/
public function load_css() {
wp_enqueue_style( 'te_theme_editor', MK_THEME_EDITOR_URL.'app/view/css/theme_editor.css' );
echo '<link rel="stylesheet" href="'.MK_THEME_EDITOR_URL.'app/view/lib/codemirror.css">
<link rel="stylesheet" href="'.MK_THEME_EDITOR_URL.'app/view/theme/'.$this->defcmt.'.css">
<link rel="stylesheet" href="'.MK_THEME_EDITOR_URL.'app/view/addon/dialog/dialog.css">
<link rel="stylesheet" href="'.MK_THEME_EDITOR_URL.'app/view/addon/search/matchesonscrollbar.css">
<link rel="stylesheet" href="'.MK_THEME_EDITOR_URL.'app/view/css/settings_tabs.css">' ;
}
/*
* Load JS
*/
public function load_js() {
echo '<script src="'.MK_THEME_EDITOR_URL.'app/view/lib/codemirror.js"></script>
<script src="'.MK_THEME_EDITOR_URL.'app/view/addon/selection/active-line.js"></script>
<script src="'.MK_THEME_EDITOR_URL.'app/view/addon/edit/matchbrackets.js"></script>
<script src="'.MK_THEME_EDITOR_URL.'app/view/addon/dialog/dialog.js"></script>
<script src="'.MK_THEME_EDITOR_URL.'app/view/addon/search/searchcursor.js"></script>
<script src="'.MK_THEME_EDITOR_URL.'app/view/addon/search/search.js"></script>
<script src="'.MK_THEME_EDITOR_URL.'app/view/addon/scroll/annotatescrollbar.js"></script>
<script src="'.MK_THEME_EDITOR_URL.'app/view/addon/search/matchesonscrollbar.js"></script>
<script src="'.MK_THEME_EDITOR_URL.'app/view/addon/search/jump-to-line.js"></script>
<script src="'.MK_THEME_EDITOR_URL.'app/view/mode/css/css.js"></script>
<script src="'.MK_THEME_EDITOR_URL.'app/view/mode/javascript/javascript.js"></script>
<script src="'.MK_THEME_EDITOR_URL.'app/view/js/theme_editor.js"></script>';
}
/*
* Get all code mirror Themes
*/
public function getcmthemes()
{
$dir = MK_THEME_EDITOR_PATH.'app/view/theme/';
$theme_files = glob($dir."/*.css");
$cethemes = array();
foreach($theme_files as $theme_file){
$cethemes[basename($theme_file,".css")]=basename($theme_file,".css");
}
return $cethemes;
}
/*
* Save Settings
*/
public function __save($fields) {
$mk_te_settings_options = array();
$needToUnset = array('submit_mk_te_settings');
foreach($needToUnset as $noneed):
unset($fields[$noneed]);
endforeach;
foreach($fields as $key => $val):
$mk_te_settings_options[$key] = $val;
endforeach;
$saveSettings = update_option('mk_te_settings_options', $mk_te_settings_options );
if($saveSettings){
return '1';
}
else {
return '2';
}
}
}