<?php
/**
 * This file is part of Image Resizer & Optimizer with GD plugin for MyBB.
 * Based on Cipher's Image Resizer plugin <ferry@cipher.demon.nl>
 *
 * Author Cipher <ferry@cipher.demon.nl>
 * Author MT Jordan <mtjo62@gmail.com>
 *
 * Copyright (C) 2007-2009 Cipher <ferry@cipher.demon.nl>
 * Copyright (C) 2010-2011 openSource Partners
 * Copyright (C) 2012 Omar Gonzalez <inu.admin@gmail.com>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */
 
// Die if IN_MYBB is not defined, for security reasons.
defined('IN_MYBB') or die('This file cannot be accessed directly.');

// Run the ACP hooks.
if(!defined('IN_ADMINCP'))
{
	$plugins->add_hook('parse_message', 'imageresizer_gd_message');
}

//Necessary plugin information for the ACP plugin manager.
function imageresizer_gd_info()
{
	global $lang;
	$lang->load('imageresizer_gd');

	return array(
		'name'			=> 'Image Resizer & Optimizer with GD',
		'description'	=> $lang->imageresizer_gd_plugin_d,
		'website'		=> 'http://mods.mybboard.net/',
		'author'		=> 'MT Jordan<br /><i>Maintained by <a href="mailto:inu.admin@gmail.com">Omar Gonzalez</a></i>',
		'authorsite'	=> 'http://mods.mybboard.net/',
		'version'		=> '2.0',
		'guid'			=> '3d1f80eabbdc15967e189c3b222ca68a',
		'compatibility'	=> '16*'
	);
}

function imageresizer_gd_activate()
{
    global $mybb, $db;
	imageresizer_gd_deactivate(false);

    // Add settings
	$disporder = $db->fetch_field($db->simple_select('settinggroups', 'MAX(disporder) AS disporder'), 'disporder');
	$gid = $db->insert_query('settinggroups',array(
		'name'			=> 'imageresizer_gd',
		'title'			=> $db->escape_string('Image Resizer & Optimizer with GD'),
		'description'	=> $db->escape_string('Settings for Image Resizer & Optimizer with GD plugin.'),
		'disporder'		=> ++$disporder,
		'isdefault'		=> 'no'
	));

	$settings = array(
		1 => array(
			'name'			=>	'active',
			'title'			=>	'Active',
			'description'	=>	'This gives you the possibility to deactivate the plugin without losing the settings.',
			'optionscode'	=>	'onoff',
			'value'			=>	1,
		),
		2 => array(
			'name'			=>	'resizeroveride',
			'title'			=>	'Overide dynamic resizing and optimization',
			'description'	=>	'This setting overides dynamic GD processing and statically resizes images. Set this to "Yes" if your Host has disabled the fopen wrapper and does not allow .htaccess overide.',
			'optionscode'	=>	'yesno',
			'value'			=>	0,
		),
		3 => array(
			'name'			=>	'maxwidth',
			'title'			=>	'Maximum width',
			'description'	=>	'Maximum width of images in posts.',
			'optionscode'	=>	'text',
			'value'			=>	500,
		),
		4 => array(
			'name'			=>	'resizewidth',
			'title'			=>	'Resize width',
			'description'	=>	'Resized width of images in posts that exceed maximum width.',
			'optionscode'	=>	'text',
			'value'			=>	500,
		),
		5 => array(
			'name'			=>	'maxsize',
			'title'			=>	'Maximum filesize',
			'description'	=>	'Maximum filesize allowed before an image is optimized regardless of width.',
			'optionscode'	=>	'text',
			'value'			=>	30000,
		),
		6 => array(
			'name'			=>	'animwidth',
			'title'			=>	'Maximum width for animated GIF',
			'description'	=>	'Maximum width allowed for an animated GIF.',
			'optionscode'	=>	'text',
			'value'			=>	500,
		),
		7 => array(
			'name'			=>	'animsize',
			'title'			=>	'Maximum filesize for animated GIF',
			'description'	=>	'Maximum filesize allowed for an animated GIF before it is flattened regardless of width.',
			'optionscode'	=>	'text',
			'value'			=>	30000,
		),
		8 => array(
			'name'			=>	'showwarning',
			'title'			=>	'Show warning',
			'description'	=>	'Should users be alerted to view full size image by a message link.',
			'optionscode'	=>	'yesno',
			'value'			=>	1,
		),
		9 => array(
			'name'			=>	'warningclass',
			'title'			=>	'Warning Class',
			'description'	=>	'Write the class for the warning in the text box.',
			'optionscode'	=>	'text',
			'value'			=>	'image_resizer_warning',
		),
		10 => array(
			'name'			=>	'warningposition',
			'title'			=>	'Warning message position',
			'description'	=>	'Vertical position of the warning message.',
			'optionscode'	=>	'select
1=Top
0=Bottom',
			'value'			=>	1,
		),
	);
	$disporder = 0;
    $gid = intval($gid);
	foreach($settings as $key => $val)
	{
		$setting = array(
			'name'			=>	'image_resizer_'.$val['name'],
			'title'			=>	$db->escape_string($val['title']),
			'description'	=>	$db->escape_string($val['description']),
			'optionscode'	=>	$db->escape_string($val['optionscode']),
			'value'			=>	$db->escape_string($val['value']),
			'disporder'		=>	++$disporder,
			'gid'			=>	$gid,
		);
		$db->insert_query('settings', $setting);
	}
	rebuild_settings();
}

function imageresizer_gd_deactivate($rebuild_settings=true)
{
	global $db;
	$gid = $db->fetch_field($db->simple_select('settinggroups', 'gid', 'name="imageresizer_gd"'), 'gid');
	if($gid)
	{
		$db->delete_query('settings', "gid='{$gid}'");
		$db->delete_query('settinggroups', "gid='{$gid}'");
		if($rebuild_settings)
		{
			rebuild_settings();
		}
	}
}

function imageresizer_gd_message(&$message)
{
	global $settings;

	if($settings['image_resizer_active'] == 1)
	{
		$message = preg_replace('#<img(.*?)/>#', '<img class="postimage"$1/>', $message );
		$GLOBALS['plugins']->add_hook('pre_output_page', 'imageresizer_gd_page');
	}
}

function imageresizer_gd_page(&$page)
{
	global $settings;

	if($settings['image_resizer_active'] != 1)
	{
		return $page;
	}

	// Set the array of options
	$options = array(
		'overide'			=>	((int)$settings['image_resizer_resizeroveride'] == 1 ? 1 : 0),
		'resizewidth'		=>	(int)$settings['image_resizer_resizewidth'],
		'maxwidth'			=>	(int)$settings['image_resizer_maxwidth'],
		'showwarning'		=>	((int)$settings['image_resizer_showwarning'] == 1 ? 1 : 0),
		'warningclass'		=>	$settings['image_resizer_warningclass'],
		'warningposition'	=>	((int)$settings['image_resizer_warningposition'] == 1 ? 1 : 0),
	);

	$jscript = "<script type=\"text/javascript\" src=\"{$settings['bburl']}/jscripts/imageresizer_gd.js\"></script>
<script type=\"text/javascript\">
<!--
	var imageresizer_gd_bburl = '{$settings['bburl']}';
	var imageresizer_gd_overide = '{$options['overide']}';
	var imageresizer_gd_resizewidth = '{$options['resizewidth']}';
	var imageresizer_gd_maxwidth = '{$options['maxwidth']}';
	var imageresizer_gd_showwarning = '{$options['showwarning']}';
	var imageresizer_gd_warningtext = '{$lang->imageresizer_gd_warning}';
	var imageresizer_gd_warningclass = '{$options['warningclass']}';
	var imageresizer_gd_warningposition = '{$options['warningposition']}';
	Event.observe(window, \"load\", function() {imageresizer_gd();});
// -->
</script>";


$css = '<style type="text/css">
.image_resizer_warning {
	background: yellow;
	color: black;
	padding: 5px 20px;
	text-align: center;
	border: 1px orange solid;
	/*border-bottom: 1px;*/
}
.image_resizer_warning a {
	font-weight: bold;
	color: black;
}
</style>';

	return str_replace('</body>', $css.$jscript.'</body>', $page);
}