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));
}
}