load_descriptions(); $plugin_name=$data['Name']; $_addtitional_permanent=($plugin_name=='Additional Plugins Descriptions')?'':'
You will SAVE this description even if reinstall plugin'; $_addtitional_temporary=($plugin_name=='Additional Plugins Descriptions')?'':'
You will LOST this description if reinstall plugin'; if (key_exists($plugin_name,$this->descriptions)) { if (key_exists('permanent',$this->descriptions[$plugin_name])) { $description_permanent=$this->descriptions[$plugin_name]['permanent']; } if (key_exists('temporary',$this->descriptions[$plugin_name])) { $description_temporary=$this->descriptions[$plugin_name]['temporary']; } }; if (!isset($description_permanent)) { $description_permanent=''; } if (!isset($description_temporary)) { $description_temporary=''; } $description_temporary=nl2br($description_temporary); $description_permanent=nl2br($description_permanent); $description_div=<< Temporary description $_addtitional_temporary Permanent description $_addtitional_permanent $description_temporary $description_permanent Is an additional descriptions of the plugins a useful feature?
If YES, please donate. HTML; return array_merge($links, array($description_div)); } /** * ajax */ public function action_ajax_set_plugin_descriptions() { //remove wp magic quotes $_POST = array_map('stripslashes', $_POST); //only
tags allowed in description $description_temporary=wp_kses( trim(strval($_POST['description_temporary'])), array('br'=>array()) ); $description_permanent=wp_kses( trim(strval($_POST['description_permanent'])), array('br'=>array()) ); //any string as plugin name $plugin_name=htmlspecialchars(strval($_POST['plugin_name'])); $this->load_descriptions(); $this->descriptions[$plugin_name]['permanent']=$description_permanent; $this->descriptions[$plugin_name]['temporary']=$description_temporary; $this->save_descriptions(); wp_die(); } public function action_delete_plugin($file) { $file=WP_PLUGIN_DIR.DIRECTORY_SEPARATOR.$file; $plugin_data=get_plugin_data( $file, false,false); $plugin_name=$plugin_data['Name']; $this->load_descriptions(); if (key_exists($plugin_name,$this->descriptions)) { if (key_exists('temporary',$this->descriptions[$plugin_name])) { unset($this->descriptions[$plugin_name]['temporary']); } } $this->save_descriptions(); } public function action_enqueue_scripts($hook_suffix) { if ($hook_suffix!=='plugins.php') return; wp_enqueue_script('additionalpluginsdescriptions',plugin_dir_url(__FILE__).'additional-plugins-descriptions.js',['jquery']); } private function load_descriptions() { //todo:скорее всего сериализация не нужна, вп сам сериализует/десериализует if (!$this->descriptions) { $this->descriptions=get_option('apd_descriptions',array()); if (!$this->descriptions) { add_option('apd_descriptions',array(),'','no'); $this->descriptions=array(); } else { $this->descriptions=unserialize($this->descriptions); } } } private function save_descriptions() { update_option('apd_descriptions',serialize($this->descriptions)); } }