Vergleich inc/plugins/hello.php - 1.8.1 - 1.8.38

  Keine Änderungen   Hinzugefügt   Modifiziert   Entfernt
Zeile 8Zeile 8
 *
*/


 *
*/


// Disallow direct access to this file for security reasons
if(!defined("IN_MYBB"))

// Make sure we can't access this file directly from the browser.
if(!defined('IN_MYBB'))

{

{

	die("Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.");










































	die('This file cannot be accessed directly.');
}

// cache templates - this is important when it comes to performance
// THIS_SCRIPT is defined by some of the MyBB scripts, including index.php
if(defined('THIS_SCRIPT'))
{
global $templatelist;

if(isset($templatelist))
{
$templatelist .= ',';
}

if(THIS_SCRIPT== 'index.php')
{
$templatelist .= 'hello_index, hello_message';
}
elseif(THIS_SCRIPT== 'showthread.php')
{
$templatelist .= 'hello_post, hello_message';
}
}

if(defined('IN_ADMINCP'))
{
// Add our hello_settings() function to the setting management module to load language strings.
$plugins->add_hook('admin_config_settings_manage', 'hello_settings');
$plugins->add_hook('admin_config_settings_change', 'hello_settings');
$plugins->add_hook('admin_config_settings_start', 'hello_settings');
// We could hook at 'admin_config_settings_begin' only for simplicity sake.
}
else
{
// Add our hello_index() function to the index_start hook so when that hook is run our function is executed
$plugins->add_hook('index_start', 'hello_index');

// Add our hello_post() function to the postbit hook so it gets executed on every post
$plugins->add_hook('postbit', 'hello_post');

// Add our hello_new() function to the misc_start hook so our misc.php?action=hello inserts a new message into the created DB table.
$plugins->add_hook('misc_start', 'hello_new');

}


}


$plugins->add_hook("pre_output_page", "hello_world");
$plugins->add_hook("postbit", "hello_world_postbit");


 
function hello_info()
{

function hello_info()
{

 
	global $lang;
$lang->load('hello');


	/**
* Array of information about the plugin.
* name: The name of the plugin

	/**
* Array of information about the plugin.
* name: The name of the plugin

Zeile 27Zeile 68
	 * author: The name of the author of the plugin
* authorsite: The URL to the website of the author (Optional)
* version: The version number of the plugin

	 * author: The name of the author of the plugin
* authorsite: The URL to the website of the author (Optional)
* version: The version number of the plugin

	 * guid: Unique ID issued by the MyBB Mods site for version checking
* compatibility: A CSV list of MyBB versions supported. Ex, "121,123", "12*". Wildcards supported.

	 * compatibility: A CSV list of MyBB versions supported. Ex, '121,123', '12*'. Wildcards supported.
* codename: An unique code name to be used by updated from the official MyBB Mods community.

	 */
return array(

	 */
return array(

		"name"			=> "Hello World!",
"description" => "A sample plugin that prints hello world and prepends the content of each post to 'Hello world!'",
"website" => "http://www.mybb.com",
"author" => "MyBB Group",
"authorsite" => "http://www.mybb.com",
"version" => "1.0",
"guid" => "",
"compatibility" => "*"

		'name'			=> 'Hello World!',
'description' => $lang->hello_desc,
'website' => 'https://mybb.com',
'author' => 'MyBB Group',
'authorsite' => 'https://mybb.com',
'version' => '2.0',
'compatibility' => '18*',
'codename' => 'hello'

	);
}


	);
}


/**
* ADDITIONAL PLUGIN INSTALL/UNINSTALL ROUTINES
*




































































































































































































































































/*
* _activate():
* Called whenever a plugin is activated via the Admin CP. This should essentially make a plugin
* 'visible' by adding templates/template changes, language changes etc.
*/
function hello_activate()
{
global $db, $lang;
$lang->load('hello');

// Add a new template (hello_index) to our global templates (sid = -1)
$templatearray = array(
'index' => '<br />
<table border="0" cellspacing="{$theme[\'borderwidth\']}" cellpadding="{$theme[\'tablespace\']}" class="tborder">
<thead>
<tr>
<td class="thead">
<strong>{$lang->hello}</strong>
</td>
</tr>
</thead>
<tbody>
<tr>
<td class="tcat">
<form method="POST" action="misc.php">
<input type="hidden" name="my_post_key" value="{$mybb->post_code}" />
<input type="hidden" name="action" value="hello" />
{$lang->hello_add_message}: <input type="text" name="message" class="textbox" /> <input type="submit" name="submit" class="button" value="{$lang->hello_add}" />
</form>
</td>
</tr>
<tr>
<td class="trow1">
{$messages}
</td>
</tr>
</tbody>
</table>
<br />',
'post' => '<br /><br /><strong>{$lang->hello}:</strong><br />{$messages}',
'message' => '<br /> - {$message}'
);

$group = array(
'prefix' => $db->escape_string('hello'),
'title' => $db->escape_string('Hello World!')
);

// Update or create template group:
$query = $db->simple_select('templategroups', 'prefix', "prefix='{$group['prefix']}'");

if($db->fetch_field($query, 'prefix'))
{
$db->update_query('templategroups', $group, "prefix='{$group['prefix']}'");
}
else
{
$db->insert_query('templategroups', $group);
}

// Query already existing templates.
$query = $db->simple_select('templates', 'tid,title,template', "sid=-2 AND (title='{$group['prefix']}' OR title LIKE '{$group['prefix']}=_%' ESCAPE '=')");

$templates = $duplicates = array();

while($row = $db->fetch_array($query))
{
$title = $row['title'];
$row['tid'] = (int)$row['tid'];

if(isset($templates[$title]))
{
// PluginLibrary had a bug that caused duplicated templates.
$duplicates[] = $row['tid'];
$templates[$title]['template'] = false; // force update later
}
else
{
$templates[$title] = $row;
}
}

// Delete duplicated master templates, if they exist.
if($duplicates)
{
$db->delete_query('templates', 'tid IN ('.implode(",", $duplicates).')');
}

// Update or create templates.
foreach($templatearray as $name => $code)
{
if(strlen($name))
{
$name = "hello_{$name}";
}
else
{
$name = "hello";
}

$template = array(
'title' => $db->escape_string($name),
'template' => $db->escape_string($code),
'version' => 1,
'sid' => -2,
'dateline' => TIME_NOW
);

// Update
if(isset($templates[$name]))
{
if($templates[$name]['template'] !== $code)
{
// Update version for custom templates if present
$db->update_query('templates', array('version' => 0), "title='{$template['title']}'");

// Update master template
$db->update_query('templates', $template, "tid={$templates[$name]['tid']}");
}
}
// Create
else
{
$db->insert_query('templates', $template);
}

// Remove this template from the earlier queried list.
unset($templates[$name]);
}

// Remove no longer used templates.
foreach($templates as $name => $row)
{
$db->delete_query('templates', "title='{$db->escape_string($name)}'");
}

// Settings group array details
$group = array(
'name' => 'hello',
'title' => $db->escape_string($lang->setting_group_hello),
'description' => $db->escape_string($lang->setting_group_hello_desc),
'isdefault' => 0
);

// Check if the group already exists.
$query = $db->simple_select('settinggroups', 'gid', "name='hello'");

if($gid = (int)$db->fetch_field($query, 'gid'))
{
// We already have a group. Update title and description.
$db->update_query('settinggroups', $group, "gid='{$gid}'");
}
else
{
// We don't have a group. Create one with proper disporder.
$query = $db->simple_select('settinggroups', 'MAX(disporder) AS disporder');
$disporder = (int)$db->fetch_field($query, 'disporder');

$group['disporder'] = ++$disporder;

$gid = (int)$db->insert_query('settinggroups', $group);
}

// Deprecate all the old entries.
$db->update_query('settings', array('description' => 'HELLODELETEMARKER'), "gid='{$gid}'");

// add settings
$settings = array(
'display1' => array(
'optionscode' => 'yesno',
'value' => 1
),
'display2' => array(
'optionscode' => 'yesno',
'value' => 1
));

$disporder = 0;

// Create and/or update settings.
foreach($settings as $key => $setting)
{
// Prefix all keys with group name.
$key = "hello_{$key}";

$lang_var_title = "setting_{$key}";
$lang_var_description = "setting_{$key}_desc";

$setting['title'] = $lang->{$lang_var_title};
$setting['description'] = $lang->{$lang_var_description};

// Filter valid entries.
$setting = array_intersect_key($setting,
array(
'title' => 0,
'description' => 0,
'optionscode' => 0,
'value' => 0,
));

// Escape input values.
$setting = array_map(array($db, 'escape_string'), $setting);

// Add missing default values.
++$disporder;

$setting = array_merge(
array('description' => '',
'optionscode' => 'yesno',
'value' => 0,
'disporder' => $disporder),
$setting);

$setting['name'] = $db->escape_string($key);
$setting['gid'] = $gid;

// Check if the setting already exists.
$query = $db->simple_select('settings', 'sid', "gid='{$gid}' AND name='{$setting['name']}'");

if($sid = $db->fetch_field($query, 'sid'))
{
// It exists, update it, but keep value intact.
unset($setting['value']);
$db->update_query('settings', $setting, "sid='{$sid}'");
}
else
{
// It doesn't exist, create it.
$db->insert_query('settings', $setting);
// Maybe use $db->insert_query_multiple somehow
}
}

// Delete deprecated entries.
$db->delete_query('settings', "gid='{$gid}' AND description='HELLODELETEMARKER'");

// This is required so it updates the settings.php file as well and not only the database - they must be synchronized!
rebuild_settings();

// Include this file because it is where find_replace_templatesets is defined
require_once MYBB_ROOT.'inc/adminfunctions_templates.php';

// Edit the index template and add our variable to above {$forums}
find_replace_templatesets('index', '#'.preg_quote('{$forums}').'#', "{\$hello}\n{\$forums}");
}

/*
* _deactivate():
* Called whenever a plugin is deactivated. This should essentially 'hide' the plugin from view
* by removing templates/template changes etc. It should not, however, remove any information
* such as tables, fields etc - that should be handled by an _uninstall routine. When a plugin is
* uninstalled, this routine will also be called before _uninstall() if the plugin is active.
*/
function hello_deactivate()
{
require_once MYBB_ROOT.'inc/adminfunctions_templates.php';

// remove template edits
find_replace_templatesets('index', '#'.preg_quote('{$hello}').'#', '');
}

/*

 * _install():

 * _install():

 *   Called whenever a plugin is installed by clicking the "Install" button in the plugin manager.

 *   Called whenever a plugin is installed by clicking the 'Install' button in the plugin manager.

 *   If no install routine exists, the install button is not shown and it assumed any work will be
* performed in the _activate() routine.

 *   If no install routine exists, the install button is not shown and it assumed any work will be
* performed in the _activate() routine.

 *
* function hello_install()
* {
* }
*


































*/
function hello_install()
{
global $db;

// Create our table collation
$collation = $db->build_create_table_collation();

// Create table if it doesn't exist already
if(!$db->table_exists('hello_messages'))
{
switch($db->type)
{
case "pgsql":
$db->write_query("CREATE TABLE ".TABLE_PREFIX."hello_messages (
mid serial,
message varchar(100) NOT NULL default '',
PRIMARY KEY (mid)
);");
break;
case "sqlite":
$db->write_query("CREATE TABLE ".TABLE_PREFIX."hello_messages (
mid INTEGER PRIMARY KEY,
message varchar(100) NOT NULL default ''
);");
break;
default:
$db->write_query("CREATE TABLE ".TABLE_PREFIX."hello_messages (
mid int unsigned NOT NULL auto_increment,
message varchar(100) NOT NULL default '',
PRIMARY KEY (mid)
) ENGINE=MyISAM{$collation};");
break;
}
}
}

/*

 * _is_installed():
* Called on the plugin management page to establish if a plugin is already installed or not.
* This should return TRUE if the plugin is installed (by checking tables, fields etc) or FALSE
* if the plugin is not installed.

 * _is_installed():
* Called on the plugin management page to establish if a plugin is already installed or not.
* This should return TRUE if the plugin is installed (by checking tables, fields etc) or FALSE
* if the plugin is not installed.

 *
* function hello_is_installed()
* {
* global $db;
* if($db->table_exists("hello_world"))
* {
* return true;
* }
* return false;
* }
*

*/
function hello_is_installed()
{
global $db;

// If the table exists then it means the plugin is installed because we only drop it on uninstallation
return $db->table_exists('hello_messages');
}

/*


 * _uninstall():
* Called whenever a plugin is to be uninstalled. This should remove ALL traces of the plugin
* from the installation (tables etc). If it does not exist, uninstall button is not shown.

 * _uninstall():
* Called whenever a plugin is to be uninstalled. This should remove ALL traces of the plugin
* from the installation (tables etc). If it does not exist, uninstall button is not shown.

 *
* function hello_uninstall()
* {
* }
*
* _activate():
* Called whenever a plugin is activated via the Admin CP. This should essentially make a plugin
* "visible" by adding templates/template changes, language changes etc.
*
* function hello_activate()
* {
* }
*
* _deactivate():
* Called whenever a plugin is deactivated. This should essentially "hide" the plugin from view
* by removing templates/template changes etc. It should not, however, remove any information
* such as tables, fields etc - that should be handled by an _uninstall routine. When a plugin is
* uninstalled, this routine will also be called before _uninstall() if the plugin is active.
*
* function hello_deactivate()
* {
* }
*/


function hello_world($page)

*/
function hello_uninstall()

























{

{

	$page = str_replace("<div id=\"content\">", "<div id=\"content\"><p>Hello World!<br />This is a sample MyBB Plugin (which can be disabled!) that displays this message on all pages.</p>", $page);
return $page;



































































































































	global $db, $mybb;

if($mybb->request_method != 'post')
{
global $page, $lang;
$lang->load('hello');

$page->output_confirm_action('index.php?module=config-plugins&action=deactivate&uninstall=1&plugin=hello', $lang->hello_uninstall_message, $lang->hello_uninstall);
}

// Delete template groups.
$db->delete_query('templategroups', "prefix='hello'");

// Delete templates belonging to template groups.
$db->delete_query('templates', "title='hello' OR title LIKE 'hello_%'");

// Delete settings group
$db->delete_query('settinggroups', "name='hello'");

// Remove the settings
$db->delete_query('settings', "name IN ('hello_display1','hello_display2')");

// This is required so it updates the settings.php file as well and not only the database - they must be synchronized!
rebuild_settings();

// Drop tables if desired
if(!isset($mybb->input['no']))
{
$db->drop_table('hello_messages');
}
}

/*
* Loads the settings language strings.
*/
function hello_settings()
{
global $lang;

// Load our language file
$lang->load('hello');
}

/*
* Displays the list of messages on index and a form to submit new messages - depending on the setting of course.
*/
function hello_index()
{
global $mybb;

// Only run this function is the setting is set to yes
if($mybb->settings['hello_display1'] == 0)
{
return;
}

global $db, $lang, $templates, $hello, $theme;

// Load our language file
$lang->load('hello');

// Retreive all messages from the database
$messages = '';
$query = $db->simple_select('hello_messages', 'message', '', array('order_by' => 'mid', 'order_dir' => 'DESC'));
while($message = $db->fetch_field($query, 'message'))
{
// htmlspecialchars_uni is similar to PHP's htmlspecialchars but allows unicode
$message = htmlspecialchars_uni($message);
$messages .= eval($templates->render('hello_message'));
}

// If no messages were found, display that notice.
if(empty($messages))
{
$message = $lang->hello_empty;
$messages = eval($templates->render('hello_message'));
}

// Set $hello as our template and use eval() to do it so we can have our variables parsed
#eval('$hello = "'.$templates->get('hello_index').'";');
$hello = eval($templates->render('hello_index'));
}

/*
* Displays the list of messages under every post - depending on the setting.
* @param $post Array containing information about the current post. Note: must be received by reference otherwise our changes are not preserved.
*/
function hello_post(&$post)
{
global $settings;

// Only run this function is the setting is set to yes
if($settings['hello_display2'] == 0)
{
return;
}

global $lang, $templates;

// Load our language file
if(!isset($lang->hello))
{
$lang->load('hello');
}

static $messages;

// Only retreive messages from the database if they were not retreived already
if(!isset($messages))
{
global $db;

// Retreive all messages from the database
$messages = '';
$query = $db->simple_select('hello_messages', 'message', '', array('order_by' => 'mid', 'order_dir' => 'DESC'));
while($message = $db->fetch_field($query, 'message'))
{
// htmlspecialchars_uni is similar to PHP's htmlspecialchars but allows unicode
$message = htmlspecialchars_uni($message);
$messages .= eval($templates->render('hello_message'));
}

// If no messages were found, display that notice.
if(empty($messages))
{
$message = $lang->hello_empty;
$messages = eval($templates->render('hello_message'));
}
}

// Alter the current post's message
$post['message'] .= eval($templates->render('hello_post'));

}

}


function hello_world_postbit(&$post)





/*
* This is where new messages get submitted.
*/
function hello_new()

{

{

	$post['message'] = "<strong>Hello world!</strong><br /><br />{$post['message']}";








































	global $mybb;

// If we're not running the 'hello' action as specified in our form, get out of there.
if($mybb->get_input('action') != 'hello')
{
return;
}

// Only accept POST
if($mybb->request_method != 'post')
{
error_no_permission();
}

global $lang;

// Correct post key? This is important to prevent CSRF
verify_post_check($mybb->get_input('my_post_key'));

// Load our language file
$lang->load('hello');

$message = trim($mybb->get_input('message'));

// Message cannot be empty
if(!$message || my_strlen($message) > 100)
{
error($lang->hello_message_empty);
}

global $db;

// Escape input data
$message = $db->escape_string($message);

// Insert into database
$db->insert_query('hello_messages', array('message' => $message));

// Redirect to index.php with a message
redirect('index.php', $lang->hello_done);

}

}