tablename = 'filemeta'; $this->version = '2.2.1'; //create new file admin ajax add_action('wp_ajax_create_file', array($this,'ajax_create_file')); //delete file admin ajax add_action('wp_ajax_delete_file', array($this,'ajax_delete_file')); //create new directory admin ajax add_action('wp_ajax_create_directory', array($this,'ajax_create_directory')); //ajax settings save add_action('wp_ajax_ace_save_settings', array($this,'ajax_save_settings')); //ajax settings save add_action('wp_ajax_ace_settings_panel', array($this,'ajax_settings_panel')); //ajax commit file version add_action('wp_ajax_commit_file',array($this,'ajax_commit_file')); //ajax revert file version add_action('wp_ajax_revert_file',array($this,'ajax_revet_file')); //ajax delete file version add_action('wp_ajax_delete_version',array($this,'ajax_delete_file_version')); //ajax delete file version add_action('wp_ajax_delete_all_versions',array($this,'ajax_delete_all_file_version')); //ajax get file revisions add_action('wp_ajax_get_file_revisions',array($this,'ajax_get_file_revisions')); add_action('load-theme-editor.php', array($this,'add_scripts')); add_filter( 'admin_footer-theme-editor.php', array($this,'do_edit' )); add_action('load-plugin-editor.php', array($this,'add_scripts')); add_filter( 'admin_footer-plugin-editor.php', array($this,'do_edit' )); //Language Setup $locale = get_locale(); load_plugin_textdomain( $this->localization_domain, false, dirname( plugin_basename( __FILE__ ) ) . '/lang/' ); $options = get_option('ace_options',$this->get_defaults()); if (isset($options['use_file_tree'])){ add_action('admin_footer-plugin-editor.php',array($this,'plugin_file_tree')); add_action('admin_footer-theme-editor.php',array($this,'theme_file_tree')); } $this->update_wpdb($this->tablename); } add_filter('init', array($this,'add_query_var_vars')); add_action('template_redirect', array($this,'admin_redirect_download_files')); add_filter( 'plugin_row_meta', array($this,'_my_plugin_links'), 10, 2 ); } /** * get_defaults * @since 2.0 * @author Ohad Raz * @return array */ public function get_defaults(){ return array( 'use_file_tree' => true, 'matchBrackets' => true, 'lineWrapping' => false, 'tabSize' => 4, 'indentUnit' => 2 ); } /** * Show Settings Panel * @author Ohad Raz * @since 2.0 * @access public */ public function ajax_settings_panel(){ check_ajax_referer('ace_settings_panel'); $options = get_option('ace_options',$this->get_defaults()); ?>

get_defaults()); $def = $this->get_defaults(); $options = array_merge($def,$options); foreach ((array)$options as $key => $value) { if (isset($_POST[$key]) && $_POST[$key] != "null"){ if ($_POST[$key] == 'ckd') $options[$key] = true; else $options[$key] = intval($_POST[$key]); }else{ unset($options[$key]); } } update_option('ace_options', $options); _e('Settings saved, make sure you refresh your browser to see the changes.','ace'); die(); } /** * commit File version * @author Ohad Raz * @since 2.0 * @access public */ public function ajax_commit_file(){ check_ajax_referer('ace_commit_file'); $filename= esc_sql($_POST['filename']); $file_content = esc_sql($_POST['file_content']); $message = esc_sql($_POST['message']); $date = date("F j, Y, g:i a"); $value = array( 'date'=> $date, 'message' => $message, 'version' => $file_content ); $result = $this->add_file_meta(1,$filename,$value,false); if (!$result) _e('Error in commiting file','ace'); _e('File Version commited and Save!','ace'); die(); } /** * Delete all File Versions * @author Ohad Raz * @since 2.0 * @access public */ public function ajax_delete_all_file_version(){ check_ajax_referer('delete_all_versions'); $this->delete_file_meta(1,$_POST['filename'],'',true); $this->ajax_get_file_revisions($_POST['filename']); die(); } /** * delete File version * @author Ohad Raz * @since 2.0 * @access public */ public function ajax_delete_file_version(){ check_ajax_referer('delete_version'); $res = delete_metadata_by_mid('file', intval($_POST['mid'])); if (!$res) echo 'Error'; else _e('File revision deleted!','ace'); die(); } /** * revert File version * @author Ohad Raz * @since 2.0 * @access public */ public function ajax_revet_file(){ check_ajax_referer('revert_file'); $meta = get_metadata_by_mid('file', intval($_GET['mid'])); if (!$meta){ echo json_encode(array('error' => __('Error restoring file version','ace'))); die(); } $meta = $meta->meta_value; $m = __('Make sure to save changes if you want the restore to take place.','ace'); echo json_encode(array('version' => stripslashes($meta['version']),'m' => $m)); die(); } /** * get File versions * @author Ohad Raz * @since 2.0 * @access public */ public function ajax_get_file_revisions($filename = null){ if ($filename === null){ check_ajax_referer('get_file_revisions'); $filename= $_POST['filename']; } $versions = $this->get_file_meta(1,$filename,false); if (isset($versions[$_POST['filename']])){ $url = plugins_url()."/advanced-code-editor/"; echo ''; foreach ((array)$versions as $i => $vs ) { if ($i == $_POST['filename']){ foreach ((array)$vs as $v ) { $meta_id = $this->get_file_meta_id($i,$v); $v = maybe_unserialize($v); echo ''; } } } echo '
'.__('Date','ace').''.__('Message','ace').''.__('Actions','ace').'
'.$v['date'].' '.$v['message'].'
'; echo '
'; }else{ _e('No Revisions for this file found','ace'); } die(); } /** * add plugins entry points to query vars * @author Ohad Raz * @since 1.9 * @access public */ public function add_query_var_vars() { global $wp; $wp->add_query_var('theme_download'); //download theme $wp->add_query_var('dn_file'); //download file name $wp->add_query_var('plugin_download'); //download plugin $wp->add_query_var('dnf'); //download plugin $wp->add_query_var('ttd'); //theme to download } /** * admin_redirect_download_files handler * @author Ohad Raz * @since 1.9 * @access public * * @return void */ public function admin_redirect_download_files(){ global $wp; global $wp_query; //download theme if (array_key_exists('theme_download', $wp->query_vars) && $wp->query_vars['theme_download'] == 'theme_download'){ $this->download_theme(); die(); } if (array_key_exists('plugin_download', $wp->query_vars) && $wp->query_vars['plugin_download'] != ''){ $this->download_plugin(); die(); } if (array_key_exists('dn_file', $wp->query_vars) && $wp->query_vars['dn_file'] != ''){ $this->download_file(); die(); } } /** * zip and download plugin * * @author Ohad Raz * @since 1.9 * @access public * * @return zip file */ public function download_plugin(){ header('HTTP/1.1 200 OK'); if ( !current_user_can('edit_plugins') ) wp_die('

'.__('You do not have sufficient permissions to edit plugins for this site.').'

'); $plugin = get_query_var('plugin_download'); if(isset($plugin) && $plugin != ''){ //Get the directory to zip $directory = WP_PLUGIN_DIR .'/'.$plugin; $zipname = date('Ymdhis') . '.zip'; // create object $zip = $this->Zip($directory,$zipname,strtolower($plugin).'/'); if ($zip === false){ wp_die('

'.__('error ziping files.').'

'); } $file = $zipname; $fsize = filesize($file); header($_SERVER['SERVER_PROTOCOL'].' 200 OK'); header("Content-Disposition: attachment; filename=\"".$plugin . '.zip'."\""); header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file); unlink($file); exit; } } /** * download_file current edited file * * @author ohad raz * @since 1.9 * @access public * * @return file */ public function download_file(){ header('HTTP/1.1 200 OK'); $from = get_query_var('dnf'); if (!isset ($from)) wp_die('

'.__('You do not have sufficient permissions to Download this file.').'

'); if ($from == 'theme'){ if ( !current_user_can('edit_themes') ) wp_die('

'.__('You do not have sufficient permissions to edit templates for this site.').'

'); }elseif ($from == 'plugin') { if ( !current_user_can('edit_plugins') ) wp_die('

'.__('You do not have sufficient permissions to edit Plugins for this site.').'

'); }else{ wp_die('

'.__('You do not have sufficient permissions to edit files.').'

'); } $file = get_query_var('dn_file'); $file = isset($file)? $file : (isset($_REQUEST['dn_file'])? $_REQUEST['dn_file'] : false); if (!isset($file)){ wp_die('

'.__('Error Downloading file.').'

'); } if ($from == 'plugin'){ $file = WP_PLUGIN_DIR .'/'.$file; }else{ $t = wp_get_theme($_REQUEST['tmf']); if ( $t->exists() ){ $file = $t->get_stylesheet_directory(). '/' . $file; }else{ wp_die('

'.__('Error Downloading file.').'

'); } } if(file_exists($file)){ $content = file_get_contents($file); $filename = explode("/","/" . $file); $fsize = strlen($content); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header('Content-Description: File Transfer'); header("Content-Disposition: attachment; filename=" . $filename[count($filename)-1]); header("Content-Length: ".$fsize); header("Expires: 0"); header("Pragma: public"); echo $content; exit; }else{ wp_die('

'.__('Error Downloading file.').'

'); } } /** * Zip file maker * * @author Ohad Raz * @since 1.9 * @access public * * @param string $source file or directory to zip * @param string $destination zip file to create * @param string $container_folder if you want to put the files inside a directory in the zip then pass it here */ public function Zip($source, $destination,$container_folder = ''){ if (!extension_loaded('zip')){ wp_die('

'.__('error ziping files.').'

'); exit; } if ( !file_exists($source) ) { wp_die('

'.__('error ziping files.').'

'); exit; } if ( ! class_exists('ZipArchive')){ wp_die('

'.__('error ziping files.').'

'); exit; } $zip = new ZipArchive(); if (!$zip->open($destination, ZIPARCHIVE::CREATE)){ wp_die('

'.__('error ziping files.').'

'); exit; } $source = str_replace('\\', '/', realpath($source)); if (is_dir($source) === true){ $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST); foreach ($files as $file => $ob){ $file = str_replace('\\', '/', realpath($file)); if (is_dir($file) === true){ $zip->addEmptyDir(str_replace($source . '/', $container_folder, $file . '/')); }else if (is_file($file) === true){ $zip->addFromString(str_replace($source . '/', $container_folder, $file), file_get_contents($file)); } //echo $file .'
'; } //die(); }else if (is_file($source) === true){ $zip->addFromString(basename($source), file_get_contents($source)); }else{ wp_die('

'.__('error ziping files.').'

'); exit; return false; } return $zip->close(); } /** * zip and download theme * @author Ohad Raz * @since 1.9 * @access public * * @return zip file on success and string on faliure */ public function download_theme(){ header('HTTP/1.1 200 OK'); if ( !current_user_can('edit_themes') ) wp_die('

'.__('error ziping files.').'

'); if(!isset($_GET['ttd'])){ $t = wp_get_theme(); }else{ //$theme = $_GET['ttd']; $t = wp_get_theme($_GET['ttd']); } if ( $t->exists() ){ $directory = $t->get_stylesheet_directory(). '/'; }else{ wp_die('

'.__('error ziping files.(1)').'

'); } //Get the directory to zip $zipname = date('Ymdhis') . '.zip'; // create object $zip = $this->Zip($directory,$zipname,strtolower($t->Name).'/'); if ($zip === false){ wp_die('

'.__('error ziping files.').'

'); } $file = $zipname; $fsize = filesize($file); header($_SERVER['SERVER_PROTOCOL'].' 200 OK'); header("Content-Disposition: attachment; filename=\"".strtolower($t->Name) . '.zip'."\""); header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file); unlink($file); exit; } /** * is_version * @author Ohad Raz * @since 2.1 * @param string $version * @return boolean */ public function is_version( $version = '3.1' ) { global $wp_version; return ($wp_version >= $version) ; } //ajax create directory /** * function to handle ajax new directory creation */ function ajax_create_directory(){ check_ajax_referer('create_directory'); global $current_user; get_currentuserinfo(); if (isset($_POST['di_name']) && isset($_POST['dir'])){ if (current_user_can('manage_options')){ $dir_name = ''; $new_dir_name = strtolower( str_replace(' ', '-', $_POST['di_name'])); if (isset($_POST['f_type'])){ if ($_POST['f_type'] == "plugin" ){ $dir_name = WP_PLUGIN_DIR . '/' . $_POST['dir'] . '/' . $new_dir_name; }elseif ($_POST['f_type'] == "theme" ){ $t = wp_get_theme($_POST['dir']); if ( $t->exists() ){ $dir_name = $t->get_stylesheet_directory(). '/' . $new_dir_name;; } } //if(!is_dir($dir_name)){ //echo __("Cannot create directory Error code 9
".$dir_name,"baace"); //}else{ $umask = umask(0); if (@mkdir($dir_name, 0777)){ echo __("New directory Created!!!","baace"); }else{ echo __("Cannot create directory Error code 8
".$dir_name,"baace"); } umask($umask); //} }else{ echo __('Error Code 7','baace'); } }else{ echo __('Error Code 5','baace'); } }else{ echo __('Error Code 6','baace'); } die(); } //ajax delete file /** * function to handle ajax delete file */ function ajax_delete_file(){ check_ajax_referer('delete_file'); global $current_user; get_currentuserinfo(); if(isset($_POST['F_T_D']) && $_POST['F_T_D'] != '' && isset($_POST['f_type'])){ $f_name = ''; if($_POST['f_type'] == "plugin" ){ $f_name = WP_PLUGIN_DIR . '/' .$_POST['F_T_D']; }else{ $f_name = $_POST['F_T_D']; } @unlink($f_name); echo __('File Deleted!!!','baace'); die(); }else{ echo __('Error Code 4','baace'); die(); } } //ajax create file /** * function to handle ajax file creation */ function ajax_create_file(){ check_ajax_referer('create_new_file'); global $current_user; get_currentuserinfo(); if(isset($_POST)){ $checks = false; $file_name = ''; if (isset($_POST['file_name']) && $_POST['file_name'] != ''){ if (isset($_POST['f_type']) && isset($_POST['dir'])){ $f_name = strtolower( str_replace(' ', '-', $_POST['file_name'])); if($_POST['f_type'] == "plugin" ){ if (current_user_can( 'edit_plugins' )){ $checks = true; $file_name = WP_PLUGIN_DIR . '/' . $_POST['dir'] . '/' . $f_name; } }elseif( $_POST['f_type'] == "theme" ){ if (current_user_can( 'edit_themes' )){ $checks = true; $t = wp_get_theme($_POST['dir']); if ( $t->exists() ){ $file_name = $t->get_stylesheet_directory(). '/' . $f_name;; } } }else{ echo __('Error Code 3','baace'); die(); } }else{ echo __('Error Code 2','baace'); die(); } if ($checks){ if(file_exists( $file_name)){ echo __("File already exists","baace"); die(); }else{ $handle = fopen($file_name, 'w') or wp_die('Cannot open file for editing'); $file_contents = ''; fwrite($handle, $file_contents); fclose($handle); echo __('New File Created!','baace'); die(); } } }else{ echo __('you must set a file name','baace'); } }else{ echo __('Error Code 1','baace'); die(); } die(); } /** * function to include jQuery form plugin for ajax save ... */ function add_scripts(){ $url = plugins_url()."/advanced-code-editor/"; $v = $this->version; wp_enqueue_script( 'jquery' ); wp_enqueue_script( 'jquery-ui' ); wp_enqueue_script( 'jquery-form' ); wp_enqueue_script( 'jquery-ui-dialog' ); wp_enqueue_script('codemirror',$url.'js/codemirror.js',array(),$v,true); wp_enqueue_script('codemirror-fold',$url.'js/foldcode.js',array(),$v,true); wp_enqueue_script('codemirror-format',$url.'js/formatting.js',array(),$v,true); wp_enqueue_script('codemirror-xml',$url.'js/xml.js',array(),$v,true); wp_enqueue_script('codemirror-js',$url.'js/javascript.js',array(),$v,true); wp_enqueue_script('codemirror-css',$url.'js/css.js',array(),$v,true); wp_enqueue_script('codemirror-php',$url.'js/php.js',array(),$v,true); wp_enqueue_script('codemirror-clike',$url.'js/clike.js',array(),$v,true); wp_enqueue_script('codemirror-search',$url.'js/searchcursor.js',array(),$v,true); wp_enqueue_script('codemirror-complete',$url.'js/complete.js',array(),$v,true); $def = $this->get_defaults(); $options = get_option('ace_options',array()); $options = array_merge((array)$def,(array)$options); wp_localize_script('codemirror-complete', 'ace_user', $options); $strings = array( 'imgURL' => $url . 'images/', 'url' => get_bloginfo('url'), 'unsaved' => __(' The Editor Contains unsaved changes','baace'), 'search' => __('Search','baace'), 'replace' => __('Replace','baace'), 'jump' => __('Jump To Line','baace'), 'fullscreen' => __('Full Screen Editor','baace'), 'savechanges' => __('Save Changes','baace'), 'commentout' => __('Comment Out','baace'), 'uncomment' => __('UnComment','baace'), 'autof' => __('Auto Format','baace'), 'changetheme' => __('Change editor theme:','baace'), 'newfile' => __('Create New File','baace'), 'deletefile' => __('Delete Current File','baace'), 'newdir' => __('Create New Directory','baace'), 'tooglefiletree' => __('Toggle File Tree','baace'), 'editorsettings' => __('Editor Settings','baace'), 'commitv' => __('Commit Version','baace'), 'restorev' => __('Restore Version','baace'), 'help' => __('Help','baace'), 'about' => __('About','baace'), 'searchboxtitle' => __('Search And Replace Box','baace'), 'searchbtitle' => __('Search Box','baace'), 'aboutboxtitle' => __('About WordPress Advanced Code Editor','baace'), 'jumpbox' => __('Jump to Line','baace'), 'jump' => __('Jump','baace'), 'save' => __('save','baace'), 'settingsbox' => __('Advanced Code Editor Settings','baace'), 'cancel' => __('Cancel','baace'), 'dirname' => __('Directory Name:','baace'), 'createDir' => __('Create Directory','baace'), 'create' => __('Create','baace'), 'newfilename' => __('File Name:','baace'), 'areyousure' => __('are you sure you want to delete this file: ','baace'), 'no' => __('No','baace'), 'yesimsure' => __('Yes I am sure!','baace'), 'close' => __('Close', 'baace'), 'filerevesiobox' => __('Advanced Code Editor File vesrsions','baace'), 'commit' => __('Commit','baace'), 'commitm'=> __('Commit Message','baace'), 'saveBox' => __('Save Box','baace'), 'autoclosein' => __('this Box will auto close in','baace'), 'seconds' => __('seconds','baace'), 'saving' => __('Saving Changes', 'baace'), 'creatingfile' => __('Creating New File','baace'), 'creatingdir' => __('Creating New Directory','baace'), 'deletingfile' => __('Deleting File','baace'), 'lastsaved' => __('File last Saved at: ','baace'), 'noChangesyet' => __('No Changes made yet.', 'baace'), 'downloadfile' => __('Download file','baace'), 'downloadtheme' => __('Download theme','baace'), 'downloadplugin' => __('Download Plugin','baace') ); wp_localize_script('codemirror-complete', 'ace_strings', $strings); //nonces object $nonces = array( 'ace_settings_panel' => wp_create_nonce( 'ace_settings_panel' ), 'revert_file' => wp_create_nonce('revert_file'), 'delete_version' => wp_create_nonce('delete_version'), 'delete_all' => wp_create_nonce('delete_all_versions'), 'ace_commit_file' => wp_create_nonce('ace_commit_file'), 'get_file_revisions' => wp_create_nonce('get_file_revisions'), 'delete_file' => wp_create_nonce( 'delete_file' ), 'create_directory' => wp_create_nonce('create_directory'), 'create_new_file' => wp_create_nonce('create_new_file'), ); wp_localize_script('codemirror-complete', 'ace_nonce', $nonces); wp_enqueue_script('codemirror-baace',$url.'js/baace.js',array(),$v,true); //@todo: add tabbed editor //wp_enqueue_script('jquery-ui-tabs'); //stylesheets wp_enqueue_style('jquery-ui', $url.'css/jquery-ui.css', false, false); wp_enqueue_style('codemirror', $url.'css/codemirror.css', false, false); wp_enqueue_style('codemirror-def', $url.'themes/default.css', false, false); wp_enqueue_style('codemirror-night', $url.'themes/night.css', false, false); wp_enqueue_style('codemirror-elegant', $url.'themes/elegant.css', false, false); wp_enqueue_style('codemirror-neat', $url.'themes/neat.css', false, false); wp_enqueue_style('codemirror-raverStudio', $url.'themes/raverStudio.css', false, false); wp_enqueue_style('codemirror-cobalt', $url.'themes/cobalt.css', false, false); wp_enqueue_style('codemirror-eclipse', $url.'themes/eclipse.css', false, false); wp_enqueue_style('codemirror-monokai', $url.'themes/monokai.css', false, false); wp_enqueue_style('codemirror-rubyb', $url.'themes/rubyblue.css', false, false); wp_enqueue_style('codemirror-solarizedDark', $url.'themes/solarizedDark.css', false, false); wp_enqueue_style('codemirror-solarizedLight', $url.'themes/solarizedLight.css', false, false); } /** * This is the money function that adds the editor and all of the feature to it in the editor page. */ function do_edit(){ $url = plugins_url()."/advanced-code-editor/"; /*style todo move to external file*/ ?> tablename; $query = "SHOW TABLES LIKE '{$wpdb->prefix}{$table}';"; $indexes = $wpdb->get_var( $wpdb->prepare( $query ) ); if ( $indexes ) return true; return false; } /** * Create a table for file versions * @since 2.0 * * @return none * */ public function _create_meta_table($table=null) { $table = $this->tablename; if ( $this->_meta_table_exists($table) ) { return; } global $wpdb; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); $query = $wpdb->prepare("CREATE TABLE `{$wpdb->prefix}{$table}` ( `meta_id` bigint(20) unsigned not null auto_increment, `file_id` bigint(20) unsigned not null default '0', `meta_key` varchar(255), `meta_value` longtext, PRIMARY KEY (`meta_id`), KEY `file_id` (`file_id`), KEY `meta_key` (`meta_key`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2;"); dbDelta($query); } /** * WordPress doesn't seem to support metadata out * of the box, we need to update $wpdb->table to the correct table * ourself. * @since 2.0 * @return none */ function update_wpdb($table=null) { global $wpdb; $table = $this->tablename; $wpdb->filemeta = $wpdb->prefix . $table; } /** * update_file_meta * @since 2.0 * @author Ohad Raz * @param integer $term_id=0 * @param [type] $meta_key * @param [type] $meta_value * @param string $prev_value * @return [type] */ function update_file_meta($term_id=0, $meta_key, $meta_value, $prev_value = ''){ $this->update_wpdb(); return update_metadata('file', $term_id, $meta_key, $meta_value, $prev_value); } /** * add_file_meta * @since 2.0 * @author Ohad Raz * @param integer $term_id=0 * @param [type] $meta_key * @param [type] $meta_value * @param boolean $unique */ function add_file_meta($term_id=0, $meta_key, $meta_value, $unique = false){ $this->update_wpdb(); return add_metadata('file', $term_id, $meta_key, $meta_value, $unique); } /** * delete_file_meta * @since 2.0 * @author Ohad Raz * @param integer $term_id=0 * @param [type] $meta_key * @param string $meta_value * @param boolean $delete_all * @return [type] */ function delete_file_meta($term_id=0, $meta_key, $meta_value = '', $delete_all = false){ $this->update_wpdb(); return delete_metadata('file', $term_id, $meta_key, $meta_value, $delete_all); } /** * get_file_meta * @since 2.0 * @author Ohad Raz * @param integer $term_id=0 * @param [type] $key * @param boolean $single * @return [type] */ function get_file_meta($term_id=0, $key, $single = true){ $this->update_wpdb(); return get_metadata('file', $term_id, $key, $single); } /** * get_file_meta_id * @since 2.0 * @author Ohad Raz * @param string $meta_key * @param mixed $meta_value * @return int if meta id found else returns false */ function get_file_meta_id($meta_key,$meta_val){ global $wpdb; $mid = $wpdb->get_var( $wpdb->prepare("SELECT meta_id FROM $wpdb->filemeta WHERE meta_key = %s AND meta_value = %s", $meta_key,$meta_val)); if( $mid != '' ) return (int)$mid; return false; } public function _my_plugin_links($links, $file) { $plugin = plugin_basename(__FILE__); if ($file == $plugin) // only for this plugin return array_merge( $links, array( '' . __('Other Plugins by this author' ) . '' ), array( '' . __('Plugin Support') . '' ), array( '' . __('Donate') . '' ) ); return $links; } public function uninstall(){ if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) exit (); global $wpdb; $wpdb->query( "DROP TABLE IF EXISTS `" . $wpdb->prefix . "filemeta`;" ); } }//END Class }//END IF $ace = new advanced_code_editor(); register_activation_hook( __FILE__, array( &$ace, '_create_meta_table'));