Custom "Open with" actions
Creating a custom “Open with..” file contextual menu option:
The plugin folder structure
-
Create a new empty folder inside “customizables/custom_actions/”. For this example we'll name it “hello”.
-
Create a file “customizables/custom_actions/hello/app.php”
The PHP class
Inside “customizables/custom_actions/hello/app.php”, start with the following example:
<?php
class custom_hello {//required class name "custom_<folder-name>"
var $online = true; //set this to true if the plugin requires Internet connection. it also makes the option show after the plugins that Web File Share comes with.
var $disabled = false; //you can use this or the method bellow
function isDisabled() {//optional method for dynamically enabling/disabling this plugin
return false;
}
function init() {//required method
//contains only configuration data
//no other functionality here
$this->JSconfig = array(
//required
"title" => self::t("Hello World"),
"popup" => true, //opens a popup and runs the method run() inside
//popup styling
'iconCls' => 'fa fa-fw fa-file-text-o', //CSS class for menu item icon, remove the bellow if using this
"icon" => 'url/to/icon.png', //image file for menu item icon, remove the above if using this
"loadingMsg" => self::t('The plugin is loading. Please wait.'),
"width" => 500,
"height" => 500,
"external" => true, //makes the popup an actual browser popup instead of an in-page one
"ajax" => true, //instead of the popup above, it makes an Ajax call for the run() method
"multiple" => true, //show menu item also when multiple files are being selected
"onlyMultiple" => true, //show menu item ONLY when multiple files are being selected
"folder" => true, //show menu item only for folders
'extensions' => [
'pdf' //show only for PDF files
],
'useWith' => [//the above setting takes precedence over this one
'txt', //show only for plain text files
'office', //show only for office files
'noext' //.. and files without extension
],
"requiredUserPerms" => ["download", "upload"]
);
}
static function t($text) {//utility method for allowing the plugin to be translated to various languages
$section = 'Custom Actions: Hello World'; //the translation section
return \WebFileShare\Lang::t($text, $section);
}
function run() {//called inside the popup, or by the Ajax request
\WebFileShare::checkPerms("download");//important security stuff!
echo 'Hello World!';
echo '\\';
echo 'Relative file path: '.$this->data['filePath'];
echo '\\';
echo 'Full file path: '.$this->data['fileName'];
echo '\\';
echo 'File name: '.$this->data['relativePath'];
echo '\\';
echo 'Full path of plugin folder: '.$this->path;
//add the action to the user activity log
\WebFileShare\Log::add(false, "preview", [
"relative_path" => $this->data['relativePath'],
"full_path" => $this->data['filePath'],
"method" => "Hello"
]);
}
function dummy() {
//your popup can access this method through the following URL: ?module=custom_actions&action=hello&method=dummy
}
}