Update of /cvsroot/php-blog/additional_plugins/serendipity_event_amazonchooser
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18322/serendipity_event_amazonchooser
Added Files:
serendipity_event_amazonchooser.js
serendipity_event_amazonchooser.php
Log Message:
Amazon Chooser to fetch Info from amazon sites via SOAP and embed it to your entry.
Cool stuff done by Matthew Groeninger. :)
--- NEW FILE: serendipity_event_amazonchooser.php ---
<?php # $Id: serendipity_event_amazonchooser.php,v 0.1 12/21/2004 18:08:24
switch ($serendipity['lang']) {
case 'de':
case 'en':
case 'es':
default:
@define('PLUGIN_EVENT_AMAZONCHOOSER_TITLE', 'Amazon Media Button');
@define('PLUGIN_EVENT_AMAZONCHOOSER_DESC', 'Adds a button to allow Amazon.com search which are insertable into your entry');
@define('PLUGIN_EVENT_AMAZONCHOOSER_MEDIA_BUTTON', 'Amazon Media');
@define('PLUGIN_EVENT_AMAZONCHOOSER_DEV_TOKEN', 'Developer Token');
@define('PLUGIN_EVENT_AMAZONCHOOSER_DEV_TOKEN_DESC', 'The developer token to use.');
@define('PLUGIN_EVENT_AMAZONCHOOSER_ASSOCIATE_ID', 'Amazon Associate ID');
@define('PLUGIN_EVENT_AMAZONCHOOSER_ASSOCIATE__ID_DESC', 'Your Amazon Associate ID');
@define('PLUGIN_EVENT_AMAZONCHOOSER_SERVER', 'Default Server');
@define('PLUGIN_EVENT_AMAZONCHOOSER_SERVER_DESC', 'Amazon server you wish to use for localization');
@define('PLUGIN_EVENT_AMAZONCHOOSER_GERMANY', 'Germany');
@define('PLUGIN_EVENT_AMAZONCHOOSER_JAPAN', 'Japan');
@define('PLUGIN_EVENT_AMAZONCHOOSER_UK', 'United Kingdom');
@define('PLUGIN_EVENT_AMAZONCHOOSER_US', 'United States');
@define('PLUGIN_EVENT_AMAZONCHOOSER_CA', 'Canada');
@define('PLUGIN_EVENT_AMAZONCHOOSER_FR', 'France');
@define('PLUGIN_EVENT_AMAZONCHOOSER_SEARCH', 'Search');
@define('PLUGIN_EVENT_AMAZONCHOOSER_SEARCH_DESC', 'Enter a keywork to search for:');
@define('PLUGIN_EVENT_AMAZONCHOOSER_CLICK', 'Click on the item you are searching for:');
@define('PLUGIN_EVENT_AMAZONCHOOSER_CHOSE', 'You chose ');
break;
}
class serendipity_event_amazonchooser extends serendipity_event
{
var $title = PLUGIN_EVENT_AMAZONCHOOSER_TITLE;
function introspect(&$propbag)
{
global $serendipity;
$propbag->add('name', PLUGIN_EVENT_AMAZONCHOOSER_TITLE);
$propbag->add('description', PLUGIN_EVENT_AMAZONCHOOSER_DESC);
$propbag->add('stackable', false);
$propbag->add('author', 'Matthew Groeninger');
$propbag->add('version', '0.1');
$propbag->add('event_hooks', array(
'backend_entry_toolbar_extended' => true,
'backend_entry_toolbar_body' => true,
'external_plugin' => true,
));
$propbag->add('configuration', array(
'dtoken',
'aaid',
'server'
));
}
function introspect_config_item($name, &$propbag)
{
switch($name) {
case 'dtoken':
$propbag->add('type', 'string');
$propbag->add('name', PLUGIN_EVENT_AMAZONCHOOSER_DEV_TOKEN);
$propbag->add('description', PLUGIN_EVENT_AMAZONCHOOSER_DEV_TOKEN_DESC);
$propbag->add('default', '0DKT9N7FZR2FT96TZEG2');
break;
case 'aaid':
$propbag->add('type', 'string');
$propbag->add('name', PLUGIN_EVENT_AMAZONCHOOSER_ASSOCIATE_ID);
$propbag->add('description', PLUGIN_EVENT_AMAZONCHOOSER_ASSOCIATE__ID_DESC);
break;
case 'server':
$propbag->add('type', 'radio');
$propbag->add('name', PLUGIN_EVENT_AMAZONCHOOSER_SERVER);
$propbag->add('description', PLUGIN_EVENT_AMAZONCHOOSER_SERVER_DESC);
$propbag->add('radio', array(
'value' => array('ca','de','fr', 'jp', 'uk', 'us'),
'desc' => array(PLUGIN_EVENT_AMAZONCHOOSER_CA,PLUGIN_EVENT_AMAZONCHOOSER_GERMANY,PLUGIN_EVENT_AMAZONCHOOSER_FR,PLUGIN_EVENT_AMAZONCHOOSER_JAPAN,PLUGIN_EVENT_AMAZONCHOOSER_UK,PLUGIN_EVENT_AMAZONCHOOSER_US)
));
$propbag->add('radio_per_row', '1');
$propbag->add('default', 'us');
break;
}
return true;
}
function event_hook($event, &$bag, &$eventData) {
global $serendipity;
$hooks = &$bag->get('event_hooks');
if (isset($hooks[$event])) {
switch($event) {
case 'backend_entry_toolbar_extended':
$txtarea = 'extended';
case 'backend_entry_toolbar_body':
if (!isset($txtarea)) {
$txtarea = 'body';
}
$link = ($serendipity['rewrite'] == 'none' ? $serendipity['indexFile'] . '?/' : '') . 'plugin/amazonch' . ($serendipity['rewrite'] != 'none' ? '?' : '&') . 'txtarea=' . $txtarea;
?>
<input type="button" name="insImage" value="<?php echo PLUGIN_EVENT_AMAZONCHOOSER_MEDIA_BUTTON; ?>" style="" onclick="window.open('<?php echo $link; ?>', 'ImageSel', 'width=800,height=600,toolbar=no,scrollbars=1,scrollbars,resize=1,resizable=1');" />
<?php
return true;
break;
case 'external_plugin':
$uri_parts = explode('?', str_replace('&', '&', $eventData));
$parts = explode('&', $uri_parts[0]);
$uri_part = $parts[0];
$parts = array_pop($parts);
if (count($parts) > 1) {
foreach($parts as $key => $value) {
$val = explode('=', $value);
$_REQUEST[$val[0]] = $val[1];
}
} else {
$val = explode('=', $value);
$_REQUEST[$val[0]] = $val[1];
}
switch($uri_part) {
case 'amazonch-js':
header('Content-Type: text/javascript');
echo file_get_contents(dirname(__FILE__) . '/serendipity_event_amazonchooser.js');
break;
case 'amazonch':
session_start();
include('serendipity_config.inc.php');
if (IN_serendipity !== true) {
die ("Don't hack!");
}
require_once("nusoap/nusoap.php");
$mode= array(
'baby',
'books',
'classical',
'dvd',
'electronics',
'garden',
'kitchen',
'magazines',
'music',
'pc-hardware',
'photo',
'software',
'toys',
'universal',
'vhs',
'videogames'
);
$mode_names = array (
'baby' => 'Baby',
'books' => 'Books',
'classical' => 'Classical Music',
'dvd' => 'DVD',
'electronics' => 'Electronics',
'garden' => 'Outdoor Living',
'kitchen' => 'Kitchen & Housewares',
'magazines' => 'Magazines',
'music' => 'Popular Music',
'pc-hardware' => 'Computers',
'photo' => 'Camera & Photo',
'software' => 'Software',
'toys' => 'Toys & Games',
'universal' => 'Tools & Hardware',
'vhs' => 'Video',
'videogames' => 'Computer & Video Games'
);
$country= array (
'us',
'de',
'jp',
'uk',
'fr',
'ca'
);
header('Content-Type: text/html; charset=' . LANG_CHARSET);
if ($_SESSION['serendipityAuthedUser'] !== true) {
die(HAVE_TO_BE_LOGGED_ON);
}
?>
<html>
<head>
<title><?php echo PLUGIN_EVENT_AMAZONCHOOSER_MEDIA_BUTTON; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo LANG_CHARSET; ?>" />
<link rel="stylesheet" type="text/css" href="<?php echo serendipity_getTemplateFile('admin/style.css') ?>" />
<script type="text/javascript" src="<?php echo $serendipity['baseURL'] . ($serendipity['rewrite'] == 'none' ? $serendipity['indexFile'] . '?/' : ''); ?>plugin/amazonch-js"></script>
</head>
<body id="serendipity_admin_page">
<div id="serendipityAdminMainpane">
<b><?php echo PLUGIN_EVENT_AMAZONCHOOSER_MEDIA_BUTTON;?></b>
<div class="serendipityAdminContent">
<?php
switch ($_REQUEST['step']) {
case '1':
$soapclient = new soapclient("http://soap.amazon.com/schemas2/AmazonWebServices.wsdl", true);
// uncomment the next line to see debug messages
$soapclient->debug_flag = 1;
// create a proxy so that WSDL methods can be accessed directly
$proxy = $soapclient->getProxy();
if (in_array($_REQUEST['mode'],$mode)) {
$params = array(
'keyword' => trim($_REQUEST[keyword]),
'page' => '1',
'mode' => trim($_REQUEST['mode']),
'tag' => trim($this->get_config('aaid')),
'type' => 'lite',
'devtag' => trim($this->get_config('dtoken')),
'locale' => trim($this->get_config('server'))
);
}
$result = $proxy->KeywordSearchRequest($params);
if (!isset($result['faultcode'])) {
$total = $result['TotalResults'];
$items = $result['Details'];
echo PLUGIN_EVENT_AMAZONCHOOSER_CLICK.'<br />';
echo '<input type="button" value="'.BACK.'" onclick="history.go(-1);" />';
echo '<table>';
foreach ($items as $i) {
echo '<tr>';
echo '<td align="center" valign="top" rowspan="1">';
$link = $serendipity['baseURL'] . ($serendipity['rewrite'] == 'none' ? $serendipity['indexFile'] . '?/' : '') . 'plugin/amazonch' . ($serendipity['rewrite'] != 'none' ? '?' : '&') . 'txtarea=' . $_REQUEST['txtarea'] . '&step=2&asin=' . $i['Asin'];
echo '<a href="'.$link.'"><img border="0" src='.$i['ImageUrlMedium'].'></a></td>';
echo '<td valign="top"><a href="'.$link.'"><font size="-1"><b>'.$i['ProductName'].'</b></font></a><br />';
echo '<font size="-2">';
switch ($_REQUEST['mode']) {
case 'books':
echo implode(', ',$i['Authors']);
break;
case 'dvd':
if (isset($i['Starring'])) {
echo implode(', ',$i['Starring']);
}
break;
case 'music':
if (isset($i['Artists'])) {
echo implode(', ',$i['Artists']);
}
break;
case 'videogames':
echo $i['Distributor'];
break;
}
echo '<br />'. $i['Url'];
echo '</font>';
echo '</td>';
echo '</tr>';
}
echo '</table>';
} else {
echo '<br /><br /><font size="-1">'.trim($result['detail']).'.';
echo '</font><br />';
}
echo '<input type="button" value="'.BACK.'" onclick="history.go(-1);" />';
break;
case '2':
echo '<script type="text/javascript" src="' . $serendipity['baseURL'] . ($serendipity['rewrite'] == 'none' ? $serendipity['indexFile'] . '?/' : '') . 'plugin/amazon-js"></script>';
$soapclient = new soapclient("http://soap.amazon.com/schemas2/AmazonWebServices.wsdl", true);
$soapclient->debug_flag = 1;
$proxy = $soapclient->getProxy();
$params = array(
'asin' => trim($_REQUEST['asin']),
'tag' => trim($this->get_config('aaid')),
'type' => 'heavy',
'devtag' => trim($this->get_config('dtoken')),
'locale' => trim($this->get_config('server'))
);
$result = $proxy->ASINSearchRequest($params);
if (!isset($result['faultcode'])) {
$item = $result['Details'];
$item = $item[0];
?>
<h3><?php printf(PLUGIN_EVENT_AMAZONCHOOSER_CHOSE, $item['ProductName']); ?></h3>
<p>
<table>
<tr>
<td align="center" valign="top" rowspan="1">
<img border="0" src=<?php echo $item['ImageUrlMedium'];?>></a></td>
<td valign="top" ><font size="-1"><b><?php echo $item['ProductName'];?></b> (<?php echo $item['Catalog'];?>)</font><br />
<font size="-2">
<?php
if (isset($item['Authors'])) {
$extra = implode(", ",$item['Authors']);
}
if (isset($item['Starring'])) {
$extra = implode(", ",$item['Starring']);
}
if (isset($item['Artists'])) {
$extra = implode(", ",$item['Artists']);
}
if (isset($item['Distributor'])) {
$extra .= $item['Distributor'];
}
echo $extra;
?>
<br />
Released: <?php echo $item['ReleaseDate'];?><br />
<?php echo $item['Url']; ?>
</font>
</td>
</tr>
</table>
<form action="#" method="GET" name="serendipity[selForm]" onSubmit="serendipity_amazonSelector_done(); return false;"/>
<input type="hidden" name="ImageUrl" value="<?php echo $item['ImageUrlMedium']; ?>" />
<input type="hidden" name="Prodname" value="<?php echo $item['ProductName']; ?>" />
<input type="hidden" name="Catalog" value="<?php echo $item['Catalog']; ?>" />
<input type="hidden" name="Extra" value="<?php echo $extra; ?>" />
<input type="hidden" name="Releasedate" value="<?php echo $item['ReleaseDate']; ?>" />
<input type="hidden" name="Url" value="<?php echo $item['Url']; ?>" />
<div>
<input type="button" value="<?php echo BACK;?>" onclick="history.go(-1);" />
<input type="button" value="<?php echo DONE; ?>" onclick="serendipity_amazonSelector_done('<?php echo $_REQUEST['txtarea']?>')" />
</div>
</form>
<?php
} else {
echo '<br /><br /><font size="-1">'.trim($result['detail']).'.';
echo '</font><br />';
echo '<input type="button" value="'.BACK.'" onclick="history.go(-1);" />';
}
break;
default:
$link = $serendipity['baseURL'] . ($serendipity['rewrite'] == 'none' ? $serendipity['indexFile'] . '?/' : '') . 'plugin/amazonch' . ($serendipity['rewrite'] != 'none' ? '?' : '&');
echo '<br />';
echo PLUGIN_EVENT_AMAZONCHOOSER_SEARCH_DESC;
echo '<div>';
echo ' <form name="serendipity[selForm]" onSubmit="serendipity_amazonSelector_next(); return false;"/>';
echo ' <input type="hidden" name="step" value="1" />';
echo ' <input type="hidden" name="url" value="'.$link.'" />';
echo ' <input type="hidden" name="txtarea" value="'.$_REQUEST['txtarea'].'" />';
echo ' <select name="mode">';
foreach($mode as $type) {
echo " <option value=\"".$type."\">".$mode_names[$type]."\n";
}
echo ' </select> <br />';
echo ' <input type="text" name="keyword" /> <br />';
echo ' <input type="button" value="'. SEARCH .'" onclick="serendipity_amazonSelector_next()" />';
echo ' </form>';
echo '</div>';
break;
}
echo '</div>';
echo '</body>';
echo '</html>';
}
default:
return false;
break;
}
} else {
return false;
}
}
function generate_content(&$title) {
$title = PLUGIN_EVENT_AMAZONCHOOSER_TITLE;
}
}
/* vim: set sts=4 ts=4 expandtab : */
?>
--- NEW FILE: serendipity_event_amazonchooser.js ---
function serendipity_amazonSelector_done(textarea)
{
var f = document.forms['serendipity[selForm]'].elements;
ImageUrl = f['ImageUrl'].value;
url = f['Url'].value;
prodname = f['Prodname'].value;
catalog = f['Catalog'].value;
extra = f['Extra'].value;
released = f['Releasedate'].value;
img = "<img border='0' hspace='0' src='" + ImageUrl + "' alt='" + prodname + "' />";
block = '<table>'
+ '<tr>'
+ '<td align="center" valign="top" rowspan="1">'
+ '<a href='
+ url
+ '>'
+ img
+ '</a>'
+ '<td valign="top"><font size="-1"><b>'
+ '<a href='
+ url
+ '>'
+ prodname
+ '</a>'
+ '</b> ('+ catalog +')</font><br />'
+ extra
+ '<br />'
+ 'Released: '
+ released
+ '<br />'
+ '</td>'
+ '</tr>'
+ '</table>'
if (self.opener.editorref) {
self.opener.editorref.surroundHTML(block, '');
} else {
self.opener.serendipity_imageSelector_addToBody(block, textarea);
}
self.close();
}
function serendipity_amazonSelector_next()
{
var f = document.forms['serendipity[selForm]'].elements;
url = unescape(f['url'].value);
step = f['step'].value;
txtarea = f['txtarea'].value;
mode = f['mode'].value;
keyword = f['keyword'].value;
jsgoto = url + '&step=' + step + '&mode=' + mode + '&keyword=' + keyword + '&txtarea=' + txtarea;
self.location=jsgoto;
}
|