tablename = 'filemeta';
$this->version = '2.2.6';
//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 ''.__('Date','ace').' '.__('Message','ace').' '.__('Actions','ace').' ';
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 '
'.$v['date'].'
'.$v['message'].'
';
}
}
}
echo '
';
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*/
?>
CRTL + Space -
CRTL + Z -
CRTL + Y -
CRTL + F -
CRTL + H -
CRTL + G -
CRTL + M -
CRTL + SHIFT + / -
CRTL + SHIFT + . -
CRTL + S -
F11 -
tablename;
$query = "SHOW TABLES LIKE '{$wpdb->prefix}{$table}';";
$indexes = $wpdb->get_var( $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 = "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'));