Collections functions
General functions
Node functions
Render functions
Theme permission functions
User functions
Resource functions

get_plugin_yaml()

Parameters

ColumnTypeDefaultDescription
$plugin
$validate true
$translate true

Location

include/plugin_functions.php lines 118 to 197

Definition

 
function get_plugin_yaml($plugin$validate=true$translate=true)
{

    
# We're not using a full YAML structure, so this parsing function will do
    
$plugin_yaml['name'] = $plugin;
    
$plugin_yaml['version'] = '0';
    
$plugin_yaml['author'] = '';
    
$plugin_yaml['info_url'] = '';
    
$plugin_yaml['update_url'] = '';
    
$plugin_yaml['config_url'] = '';
    
$plugin_yaml['desc'] = '';
    
$plugin_yaml['default_priority'] = '999';
    
$plugin_yaml['disable_group_select'] = '0';
    
$plugin_yaml['title'] = '';
    
$plugin_yaml['icon'] = '';

    
// Validate plugin name (prevent path traversal when getting .yaml)
    
if (!ctype_alnum(str_replace(["_","-"],"",$plugin))) { return $validate false $plugin_yaml;}

    
// Find plugin YAML
    
$path get_plugin_path($plugin) . "/" $plugin ".yaml";
    if (!(
file_exists($path) && is_readable($path))) {
        return 
$validate false $plugin_yaml;
    }

    
$yaml_file_ptr fopen($path'r');

    if (
$yaml_file_ptr != false) {
        while ((
$line fgets($yaml_file_ptr)) != '') {
            if (
                
$line[0] != '#' 
                
&& ($pos strpos($line,':')) != false
            
) {
                
# Exclude comments from parsing
                
$plugin_yaml[trim(substr($line,0,$pos))] = trim(substr($line$pos+1));
            }
        }
            
        if (
$plugin_yaml['config_url'] != '' && $plugin_yaml['config_url'][0] == '/') {
            
# Strip leading spaces from the config url
            
$plugin_yaml['config_url'] = trim($plugin_yaml['config_url'], '/');
        }

        
fclose($yaml_file_ptr);

        if (
$validate) {
            if (isset(
$plugin_yaml['name']) && $plugin_yaml['name']==basename($path,'.yaml') && isset($plugin_yaml['version'])) {
                return 
$plugin_yaml;
            } else {
                return 
false;
            }
        }
    } elseif (
$validate) {
        return 
false;
    }

    
// Handle translations for base plugins
    
global $language,$languages,$lang;
    if (
$translate && $language!="en" && $language!="")
        {
        
// Include relevant language file and use the translations instead, if set.
        
if (!array_key_exists($language,$languages)) {exit("Invalid language");} // Prevent path traversal
        
$plugin_lang_file=dirname(__FILE__) . "/../plugins/" $plugin_yaml["name"] . "/languages/" $language ".php";
        if (
file_exists($plugin_lang_file))
            {
            include_once(
$plugin_lang_file);
            if (isset(
$lang["plugin-" $plugin_yaml["name"] . "-title"]))
                {
                
// Append the translated title so the English title is still visible, this is so it's still possible to find the relevant plugin
                // in the Knowledge Base (until we have Knowledge Base translations down the line)
                
$plugin_yaml["title"].=" (" . ($lang["plugin-" $plugin_yaml["name"] . "-title"] ?? $plugin_yaml["title"]) . ")";
                }
            
$plugin_yaml["desc"]= $lang["plugin-" $plugin_yaml["name"] . "-desc"]  ?? $plugin_yaml["desc"];
            }
        
$param="plugin-category-" strtolower(str_replace(" ","-",$plugin_yaml["category"]));
        
$plugin_yaml["category"]= $lang[$param] ?? $plugin_yaml["category"];  
        }

    return 
$plugin_yaml;
}

This article was last updated 23rd July 2024 07:05 Europe/London time based on the source file dated 12th July 2024 13:45 Europe/London time.