-<?php
-// vim: tabstop=2:shiftwidth=2
-
- /* ==========================================================================================
- * Trackback 2.0 for Nucleus CMS
- * ==========================================================================================
- * This program is free software and open source software; you can redistribute
- * it and/or modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 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 General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit
- * http://www.gnu.org/licenses/gpl.html
- * ==========================================================================================
- */
-
-define('NP_TRACKBACK_LINKCHECK_STRICT', 1);
-define('NP_TRACKBACK_USE_XML_PARSER', 2);
-
- class NP_TrackBack_XMLParser {
- function NP_TrackBack_XMLParser(){
- $this->isError = false;
- $this->inTarget = false;
- }
-
- function parse($data){
- $rx = '/(<'.'?xml.*encoding=[\'"])(.*?)([\'"].*?'.'>)/m';
- if (preg_match($rx, $data, $m)) {
- $encoding = strtoupper($m[2]);
- } else {
- $input_encoding = "UTF-8,EUC-JP,SJIS,ISO-2022-JP,ISO-8859-1";
- $encoding = mb_detect_encoding($data, $input_encoding);
- }
-
- if($encoding == "UTF-8" || $encoding == "ISO-8859-1") {
- // noting
- } else {
- $data = @mb_convert_encoding($data, "UTF-8", $encoding);
- $data = str_replace ( $m[0], $m[1].'UTF-8'.$m[3], $data);
- $encoding = 'UTF-8';
- }
-
- $this->parser = xml_parser_create($encoding);
- xml_set_object($this->parser, $this);
- xml_set_element_handler($this->parser, "_open", "_close");
- xml_set_character_data_handler($this->parser, "_cdata");
- xml_parser_set_option($this->parser, XML_OPTION_TARGET_ENCODING, 'UTF-8').
-
- $this->words = array();
- xml_parse($this->parser, $data);
- $errcode = xml_get_error_code($this->parser);
- if ( $errcode != XML_ERROR_NONE ) {
- $this->isError = true;
- $this->message = 'XML Parse Error: ' . xml_error_string($errcode) . ' in '. xml_get_current_line_number($this->parser);
- }
- return $this->message;
- }
-
- function free(){
- xml_parser_free($this->parser);
- }
-
- function _open($parser, $name, $attribute){
- switch( $name ){
- case 'MESSAGE':
- $this->inTarget = 'MESSAGE';
- break;
- case 'ERROR':
- $this->inTarget = 'ERROR';
- break;
- }
- }
-
- function _close($parser, $name){
- if( $name == $this->inTarget ) $this->inTarget = null;
- }
-
- function _cdata($parser, $data){
- switch( $this->inTarget ){
- case 'MESSAGE':
- $this->message = trim($data);
- break;
- case 'ERROR':
- $this->isError = ($data ? true : false);
- break;
- }
- }
- }
-
- class NP_TrackBack extends NucleusPlugin {
- var $useCurl = 1; // use curl? 2:precheck+read by curl, 1: read by curl 0: fread
-
-//modify start+++++++++
- function _createItemLink($itemid, $b){
- global $CONF, $manager;
-
- $itemLink = createItemLink($itemid,'');
- if( strpos($itemLink, 'http') === 0 ){
- return $itemLink;
- }
-
- $blogurl = $b->getURL();
- if (!$blogurl) {
- $b =& $manager->getBlog($CONF['DefaultBlog']);
- $blogurl = $b->getURL();
- if (!$blogurl) {
- $blogurl = $CONF['IndexURL'];
- }
- }
-
- if(substr($blogurl, -1) == '/') $blogurl = substr($blogurl, 0, -1);
- $usePathInfo = ($CONF['URLMode'] == 'pathinfo');
- $itemUrlOrg = $CONF['ItemURL'];
- if( ! ($usePathInfo || substr($blogurl, -4) == '.php') ) $blogurl .= '/index.php';
- $CONF['ItemURL'] = $blogurl;
-
- $itemLink = createItemLink($itemid,'');
- $CONF['ItemURL'] = $itemUrlOrg;
-
- return $itemLink;
- }
-//modify end+++++++++
-
- /**************************************************************************************
- * SKIN VARS, TEMPLATE VARS AND ACTIONS
- */
-
- /*
- * TrackBack data can be inserted using skinvars (or templatevars)
- */
- function doSkinVar($skinType, $what = '', $tb_id = '', $amount = 'limit-1') {
-
- global $itemid, $manager, $CONF;
-
-//modify start+++++++++
- if(preg_match('/limit/i', $tb_id)){
- $amount = $tb_id;
- $tb_id = '';
- }
- $amount = intval(str_replace('limit', '', $amount));
-//modify end+++++++++
-
- if ($tb_id == '') $tb_id = intval($itemid);
-
-//mod by cles
- $isAcceptPing = $this->isAcceptTrackBack($tb_id);
-
- //if( $skinType == 'template' && (! $isAcceptPing ) ){
- // return;
- //}
-//mod by cles end
- switch ($what) {
-
- // Insert Auto-discovery RDF code
- case 'tbcode':
- case 'code':
-//mod by cles
-// if($skinType == 'item')
-
- $spamcheck = array (
- 'type' => 'tbcode',
- 'id' => -1,
- 'title' => '',
- 'excerpt' => '',
- 'blogname' => '',
- 'url' => '',
- 'return' => true,
- 'live' => true,
-
- /* Backwards compatibility with SpamCheck API 1*/
- 'data' => '',
- 'ipblock' => true,
- );
- global $manager;
- //$manager->notify('SpamCheck', array ('spamcheck' => & $spamcheck));
- $spam = false;
- if (isset($spamcheck['result']) && $spamcheck['result'] == true){
- $spam = true;
- }
-
- if( ($skinType == 'item') && (!$spam) && $isAcceptPing )
-//mod by cles end
- $this->insertCode($tb_id);
- break;
-
- // Insert TrackBack URL
- case 'tburl':
- case 'url':
-//mod by cles
-// echo $this->getTrackBackUrl($tb_id);
- if($isAcceptPing)
- echo $this->getTrackBackUrl($tb_id);
- else
- echo 'Sorry, no trackback pings are accepted.';
-//mod by cles end
- break;
-
- // Insert manual ping URL
- case 'form':
- case 'manualpingformlink':
- echo $this->getManualPingUrl($tb_id);
- break;
-
- case 'sendpinglink':
- echo $manager->addTicketToUrl($CONF['PluginURL'] . 'trackback/index.php?action=ping&id=' . intval($tb_id));
- break;
-
- // Insert TrackBack count
- case 'count':
- $count = $this->getTrackBackCount($tb_id);
- switch ($count) {
- case 0: echo TEMPLATE::fill($this->getOption('tplTbNone'), array('number' => $count)); break;
- case 1: echo TEMPLATE::fill($this->getOption('tplTbOne'), array('number' => $count)); break;
- default: echo TEMPLATE::fill($this->getOption('tplTbMore'), array('number' => $count)); break;
- }
- break;
-
- // Shows the TrackBack list
- case 'list':
- case '':
-//modify start+++++++++
-// $this->showList($tb_id);
- $this->showList($tb_id, $amount);
-//modify end+++++++++
- break;
-//mod by cles
- // show requred URL
- case 'required':
- echo $this->getRequiredURL($tb_id);
- break;
-
- // shows the Local list
- case 'locallist':
- $this->showLocalList($tb_id);
- break;
-//mod by cles end
-
- default:
- return;
- }
- }
-
- /*
- * When used in templates, the tb_id will be determined by the itemid there
- */
- function doTemplateVar(&$item, $what = '') {
- $this->doSkinVar('template', $what, $item->itemid);
- }
-
- function doTemplateCommentsVar(&$item, &$comment, $what = ''){
- $this->doSkinVar('templatecomments', $what, $item->itemid);
- }
-
- /*
- * A trackback ping is to be received on the URL
- * http://yourdomain.com/item/1234.trackback
- * Extra variables to be passed along are url, title, excerpt, blog_name
- */
- function event_InitSkinParse(&$data) {
- global $CONF, $itemid;
- $format = requestVar('format');
-
- if ($CONF['URLMode'] == 'pathinfo') {
- if (preg_match('/(\/|\.)(trackback)(\/|$)/', serverVar('PATH_INFO'), $matches)) {
- $format = $matches[2];
- }
- }
-
- if ($format == 'trackback' && $data['type'] == 'item')
- {
- $errorMsg = $this->handlePing(intval($itemid));
-
- if ($errorMsg != '')
- $this->xmlResponse($errorMsg);
- else
- $this->xmlResponse();
-
- exit;
- }
- }
-
- /*
- * A trackback ping is to be received on the URL
- * http://yourdomain.com/action.php?action=plugin&name=TrackBack&tb_id=1234
- * Extra variables to be passed along are url, title, excerpt, blog_name
- */
- function doAction($type)
- {
- global $CONF,$manager;
- $aActionsNotToCheck = array(
- '',
- 'ping',
- 'form',
- 'redirect',
- 'left',
- );
- if (!in_array($type, $aActionsNotToCheck)) {
- if (!$manager->checkTicket()) return _ERROR_BADTICKET;
- }
-
- switch ($type) {
-
- // When no action type is given, assume it's a ping
- case '':
- $errorMsg = $this->handlePing();
- $this->xmlResponse($errorMsg);
- break;
-
- // Manual ping
- case 'ping':
- $errorMsg = $this->handlePing();
- if ($errorMsg != '')
- $this->showManualPingError(intRequestVar('tb_id'), $errorMsg);
- else
- $this->showManualPingSuccess(intRequestVar('tb_id'));
- break;
-
- // Show manual ping form
- case 'form':
-//mod by cles
-// $this->showManualPingForm(intRequestVar('tb_id'));
- $tb_id = intRequestVar('tb_id');
- $isAcceptPing = $this->isAcceptTrackBack($tb_id);
-
- if( $isAcceptPing )
- $this->showManualPingForm($tb_id);
- else
- echo 'Sorry, no trackback pings are accepted.';
-//mod by cles end
- break;
-
- // Detect trackback
- case 'detect':
- list($url, $title) =
- $this->getURIfromLink(html_entity_decode(requestVar('tb_link')));
-
- $url = addslashes($url);
- $url = $this->_utf8_to_javascript($url);
-
- $title = addslashes($title);
- $title = $this->_utf8_to_javascript($title);
-
- echo "tbDone('" . requestVar('tb_link') . "', '" . $url . "', '" . $title . "');";
-
- break;
-//mod by cles
- // redirect
- case 'redirect':
- return $this->redirect(intRequestVar('tb_id'), requestVar('urlHash'));
- break;
-//mod by cles end
- case 'left':
- echo $this->showLeftList(intRequestVar('tb_id'), intRequestVar('amount'));
- break;
-
- // delete a trackback(local)
- case 'deletelc':
- $err = $this->deleteLocal(intRequestVar('tb_id'), intRequestVar('from_id'));
- if( $err )
- return $err;
- header('Location: ' . serverVar('HTTP_REFERER'));
- break;
- }
-
- exit;
- }
-
- function doIf($key = '', $value = '')
- {
- global $itemid;
- //echo "key: $key, value: $value";
-
- switch( strtolower($key) ){
- case '':
- case 'accept':
- if( $value == '' ) $value = 'yes';
- $value = ( $value == 'no' || (! $value) ) ? false : true;
-
- $ret = false;
- if( $itemid )
- $ret = $this->isAcceptTrackBack($itemid);
- else
- $ret = $this->isAcceptTrackBack();
- return ( $value == false ) ? (! $ret) : $ret;
-
- case 'required':
- if( $value == '' ) $value = 'yes';
- $value = ( $value == 'no' || (! $value) ) ? false : true;
-
- $ret = false;
- if( $itemid )
- $ret = $this->isEnableLinkCheck($itemid);
-
- return ( $value == false ) ? (! $ret) : $ret;
-
- default:
- return false;
- }
- }
-
- /**************************************************************************************
- * OUTPUT
- */
-
- /*
- * Show a list of left trackbacks for this ID
- */
- function showLeftList($tb_id, $offset = 0, $amount = 99999999) {
- global $manager, $blog, $CONF;
-
- $out = array();
- $query = '
- SELECT
- url,
- md5(url) as urlHash,
- blog_name,
- excerpt,
- title,
- UNIX_TIMESTAMP(timestamp) AS timestamp
- FROM
- '.sql_table('plugin_tb').'
- WHERE
- tb_id = '.intval($tb_id).' AND
- block = 0
- ORDER BY
- timestamp DESC
- ';
- if($offset)
- $query .= ' LIMIT '.intval($offset).', ' .intval($amount);
- $res = sql_query($query);
- while ($row = mysql_fetch_array($res))
- {
-
- $row['blog_name'] = htmlspecialchars($row['blog_name'], ENT_QUOTES);
- $row['title'] = htmlspecialchars($row['title'], ENT_QUOTES);
- $row['excerpt'] = htmlspecialchars($row['excerpt'], ENT_QUOTES);
- if (_CHARSET != 'UTF-8') {
-//modify start+++++++++
- $row['blog_name'] = $this->_restore_to_utf8($row['blog_name']);
- $row['title'] = $this->_restore_to_utf8($row['title']);
- $row['excerpt'] = $this->_restore_to_utf8($row['excerpt']);
-//modify end+++++++++
- $row['blog_name'] = $this->_utf8_to_entities($row['blog_name']);
- $row['title'] = $this->_utf8_to_entities($row['title']);
- $row['excerpt'] = $this->_utf8_to_entities($row['excerpt']);
- }
- $iVars = array(
- 'action' => $this->getTrackBackUrl($tb_id),
- 'form' => $this->getManualPingUrl($tb_id),
- 'name' => $row['blog_name'],
- 'title' => $row['title'],
- 'excerpt' => $this->_cut_string($row['excerpt'], 400),
- 'url' => htmlspecialchars($row['url'], ENT_QUOTES),
- 'date' => htmlspecialchars(strftime($this->getOption('dateFormat'), $row['timestamp']), ENT_QUOTES)
- );
-
-//mod by cles
- if( $this->getOption('HideUrl') == 'yes' )
- $iVars['url'] = $CONF['ActionURL'] . '?action=plugin&name=TrackBack&type=redirect&tb_id=' . $tb_id . '&urlHash=' . $row['urlHash'];
- else
- $iVars['url'] = $row['url'];
-//mod by cles end
-
- $out[] = TEMPLATE::fill($this->getOption('tplItem'), $iVars);
- }
- mysql_free_result($res);
-
- return @join("\n",$out);
- }
-
- /*
- * Show a list of all trackbacks for this ID
- */
- function showList($tb_id, $amount = 0) {
- $tb_id = intval($tb_id);
- global $manager, $blog, $CONF, $member;
-//mod by cles
- $enableHideurl = true;
- // for TB LinkLookup
- if(
- strstr(serverVar('HTTP_USER_AGENT'),'Hatena Diary Track Forward Agent')
- || strstr(serverVar('HTTP_USER_AGENT'),'NP_TrackBack')
- || strstr(serverVar('HTTP_USER_AGENT'),'TBPingLinkLookup')
- || strstr(serverVar('HTTP_USER_AGENT'),'MT::Plugin::BanNoReferTb')
- || strstr(serverVar('HTTP_USER_AGENT'),'livedoorBlog')
- ){
- $enableHideurl = false;
- $amount = '-1';
- }
-//mod by cles end
-
-/*
- $res = sql_query('
- SELECT
- url,
- md5(url) as urlHash,
- blog_name,
- excerpt,
- title,
- UNIX_TIMESTAMP(timestamp) AS timestamp
- FROM
- '.sql_table('plugin_tb').'
- WHERE
- tb_id = '.$tb_id .' AND
- block = 0
- ORDER BY
- timestamp ASC
- ');
-*/
- $query = '
- SELECT
- url,
- md5(url) as urlHash,
- blog_name,
- excerpt,
- title,
- UNIX_TIMESTAMP(timestamp) AS timestamp
- FROM
- '.sql_table('plugin_tb').'
- WHERE
- tb_id = '.intval($tb_id) .' AND
- block = 0
- ORDER BY
- timestamp DESC
- ';
- if( $amount == '-1' )
- $query .= ' LIMIT 9999999';
- elseif( $amount )
- $query .= ' LIMIT '.intval($amount);
-
- if( $amount != 0)
- $res = sql_query($query);
-
- $gVars = array(
- 'action' => $this->getTrackBackUrl(intval($tb_id)),
- 'form' => $this->getManualPingUrl(intval($tb_id)),
- 'required' => $this->getRequiredURL(intval($tb_id)),
- );
-
- if ( $member->isLoggedIn() ){
- $adminurl = htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'] . 'trackback/index.php?action=list&id=' . intval($tb_id)), ENT_QUOTES);
- $pingformurl = htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'] . 'trackback/index.php?action=ping&id=' . intval($tb_id)), ENT_QUOTES);
- $gVars['admin'] = '<a href="' . $adminurl . '" target="_blank">[admin]</a>';
- $gVars['pingform'] = '<a href="' . $pingformurl . '" target="_blank">[pingform]</a>';
- }
-
- echo TEMPLATE::fill($this->getOption('tplHeader'), $gVars);
-
-
- while ($amount != 0 && $row = mysql_fetch_array($res))
- {
-
- $row['blog_name'] = htmlspecialchars($row['blog_name'], ENT_QUOTES);
- $row['title'] = htmlspecialchars($row['title'], ENT_QUOTES);
- $row['excerpt'] = htmlspecialchars($row['excerpt'], ENT_QUOTES);
-
-/*
-*/
- if (_CHARSET != 'UTF-8') {
-//modify start+++++++++
-/*
- $row['blog_name'] = $this->_utf8_to_entities($row['blog_name']);
- $row['title'] = $this->_utf8_to_entities($row['title']);
- $row['excerpt'] = $this->_utf8_to_entities($row['excerpt']);
-*/
- $row['blog_name'] = $this->_restore_to_utf8($row['blog_name']);
- $row['title'] = $this->_restore_to_utf8($row['title']);
- $row['excerpt'] = $this->_restore_to_utf8($row['excerpt']);
-
- $row['blog_name'] = mb_convert_encoding($row['blog_name'], _CHARSET, 'UTF-8');
- $row['title'] = mb_convert_encoding($row['title'], _CHARSET, 'UTF-8');
- $row['excerpt'] = mb_convert_encoding($row['excerpt'], _CHARSET, 'UTF-8');
-//modify end+++++++++
- }
-
-//modify start+++++++++
-/*
- $iVars = array(
- 'action' => $this->getTrackBackUrl($tb_id),
- 'form' => $this->getManualPingUrl($tb_id),
- 'name' => $row['blog_name'],
- 'title' => $row['title'],
- 'excerpt' => $row['excerpt'],
- 'url' => htmlspecialchars($row['url'], ENT_QUOTES),
- 'date' => htmlspecialchars(strftime($this->getOption('dateFormat'), $row['timestamp'] + ($blog->getTimeOffset() * 3600)), ENT_QUOTES)
- );
-*/
- $iVars = array(
- 'action' => $this->getTrackBackUrl($tb_id),
- 'form' => $this->getManualPingUrl($tb_id),
- 'name' => htmlspecialchars($row['blog_name'], ENT_QUOTES),
- 'title' => htmlspecialchars($row['title'], ENT_QUOTES),
- 'excerpt' => htmlspecialchars($this->_cut_string($row['excerpt'], 400), ENT_QUOTES),
- 'url' => htmlspecialchars($row['url'], ENT_QUOTES),
- 'date' => htmlspecialchars(strftime($this->getOption('dateFormat'), $row['timestamp']), ENT_QUOTES)
- );
-
-//mod by cles
- if( $enableHideurl && $this->getOption('HideUrl') == 'yes' )
- $iVars['url'] = $CONF['ActionURL'] . '?action=plugin&name=TrackBack&type=redirect&tb_id=' . intval($tb_id) . '&urlHash=' . $row['urlHash'];
- else
- $iVars['url'] = $row['url'];
-//mod by cles end
-
-//modify end+++++++++
- echo TEMPLATE::fill($this->getOption('tplItem'), $iVars);
-
- }
-
-//modify start+++++++++
- $q = '
- SELECT
- count(*)
- FROM
- '.sql_table('plugin_tb').'
- WHERE
- tb_id = '.intval($tb_id) .' AND
- block = 0
- ORDER BY
- timestamp DESC
- ';
- $result = sql_query($q);
- $total = mysql_result($result,0,0);
-
- if($amount != -1 && $total > $amount){
- $leftcount = $total - $amount;
-
- echo '<script type="text/javascript" src="' . $this->getAdminURL() . 'detectlist.php?tb_id='.intval($tb_id).'&amount='.intval($amount).'"></script>';
-
-?>
-
-<a name="restoftrackback" id="restoftrackback"></a>
-<div id="tbshownavi"><a href="#restoftrackback" onclick="resttbStart(); return false;" id="tbshow">Show left <?php echo $leftcount;?> Trackbacks</a></div>
-<div id="tbhidenavi" style="display: none;"><a href="#restoftrackback" onclick="hideresttb(); return false;">Hide <?php echo $leftcount;?> Trackbacks</a></div>
-<div id="resttb"></div>
-
-<?php
- }
-//modify end+++++++++
-
- if (mysql_num_rows($res) == 0)
- {
- echo TEMPLATE::fill($this->getOption('tplEmpty'), $gVars);
- }
- mysql_free_result($res);
-
- echo TEMPLATE::fill($this->getOption('tplFooter'), $gVars);
-
- }
-
- /*
- * Returns the TrackBack count for a TrackBack item
- */
- function getTrackBackCount($tb_id) {
- return quickQuery('SELECT COUNT(*) as result FROM ' . sql_table('plugin_tb') . ' WHERE tb_id='.intval($tb_id).' AND block = 0');
- }
-
- /**
- * Returns the manual ping URL
- */
- function getManualPingUrl($itemid) {
- global $CONF;
- return $CONF['ActionURL'] . '?action=plugin&name=TrackBack&type=form&tb_id='.$itemid;
- }
-
- /**
- * Show the manual ping form
- */
- function showManualPingError($itemid, $status = '') {
- global $CONF;
-
- $form = true; $error = true; $success = false;
- sendContentType('text/html', 'admin-trackback', _CHARSET);
-//modify start+++++++++
-// include ($this->getDirectory() . '/templates/form.html');
- require_once($this->getDirectory() . '/template.php');
- $mTemplate = new Trackback_Template(null, $this->getDirectory());
- $mTemplate->set ('CONF', $CONF);
- $mTemplate->set ('itemid', $itemid);
- $mTemplate->set ('form', $form);
- $mTemplate->set ('error', $error);
- $mTemplate->set ('success', $success);
- $mTemplate->set ('status', $status);
- $mTemplate->template('templates/form.html');
- echo $mTemplate->fetch();
-//modify end+++++++++
- }
-
- function showManualPingSuccess($itemid, $status = '') {
- global $CONF;
-
- $form = false; $error = false; $success = true;
- sendContentType('text/html', 'admin-trackback', _CHARSET);
-//modify start+++++++++
- //include ($this->getDirectory() . '/templates/form.html');
- require_once($this->getDirectory() . '/template.php');
- $mTemplate = new Trackback_Template(null, $this->getDirectory());
- $mTemplate->set ('CONF', $CONF);
- $mTemplate->set ('itemid', $itemid);
- $mTemplate->set ('form', $form);
- $mTemplate->set ('error', $error);
- $mTemplate->set ('success', $success);
- $mTemplate->set ('status', $status);
- $mTemplate->template('templates/form.html');
- echo $mTemplate->fetch();
-//modify end+++++++++
- }
-
- function showManualPingForm($itemid, $text = '') {
- global $CONF;
-
- $form = true; $error = false; $success = false;
-
- // Check if we are allowed to accept pings
- if ( !$this->isAcceptTrackBack($itemid) ) {
- $text = 'Sorry, no trackback pings are accepted';
- $form = false; $error = true;
- }
-
- sendContentType('text/html', 'admin-trackback', _CHARSET);
-//modify start+++++++++
- //include ($this->getDirectory() . '/templates/form.html');
- require_once($this->getDirectory() . '/template.php');
- $mTemplate = new Trackback_Template(null, $this->getDirectory());
- $mTemplate->set ('CONF', $CONF);
- $mTemplate->set ('itemid', $itemid);
- $mTemplate->set ('form', $form);
- $mTemplate->set ('error', $error);
- $mTemplate->set ('success', $success);
- $mTemplate->set ('status', $status);
- $mTemplate->template('templates/form.html');
- echo $mTemplate->fetch();
-//modify end+++++++++
- }
-
- /**
- * Returns the trackback URL
- */
- function getTrackBackUrl($itemid) {
- global $CONF, $manager;
- return $CONF['ActionURL'] . '?action=plugin&name=TrackBack&tb_id='.$itemid;
- }
-
- /*
- * Insert RDF code for item
- */
- function insertCode($itemid) {
- $itemid = intval($itemid);
- global $manager, $CONF;
-
- $item = & $manager->getItem($itemid, 0, 0);
- $blog = & $manager->getBlog(getBlogIDFromItemID($item['itemid']));
-
-/*
- $CONF['ItemURL'] = preg_replace('/\/$/', '', $blog->getURL());
- $uri = createItemLink($item['itemid'],'');
-*/
- $uri = $this->_createItemLink($item['itemid'],$blog);
-
- $title = strip_tags($item['title']);
- $desc = strip_tags($item['body']);
- $desc = $this->_cut_string($desc, 200);
- $desc = htmlspecialchars($desc, ENT_QUOTES);
-
- ?>
+<?php\r
+// vim: tabstop=2:shiftwidth=2\r
+\r
+ /* ==========================================================================================\r
+ * Trackback 2.0 for Nucleus CMS \r
+ * ==========================================================================================\r
+ * This program is free software and open source software; you can redistribute\r
+ * it and/or modify it under the terms of the GNU General Public License as\r
+ * published by the Free Software Foundation; either version 2 of the License,\r
+ * or (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along\r
+ * with this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit\r
+ * http://www.gnu.org/licenses/gpl.html\r
+ * ==========================================================================================\r
+ */\r
+\r
+define('NP_TRACKBACK_LINKCHECK_STRICT', 1);\r
+define('NP_TRACKBACK_USE_XML_PARSER', 1);\r
+define('NP_TRACKBACK_ENCODING_DETECT_ORDER', 'ASCII,ISO-2022-JP,UTF-8,EUC-JP,SJIS');\r
+\r
+ class NP_TrackBack_XMLParser {\r
+ function NP_TrackBack_XMLParser(){\r
+ $this->isError = false;\r
+ $this->inTarget = false;\r
+ }\r
+ \r
+ function parse($data){\r
+ $rx = '/(<'.'?xml.*encoding=[\'"])(.*?)([\'"].*?'.'>)/m';\r
+ if (preg_match($rx, $data, $m)) {\r
+ $encoding = strtoupper($m[2]);\r
+ } else {\r
+ $encoding = mb_detect_encoding($data, NP_TRACKBACK_ENCODING_DETECT_ORDER);\r
+ }\r
+ \r
+ if($encoding == "UTF-8" || $encoding == "ISO-8859-1") {\r
+ // noting\r
+ } else {\r
+ $data = @mb_convert_encoding($data, "UTF-8", $encoding);\r
+ $data = str_replace ( $m[0], $m[1].'UTF-8'.$m[3], $data);\r
+ $encoding = 'UTF-8';\r
+ }\r
+ \r
+ $this->parser = xml_parser_create($encoding);\r
+ xml_set_object($this->parser, $this);\r
+ xml_set_element_handler($this->parser, "_open", "_close");\r
+ xml_set_character_data_handler($this->parser, "_cdata");\r
+ xml_parser_set_option($this->parser, XML_OPTION_TARGET_ENCODING, 'UTF-8').\r
+ \r
+ $this->words = array();\r
+ xml_parse($this->parser, $data);\r
+ $errcode = xml_get_error_code($this->parser);\r
+ if ( $errcode != XML_ERROR_NONE ) {\r
+ $this->isError = true;\r
+ $this->message = 'XML Parse Error: ' . xml_error_string($errcode) . ' in '. xml_get_current_line_number($this->parser);\r
+ }\r
+ return $this->message;\r
+ }\r
+ \r
+ function free(){\r
+ xml_parser_free($this->parser);\r
+ }\r
+ \r
+ function _open($parser, $name, $attribute){\r
+ switch( $name ){\r
+ case 'MESSAGE':\r
+ $this->inTarget = 'MESSAGE';\r
+ break;\r
+ case 'ERROR':\r
+ $this->inTarget = 'ERROR';\r
+ break;\r
+ }\r
+ }\r
+ \r
+ function _close($parser, $name){\r
+ if( $name == $this->inTarget ) $this->inTarget = null;\r
+ }\r
+ \r
+ function _cdata($parser, $data){\r
+ switch( $this->inTarget ){\r
+ case 'MESSAGE':\r
+ $this->message = trim($data);\r
+ break;\r
+ case 'ERROR':\r
+ $this->isError = ($data ? true : false);\r
+ break;\r
+ }\r
+ }\r
+ } \r
+ \r
+ class NP_TrackBack extends NucleusPlugin {\r
+ var $useCurl = 1; // use curl? 2:precheck+read by curl, 1: read by curl 0: fread\r
+\r
+//modify start+++++++++\r
+ function _createItemLink($itemid, $b){\r
+ global $CONF, $manager;\r
+ \r
+ $itemLink = createItemLink($itemid,'');\r
+ if( strpos($itemLink, 'http') === 0 ){\r
+ return $itemLink;\r
+ }\r
+ \r
+ $blogurl = $b->getURL();\r
+ if (!$blogurl) {\r
+ $b =& $manager->getBlog($CONF['DefaultBlog']);\r
+ $blogurl = $b->getURL();\r
+ if (!$blogurl) {\r
+ $blogurl = $CONF['IndexURL'];\r
+ }\r
+ }\r
+ \r
+ if(substr($blogurl, -1) == '/') $blogurl = substr($blogurl, 0, -1);\r
+ $usePathInfo = ($CONF['URLMode'] == 'pathinfo');\r
+ $itemUrlOrg = $CONF['ItemURL'];\r
+ if( ! ($usePathInfo || substr($blogurl, -4) == '.php') ) $blogurl .= '/index.php';\r
+ $CONF['ItemURL'] = $blogurl;\r
+ \r
+ $itemLink = createItemLink($itemid,'');\r
+ $CONF['ItemURL'] = $itemUrlOrg;\r
+ \r
+ return $itemLink;\r
+ }\r
+//modify end+++++++++\r
+\r
+ /**************************************************************************************\r
+ * SKIN VARS, TEMPLATE VARS AND ACTIONS\r
+ */\r
+\r
+ /*\r
+ * TrackBack data can be inserted using skinvars (or templatevars)\r
+ */\r
+ function doSkinVar($skinType, $what = '', $tb_id = '', $amount = 'limit-1') {\r
+\r
+ global $itemid, $manager, $CONF;\r
+\r
+//modify start+++++++++\r
+ if(preg_match('/limit/i', $tb_id)){\r
+ $amount = $tb_id;\r
+ $tb_id = '';\r
+ }\r
+ $amount = intval(str_replace('limit', '', $amount));\r
+//modify end+++++++++\r
+\r
+ if ($tb_id == '') $tb_id = intval($itemid);\r
+ \r
+//mod by cles\r
+ $isAcceptPing = $this->isAcceptTrackBack($tb_id);\r
+\r
+ //if( $skinType == 'template' && (! $isAcceptPing ) ){\r
+ // return;\r
+ //}\r
+//mod by cles end\r
+ switch ($what) {\r
+ \r
+ // Insert Auto-discovery RDF code\r
+ case 'tbcode':\r
+ case 'code':\r
+//mod by cles\r
+// if($skinType == 'item')\r
+\r
+ $spamcheck = array (\r
+ 'type' => 'tbcode',\r
+ 'id' => -1,\r
+ 'title' => '',\r
+ 'excerpt' => '',\r
+ 'blogname' => '',\r
+ 'url' => '',\r
+ 'return' => true,\r
+ 'live' => true,\r
+ \r
+ /* Backwards compatibility with SpamCheck API 1*/\r
+ 'data' => '',\r
+ 'ipblock' => true,\r
+ );\r
+ global $manager;\r
+ //$manager->notify('SpamCheck', array ('spamcheck' => & $spamcheck));\r
+ $spam = false;\r
+ if (isset($spamcheck['result']) && $spamcheck['result'] == true){\r
+ $spam = true;\r
+ }\r
+\r
+ if( ($skinType == 'item') && (!$spam) && $isAcceptPing )\r
+//mod by cles end\r
+ $this->insertCode($tb_id);\r
+ break;\r
+ \r
+ // Insert TrackBack URL\r
+ case 'tburl':\r
+ case 'url':\r
+//mod by cles\r
+// echo $this->getTrackBackUrl($tb_id);\r
+ if($isAcceptPing)\r
+ echo $this->getTrackBackUrl($tb_id);\r
+ else\r
+ echo 'Sorry, no trackback pings are accepted.';\r
+//mod by cles end\r
+ break;\r
+ \r
+ // Insert manual ping URL\r
+ case 'form':\r
+ case 'manualpingformlink':\r
+ echo $this->getManualPingUrl($tb_id);\r
+ break;\r
+ \r
+ case 'sendpinglink':\r
+ echo $manager->addTicketToUrl($CONF['PluginURL'] . 'trackback/index.php?action=ping&id=' . intval($tb_id));\r
+ break;\r
+ \r
+ // Insert TrackBack count\r
+ case 'count':\r
+ $count = $this->getTrackBackCount($tb_id);\r
+ switch ($count) {\r
+ case 0: echo TEMPLATE::fill($this->getOption('tplTbNone'), array('number' => $count)); break;\r
+ case 1: echo TEMPLATE::fill($this->getOption('tplTbOne'), array('number' => $count)); break;\r
+ default: echo TEMPLATE::fill($this->getOption('tplTbMore'), array('number' => $count)); break;\r
+ }\r
+ break;\r
+\r
+ // Shows the TrackBack list\r
+ case 'list':\r
+ case '':\r
+//modify start+++++++++\r
+// $this->showList($tb_id);\r
+ $this->showList($tb_id, $amount);\r
+//modify end+++++++++\r
+ break;\r
+//mod by cles\r
+ // show requred URL\r
+ case 'required':\r
+ echo $this->getRequiredURL($tb_id);\r
+ break;\r
+ \r
+ // shows the Local list\r
+ case 'locallist':\r
+ $this->showLocalList($tb_id);\r
+ break; \r
+//mod by cles end\r
+ \r
+ default:\r
+ return;\r
+ }\r
+ }\r
+ \r
+ /*\r
+ * When used in templates, the tb_id will be determined by the itemid there\r
+ */\r
+ function doTemplateVar(&$item, $what = '') {\r
+ $this->doSkinVar('template', $what, $item->itemid);\r
+ }\r
+ \r
+ function doTemplateCommentsVar(&$item, &$comment, $what = ''){\r
+ $this->doSkinVar('templatecomments', $what, $item->itemid);\r
+ }\r
+ \r
+ /*\r
+ * A trackback ping is to be received on the URL\r
+ * http://yourdomain.com/item/1234.trackback\r
+ * Extra variables to be passed along are url, title, excerpt, blog_name\r
+ */\r
+ function event_InitSkinParse(&$data) {\r
+ global $CONF, $itemid;\r
+ $format = requestVar('format');\r
+ \r
+ if ($CONF['URLMode'] == 'pathinfo') {\r
+ if (preg_match('/(\/|\.)(trackback)(\/|$)/', serverVar('PATH_INFO'), $matches)) {\r
+ $format = $matches[2];\r
+ }\r
+ }\r
+ \r
+ if ($format == 'trackback' && $data['type'] == 'item')\r
+ {\r
+ $errorMsg = $this->handlePing(intval($itemid));\r
+ \r
+ if ($errorMsg != '')\r
+ $this->xmlResponse($errorMsg);\r
+ else\r
+ $this->xmlResponse();\r
+ \r
+ exit;\r
+ }\r
+ }\r
+\r
+ /*\r
+ * A trackback ping is to be received on the URL\r
+ * http://yourdomain.com/action.php?action=plugin&name=TrackBack&tb_id=1234\r
+ * Extra variables to be passed along are url, title, excerpt, blog_name\r
+ */\r
+ function doAction($type)\r
+ {\r
+ global $CONF,$manager;\r
+ $aActionsNotToCheck = array(\r
+ '',\r
+ 'ping',\r
+ 'form',\r
+ 'redirect',\r
+ 'left',\r
+ );\r
+ if (!in_array($type, $aActionsNotToCheck)) {\r
+ if (!$manager->checkTicket()) return _ERROR_BADTICKET;\r
+ }\r
+ \r
+ switch ($type) {\r
+ \r
+ // When no action type is given, assume it's a ping\r
+ case '':\r
+ $errorMsg = $this->handlePing();\r
+ $this->xmlResponse($errorMsg);\r
+ break; \r
+ \r
+ // Manual ping\r
+ case 'ping':\r
+ $errorMsg = $this->handlePing();\r
+ if ($errorMsg != '')\r
+ $this->showManualPingError(intRequestVar('tb_id'), $errorMsg);\r
+ else\r
+ $this->showManualPingSuccess(intRequestVar('tb_id'));\r
+ break; \r
+ \r
+ // Show manual ping form\r
+ case 'form':\r
+//mod by cles\r
+// $this->showManualPingForm(intRequestVar('tb_id'));\r
+ $tb_id = intRequestVar('tb_id');\r
+ $isAcceptPing = $this->isAcceptTrackBack($tb_id);\r
+ \r
+ if( $isAcceptPing ) \r
+ $this->showManualPingForm($tb_id);\r
+ else\r
+ echo 'Sorry, no trackback pings are accepted.';\r
+//mod by cles end\r
+ break;\r
+ \r
+ // Detect trackback\r
+ case 'detect':\r
+ list($url, $title) = \r
+ $this->getURIfromLink(html_entity_decode(requestVar('tb_link')));\r
+\r
+ $url = addslashes($url);\r
+ $url = $this->_utf8_to_javascript($url);\r
+\r
+ $title = addslashes($title);\r
+ $title = $this->_utf8_to_javascript($title);\r
+ \r
+ echo "tbDone('" . requestVar('tb_link') . "', '" . $url . "', '" . $title . "');";\r
+\r
+ break;\r
+//mod by cles\r
+ // redirect \r
+ case 'redirect':\r
+ return $this->redirect(intRequestVar('tb_id'), requestVar('urlHash'));\r
+ break;\r
+//mod by cles end\r
+ case 'left':\r
+ echo $this->showLeftList(intRequestVar('tb_id'), intRequestVar('amount'));\r
+ break;\r
+ \r
+ // delete a trackback(local)\r
+ case 'deletelc':\r
+ $err = $this->deleteLocal(intRequestVar('tb_id'), intRequestVar('from_id'));\r
+ if( $err )\r
+ return $err;\r
+ header('Location: ' . serverVar('HTTP_REFERER'));\r
+ break;\r
+ } \r
+\r
+ exit;\r
+ }\r
+ \r
+ function doIf($key = '', $value = '')\r
+ {\r
+ global $itemid;\r
+ //echo "key: $key, value: $value";\r
+ \r
+ switch( strtolower($key) ){\r
+ case '':\r
+ case 'accept':\r
+ if( $value == '' ) $value = 'yes';\r
+ $value = ( $value == 'no' || (! $value) ) ? false : true;\r
+ \r
+ $ret = false;\r
+ if( $itemid )\r
+ $ret = $this->isAcceptTrackBack($itemid);\r
+ else\r
+ $ret = $this->isAcceptTrackBack();\r
+ return ( $value == false ) ? (! $ret) : $ret;\r
+ \r
+ case 'required':\r
+ if( $value == '' ) $value = 'yes';\r
+ $value = ( $value == 'no' || (! $value) ) ? false : true;\r
+ \r
+ $ret = false;\r
+ if( $itemid )\r
+ $ret = $this->isEnableLinkCheck($itemid);\r
+ \r
+ return ( $value == false ) ? (! $ret) : $ret;\r
+ \r
+ default:\r
+ return false;\r
+ }\r
+ }\r
+\r
+ /**************************************************************************************\r
+ * OUTPUT\r
+ */\r
+\r
+ /*\r
+ * Show a list of left trackbacks for this ID\r
+ */\r
+ function showLeftList($tb_id, $offset = 0, $amount = 99999999) {\r
+ global $manager, $blog, $CONF;\r
+\r
+ $out = array();\r
+ $query = '\r
+ SELECT \r
+ url, \r
+ md5(url) as urlHash,\r
+ blog_name, \r
+ excerpt, \r
+ title, \r
+ UNIX_TIMESTAMP(timestamp) AS timestamp \r
+ FROM \r
+ '.sql_table('plugin_tb').' \r
+ WHERE \r
+ tb_id = '.intval($tb_id).' AND\r
+ block = 0\r
+ ORDER BY \r
+ timestamp DESC\r
+ ';\r
+ if($offset)\r
+ $query .= ' LIMIT '.intval($offset).', ' .intval($amount);\r
+ $res = sql_query($query);\r
+ while ($row = mysql_fetch_array($res))\r
+ {\r
+\r
+ $row['blog_name'] = htmlspecialchars($row['blog_name'], ENT_QUOTES);\r
+ $row['title'] = htmlspecialchars($row['title'], ENT_QUOTES);\r
+ $row['excerpt'] = htmlspecialchars($row['excerpt'], ENT_QUOTES);\r
+ if (_CHARSET != 'UTF-8') {\r
+//modify start+++++++++\r
+ $row['blog_name'] = $this->_restore_to_utf8($row['blog_name']);\r
+ $row['title'] = $this->_restore_to_utf8($row['title']);\r
+ $row['excerpt'] = $this->_restore_to_utf8($row['excerpt']);\r
+//modify end+++++++++\r
+ $row['blog_name'] = $this->_utf8_to_entities($row['blog_name']);\r
+ $row['title'] = $this->_utf8_to_entities($row['title']);\r
+ $row['excerpt'] = $this->_utf8_to_entities($row['excerpt']);\r
+ } \r
+ $iVars = array(\r
+ 'action' => $this->getTrackBackUrl($tb_id),\r
+ 'form' => $this->getManualPingUrl($tb_id),\r
+ 'name' => $row['blog_name'],\r
+ 'title' => $row['title'],\r
+ 'excerpt' => $this->_cut_string($row['excerpt'], 400),\r
+ 'url' => htmlspecialchars($row['url'], ENT_QUOTES),\r
+ 'date' => htmlspecialchars(strftime($this->getOption('dateFormat'), $row['timestamp']), ENT_QUOTES)\r
+ );\r
+\r
+//mod by cles\r
+ if( $this->getOption('HideUrl') == 'yes' )\r
+ $iVars['url'] = $CONF['ActionURL'] . '?action=plugin&name=TrackBack&type=redirect&tb_id=' . $tb_id . '&urlHash=' . $row['urlHash'];\r
+ else\r
+ $iVars['url'] = $row['url'];\r
+//mod by cles end\r
+\r
+ $out[] = TEMPLATE::fill($this->getOption('tplItem'), $iVars);\r
+ }\r
+ mysql_free_result($res);\r
+ \r
+ return @join("\n",$out);\r
+ }\r
+\r
+ /*\r
+ * Show a list of all trackbacks for this ID\r
+ */\r
+ function showList($tb_id, $amount = 0) {\r
+ $tb_id = intval($tb_id);\r
+ global $manager, $blog, $CONF, $member;\r
+//mod by cles\r
+ $enableHideurl = true;\r
+ // for TB LinkLookup\r
+ if( \r
+ strpos(serverVar('HTTP_USER_AGENT'),'Hatena Diary Track') === false\r
+ || strpos(serverVar('HTTP_USER_AGENT'),'NP_TrackBack') === false\r
+ || strpos(serverVar('HTTP_USER_AGENT'),'TBPingLinkLookup') === false\r
+ || strpos(serverVar('HTTP_USER_AGENT'),'MT::Plugin::BanNoReferTb') === false\r
+ || strpos(serverVar('HTTP_USER_AGENT'),'livedoorBlog') === false\r
+ ){\r
+ $enableHideurl = false;\r
+ $amount = '-1';\r
+ }\r
+//mod by cles end\r
+\r
+/*\r
+ $res = sql_query('\r
+ SELECT \r
+ url, \r
+ md5(url) as urlHash,\r
+ blog_name, \r
+ excerpt, \r
+ title, \r
+ UNIX_TIMESTAMP(timestamp) AS timestamp \r
+ FROM \r
+ '.sql_table('plugin_tb').' \r
+ WHERE \r
+ tb_id = '.$tb_id .' AND\r
+ block = 0\r
+ ORDER BY \r
+ timestamp ASC\r
+ ');\r
+*/\r
+ $query = '\r
+ SELECT \r
+ url, \r
+ md5(url) as urlHash,\r
+ blog_name, \r
+ excerpt, \r
+ title, \r
+ UNIX_TIMESTAMP(timestamp) AS timestamp \r
+ FROM \r
+ '.sql_table('plugin_tb').' \r
+ WHERE \r
+ tb_id = '.intval($tb_id) .' AND\r
+ block = 0\r
+ ORDER BY \r
+ timestamp DESC\r
+ ';\r
+ if( $amount == '-1' )\r
+ $query .= ' LIMIT 9999999';\r
+ elseif( $amount )\r
+ $query .= ' LIMIT '.intval($amount);\r
+ \r
+ if( $amount != 0)\r
+ $res = sql_query($query);\r
+\r
+ $gVars = array(\r
+ 'action' => $this->getTrackBackUrl(intval($tb_id)),\r
+ 'form' => $this->getManualPingUrl(intval($tb_id)),\r
+ 'required' => $this->getRequiredURL(intval($tb_id)),\r
+ );\r
+ \r
+ if ( $member->isLoggedIn() ){\r
+ $adminurl = htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'] . 'trackback/index.php?action=list&id=' . intval($tb_id)), ENT_QUOTES);\r
+ $pingformurl = htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'] . 'trackback/index.php?action=ping&id=' . intval($tb_id)), ENT_QUOTES);\r
+ $gVars['admin'] = '<a href="' . $adminurl . '" target="_blank">[admin]</a>';\r
+ $gVars['pingform'] = '<a href="' . $pingformurl . '" target="_blank">[pingform]</a>';\r
+ }\r
+\r
+ echo TEMPLATE::fill($this->getOption('tplHeader'), $gVars);\r
+\r
+\r
+ while ($amount != 0 && $row = mysql_fetch_array($res))\r
+ {\r
+\r
+ $row['blog_name'] = htmlspecialchars($row['blog_name'], ENT_QUOTES);\r
+ $row['title'] = htmlspecialchars($row['title'], ENT_QUOTES);\r
+ $row['excerpt'] = htmlspecialchars($row['excerpt'], ENT_QUOTES);\r
+\r
+/*\r
+*/\r
+ if (_CHARSET != 'UTF-8') {\r
+//modify start+++++++++\r
+/*\r
+ $row['blog_name'] = $this->_utf8_to_entities($row['blog_name']);\r
+ $row['title'] = $this->_utf8_to_entities($row['title']);\r
+ $row['excerpt'] = $this->_utf8_to_entities($row['excerpt']);\r
+*/\r
+ $row['blog_name'] = $this->_restore_to_utf8($row['blog_name']);\r
+ $row['title'] = $this->_restore_to_utf8($row['title']);\r
+ $row['excerpt'] = $this->_restore_to_utf8($row['excerpt']);\r
+\r
+ $row['blog_name'] = mb_convert_encoding($row['blog_name'], _CHARSET, 'UTF-8');\r
+ $row['title'] = mb_convert_encoding($row['title'], _CHARSET, 'UTF-8');\r
+ $row['excerpt'] = mb_convert_encoding($row['excerpt'], _CHARSET, 'UTF-8');\r
+//modify end+++++++++\r
+ } \r
+\r
+//modify start+++++++++\r
+/*\r
+ $iVars = array(\r
+ 'action' => $this->getTrackBackUrl($tb_id),\r
+ 'form' => $this->getManualPingUrl($tb_id),\r
+ 'name' => $row['blog_name'],\r
+ 'title' => $row['title'],\r
+ 'excerpt' => $row['excerpt'],\r
+ 'url' => htmlspecialchars($row['url'], ENT_QUOTES),\r
+ 'date' => htmlspecialchars(strftime($this->getOption('dateFormat'), $row['timestamp'] + ($blog->getTimeOffset() * 3600)), ENT_QUOTES)\r
+ );\r
+*/\r
+ $iVars = array(\r
+ 'action' => $this->getTrackBackUrl($tb_id),\r
+ 'form' => $this->getManualPingUrl($tb_id),\r
+ 'name' => htmlspecialchars($row['blog_name'], ENT_QUOTES),\r
+ 'title' => htmlspecialchars($row['title'], ENT_QUOTES),\r
+ 'excerpt' => htmlspecialchars($this->_cut_string($row['excerpt'], 400), ENT_QUOTES),\r
+ 'url' => htmlspecialchars($row['url'], ENT_QUOTES),\r
+ 'date' => htmlspecialchars(strftime($this->getOption('dateFormat'), $row['timestamp']), ENT_QUOTES)\r
+ );\r
+\r
+//mod by cles\r
+ if( $enableHideurl && $this->getOption('HideUrl') == 'yes' )\r
+ $iVars['url'] = $CONF['ActionURL'] . '?action=plugin&name=TrackBack&type=redirect&tb_id=' . intval($tb_id) . '&urlHash=' . $row['urlHash'];\r
+ else\r
+ $iVars['url'] = $row['url'];\r
+//mod by cles end\r
+\r
+//modify end+++++++++\r
+ echo TEMPLATE::fill($this->getOption('tplItem'), $iVars);\r
+ \r
+ }\r
+\r
+//modify start+++++++++\r
+ $q = '\r
+ SELECT \r
+ count(*) \r
+ FROM \r
+ '.sql_table('plugin_tb').' \r
+ WHERE \r
+ tb_id = '.intval($tb_id) .' AND\r
+ block = 0\r
+ ORDER BY \r
+ timestamp DESC\r
+ ';\r
+ $result = sql_query($q);\r
+ $total = mysql_result($result,0,0);\r
+\r
+ if($amount != -1 && $total > $amount){\r
+ $leftcount = $total - $amount;\r
+\r
+ echo '<script type="text/javascript" src="' . $this->getAdminURL() . 'detectlist.php?tb_id='.intval($tb_id).'&amount='.intval($amount).'"></script>';\r
+\r
+?>\r
+\r
+<a name="restoftrackback" id="restoftrackback"></a>\r
+<div id="tbshownavi"><a href="#restoftrackback" onclick="resttbStart(); return false;" id="tbshow">Show left <?php echo $leftcount;?> Trackbacks</a></div>\r
+<div id="tbhidenavi" style="display: none;"><a href="#restoftrackback" onclick="hideresttb(); return false;">Hide <?php echo $leftcount;?> Trackbacks</a></div>\r
+<div id="resttb"></div>\r
+\r
+<?php\r
+ }\r
+//modify end+++++++++\r
+\r
+ if (mysql_num_rows($res) == 0) \r
+ {\r
+ echo TEMPLATE::fill($this->getOption('tplEmpty'), $gVars);\r
+ }\r
+ mysql_free_result($res);\r
+ \r
+ echo TEMPLATE::fill($this->getOption('tplFooter'), $gVars);\r
+\r
+ }\r
+ \r
+ /*\r
+ * Returns the TrackBack count for a TrackBack item\r
+ */\r
+ function getTrackBackCount($tb_id) {\r
+ return quickQuery('SELECT COUNT(*) as result FROM ' . sql_table('plugin_tb') . ' WHERE tb_id='.intval($tb_id).' AND block = 0');\r
+ }\r
+ \r
+ /**\r
+ * Returns the manual ping URL\r
+ */\r
+ function getManualPingUrl($itemid) {\r
+ global $CONF;\r
+ return $CONF['ActionURL'] . '?action=plugin&name=TrackBack&type=form&tb_id='.$itemid;\r
+ }\r
+\r
+ /**\r
+ * Show the manual ping form\r
+ */\r
+ function showManualPingError($itemid, $status = '') {\r
+ global $CONF;\r
+\r
+ $form = true; $error = true; $success = false;\r
+ sendContentType('text/html', 'admin-trackback', _CHARSET); \r
+//modify start+++++++++\r
+// include ($this->getDirectory() . '/templates/form.html');\r
+ require_once($this->getDirectory() . '/template.php');\r
+ $mTemplate = new Trackback_Template(null, $this->getDirectory());\r
+ $mTemplate->set ('CONF', $CONF);\r
+ $mTemplate->set ('itemid', $itemid);\r
+ $mTemplate->set ('form', $form);\r
+ $mTemplate->set ('error', $error);\r
+ $mTemplate->set ('success', $success);\r
+ $mTemplate->set ('status', $status);\r
+ $mTemplate->template('templates/form.html');\r
+ echo $mTemplate->fetch();\r
+//modify end+++++++++\r
+ }\r
+ \r
+ function showManualPingSuccess($itemid, $status = '') {\r
+ global $CONF;\r
+\r
+ $form = false; $error = false; $success = true;\r
+ sendContentType('text/html', 'admin-trackback', _CHARSET); \r
+//modify start+++++++++\r
+ //include ($this->getDirectory() . '/templates/form.html');\r
+ require_once($this->getDirectory() . '/template.php');\r
+ $mTemplate = new Trackback_Template(null, $this->getDirectory());\r
+ $mTemplate->set ('CONF', $CONF);\r
+ $mTemplate->set ('itemid', $itemid);\r
+ $mTemplate->set ('form', $form);\r
+ $mTemplate->set ('error', $error);\r
+ $mTemplate->set ('success', $success);\r
+ $mTemplate->set ('status', $status);\r
+ $mTemplate->template('templates/form.html');\r
+ echo $mTemplate->fetch();\r
+//modify end+++++++++\r
+ }\r
+ \r
+ function showManualPingForm($itemid, $text = '') {\r
+ global $CONF;\r
+\r
+ $form = true; $error = false; $success = false;\r
+\r
+ // Check if we are allowed to accept pings\r
+ if ( !$this->isAcceptTrackBack($itemid) ) {\r
+ $text = 'Sorry, no trackback pings are accepted';\r
+ $form = false; $error = true;\r
+ }\r
+ \r
+ sendContentType('text/html', 'admin-trackback', _CHARSET); \r
+//modify start+++++++++\r
+ //include ($this->getDirectory() . '/templates/form.html');\r
+ require_once($this->getDirectory() . '/template.php');\r
+ $mTemplate = new Trackback_Template(null, $this->getDirectory());\r
+ $mTemplate->set ('CONF', $CONF);\r
+ $mTemplate->set ('itemid', $itemid);\r
+ $mTemplate->set ('form', $form);\r
+ $mTemplate->set ('error', $error);\r
+ $mTemplate->set ('success', $success);\r
+ $mTemplate->set ('status', $status);\r
+ $mTemplate->template('templates/form.html');\r
+ echo $mTemplate->fetch();\r
+//modify end+++++++++\r
+ }\r
+ \r
+ /**\r
+ * Returns the trackback URL\r
+ */\r
+ function getTrackBackUrl($itemid) {\r
+ global $CONF, $manager;\r
+ return 'http://blog.cles.jp/item/' . intval($itemid) . '.trackback';\r
+ } \r
+\r
+ /*\r
+ * Insert RDF code for item\r
+ */\r
+ function insertCode($itemid) {\r
+ $itemid = intval($itemid);\r
+ global $manager, $CONF;\r
+\r
+ $item = & $manager->getItem($itemid, 0, 0);\r
+ $blog = & $manager->getBlog(getBlogIDFromItemID($item['itemid']));\r
+ \r
+/*\r
+ $CONF['ItemURL'] = preg_replace('/\/$/', '', $blog->getURL()); \r
+ $uri = createItemLink($item['itemid'],''); \r
+*/\r
+ $uri = $this->_createItemLink($item['itemid'],$blog); \r
+ \r
+ $title = strip_tags($item['title']);\r
+ $desc = strip_tags($item['body']);\r
+ $desc = $this->_cut_string($desc, 200);\r
+ $desc = htmlspecialchars($desc, ENT_QUOTES);\r
+ \r
+ ?>\r
<!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
dc:date="<?php echo strftime('%Y-%m-%dT%H:%M:%S')?>" />
</rdf:RDF>
-->
- <?php
- }
-
- /**
- * Retrieving TrackBack Pings (when __mode=rss)
- */
- function rssResponse($tb_id) {
- $itemid = intval($itemid);
- global $manager, $CONF;
- $item =& $manager->getItem($tb_id, 0, 0);
-
- if($item)
- {
- $blog =& $manager->getBlog(getBlogIDFromItemID($item['itemid']));
-
- $blog_name = $blog->getName();
- $title = $item['title'];
- $excerpt = $item['body'];
-
-//modify start+++++++++
-/*
- if (_CHARSET != 'UTF-8')
- {
- $title = $this->_convert_to_utf8($title, $encoding);
- $excerpt = $this->_convert_to_utf8($excerpt, $encoding);
- $blog_name = $this->_convert_to_utf8($blog_name, $encoding);
- }
-
- $title = $this->_decode_entities(strip_tags($title));
- $excerpt = $this->_decode_entities(strip_tags($excerpt));
- $blog_name = $this->_decode_entities(strip_tags($blog_name));
-*/
-
- $title = $this->_restore_to_utf8($title);
- $excerpt = $this->_restore_to_utf8($excerpt);
- $blog_name = $this->_restore_to_utf8($blog_name);
-//modify end+++++++++
-
- $excerpt = $this->_cut_string($excerpt, 200);
-
-
-//modify start+++++++++
-/*
- $CONF['ItemURL'] = preg_replace('/\/$/', '', $blog->getURL());
- $url = createItemLink($item['itemid'],'');
-*/
- $url = $this->_createItemLink($item['itemid'],$blog);
-//modify end+++++++++
-
- // Use UTF-8 charset for output
- header('Content-Type: text/xml');
- echo "<","?xml version='1.0' encoding='UTF-8'?",">\n";
-
- echo "<response>\n";
- echo "\t<error>0</error>\n";
- echo "\t<rss version='0.91'>\n";
- echo "\t\t<channel>\n";
- echo "\t\t\t<title>".htmlspecialchars($title, ENT_QUOTES)."</title>\n";
- echo "\t\t\t<link>".htmlspecialchars($url, ENT_QUOTES)."</link>\n";
- echo "\t\t\t<description>".htmlspecialchars($excerpt, ENT_QUOTES)."</description>\n";
-
- $query = 'SELECT url, blog_name, excerpt, title, UNIX_TIMESTAMP(timestamp) as timestamp FROM '.sql_table('plugin_tb').' WHERE tb_id='.intval($tb_id).' AND block = 0 ORDER BY timestamp DESC';
- $res = sql_query($query);
- while ($o = mysql_fetch_object($res))
- {
- // No need to do conversion, because it is already UTF-8
- $data = array (
- 'url' => htmlspecialchars($o->url, ENT_QUOTES),
- 'blogname' => htmlspecialchars($this->_restore_to_utf8($o->blog_name), ENT_QUOTES),
- 'timestamp' => strftime('%Y-%m-%d',$o->timestamp),
- 'title' => htmlspecialchars($this->_restore_to_utf8($o->title), ENT_QUOTES),
- 'excerpt' => htmlspecialchars($this->_restore_to_utf8($o->excerpt), ENT_QUOTES),
- 'tburl' => $this->getTrackBackUrl($tb_id)
- );
-
- echo "\n";
- echo "\t\t\t<item>\n";
- echo "\t\t\t\t<title>".$data['title']."</title>\n";
- echo "\t\t\t\t<link>".$data['url']."</link>\n";
- echo "\t\t\t\t<description>".$data['excerpt']."</description>\n";
- echo "\t\t\t</item>\n";
- }
- echo "\t\t</channel>\n";
- echo "\t</rss>\n";
- echo "</response>";
- exit;
- }
- else
- {
- $this->xmlResponse(_ERROR_NOSUCHITEM);
- }
-
- }
-
-
-
- /**************************************************************************************
- * SENDING AND RECEIVING TRACKBACK PINGS
- */
-
- /*
- * Send a Trackback ping to another website
- */
- function sendPing($itemid, $title, $url, $excerpt, $blog_name, $ping_url)
- {
- $sendEncoding = 'UTF-8';
-
- // 1. Check some basic things
- if (!$this->canSendPing()) {
- return 'You\'re not allowed to send pings';
- }
-
- if ($this->getOption('SendPings') == 'no') {
- return 'Sending trackback pings is disabled';
- }
-
- if ($ping_url == '') {
- return 'No ping URL';
- }
-
- // 2. Check if protocol is correct http URL
- $parsed_url = parse_url($ping_url);
-
- if ($parsed_url['scheme'] != 'http' || $parsed_url['host'] == '')
- return 'Bad ping URL';
-
- $port = ($parsed_url['port']) ? $parsed_url['port'] : 80;
-
- // 3. Create contents
- if($sendEncoding != _CHARSET){
- $title = mb_convert_encoding($title, $sendEncoding, _CHARSET);
- $excerpt = mb_convert_encoding($excerpt, $sendEncoding, _CHARSET);
- $blog_name = mb_convert_encoding($blog_name, $sendEncoding, _CHARSET);
- }
-
-
- $content = 'title=' . urlencode( $title );
- $content .= '&url=' . urlencode( $url );
- $content .= '&excerpt=' . urlencode( $excerpt );
- $content .= '&blog_name=' . urlencode( $blog_name );
-
- // 4. Prepare HTTP request
- $request = 'POST ' . $parsed_url['path'];
-
- if ($parsed_url['query'] != '')
- $request .= '?' . $parsed_url['query'];
-
- $request .= " HTTP/1.1\r\n";
- $request .= "Accept: */*\r\n";
- $request .= "User-Agent: " . $this->userAgent . "\r\n";
- $request .= ( $port == 80 )?
- "Host: " . $parsed_url['host'] . "\r\n":
- "Host: " . $parsed_url['host'] . ":" . $port . "\r\n";
- $request .= "Cache-Control: no-cache\r\n";
- $request .= "Connection: Close\r\n";
- $request .= "Content-Length: " . strlen( $content ) . "\r\n";
- $request .= "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n";
- $request .= "\r\n";
- $request .= $content;
-
- $socket = fsockopen( $parsed_url['host'], $port, $errno, $errstr );
- if ( ! $socket )
- return 'Could not send ping: '.$errstr.' ('.$errno.')';
-
- // 5. Execute HTTP request
- fputs($socket, $request);
-
- // 6. Receive response
- $result = '';
- while (!feof($socket)) {
- $result .= fgets($socket, 4096);
- }
-
- fclose($socket);
-
-//modify start+++++++++
- list($header, $body) = split("\r\n\r\n", $result, 2);
- preg_match("/HTTP\/1\.[0-1] ([0-9]+) ([^\r\n]*)\r?\n/", $header, $httpresp);
- $respCd = $httpresp[1];
- $respMsg = $httpresp[2];
-
- if( $respCd != 200 ){
- return 'An error occurred: HTTP Error: [' . $respCd . '] ' . $respMsg;
- }
-
- if( defined('NP_TRACKBACK_USE_XML_PARSER') && function_exists('xml_parser_create') ){
- $p = new NP_TrackBack_XMLParser();
- $p->parse($body);
- $p->free();
- if( $p->isError ){
- $errorMessage = mb_convert_encoding($p->message, _CHARSET, 'UTF-8');
- return 'An error occurred: ' . htmlspecialchars($errorMessage, ENT_QUOTES);
- }
- } else {
- if ( strstr($DATA[1],'<error>0</error>') === false ){
- preg_match("/<message>(.*?)<\/message>/",$DATA[1],$error_message);
- if( $error_message[1] ){
- $errorMessage = mb_convert_encoding($error_message[1], _CHARSET);
- return 'An error occurred: '.htmlspecialchars($errorMessage, ENT_QUOTES);
- } else {
- return 'An error occurred: fatal error.';
- }
- }
- }
-
- return '';
- }
-//modify end+++++++++
-
- /*
- * Handle a Trackback ping sent to this website
- */
- function handlePing($tb_id = 0) {
- global $manager;
-
- // Defaults
- $spam = false;
- $link = false;
-//modify start+++++++++
-// $block = true;
- $block = false;
-//modify end+++++++++
- if ($tb_id == 0)
- $tb_id = intRequestVar('tb_id');
-
- $rss = requestVar('__mode') == 'rss';
-//mod by cles
- $enableLinkCheck = $this->isEnableLinkCheck($tb_id);
- $block = ( $enableLinkCheck ) ? true : false ;
-//mod by cles end
-
- if (!$tb_id) {
- return 'TrackBack ID is missing (tb_id)';
- }
-
- if ((!$manager->existsItem($tb_id,0,0)) && ($this->getOption('CheckIDs') == 'yes')) {
- return _ERROR_NOSUCHITEM;
- }
-
- // 0. Check if we need to output the list as rss
- if ($rss) {
- $this->rssResponse($tb_id);
- return;
- }
-//mod by cles
- // check: accept pings.
- $blogId = getBlogIDFromItemID($tb_id);
- $isAcceptPing = $this->isAcceptTrackBack($tb_id);
-
- if (! $isAcceptPing)
- return 'Sorry, no trackback pings are accepted.';
-//mod by cles end
-
- // 1. Get attributes
-//modify start+++++++++
- $b =& $manager->getBlog($blogId);
-//modify end+++++++++
- $url = requestVar('url');
- $title = requestVar('title');
- $excerpt = requestVar('excerpt');
- $blog_name = requestVar('blog_name');
-
- if( $url && preg_match('/https?:\/\/([^\/]+)/', $url, $matches) ){
- if( gethostbynamel($matches[1]) === FALSE )
- return 'URL is invalid (url)';
- } else {
- return 'URL is missing or invalid (url)';
- }
-
- // 2. Conversion of encoding...
-//modify start+++++++++
-/* if (preg_match ("/;\s*charset=([^\n]+)/is", $_SERVER["CONTENT_TYPE"], $regs))
- $encoding = strtoupper(trim($regs[1]));
- else
- $encoding = $this->_detect_encoding($excerpt);
-*/
- $encoding = $this->_detect_encoding($excerpt);
-//modify end+++++++++
-
-//modify start+++++++++
- if (_CHARSET != 'UTF-8'){
- $title = $this->_strip_controlchar(strip_tags(mb_convert_encoding($title, _CHARSET, $encoding)));
- $excerpt = $this->_strip_controlchar(strip_tags(mb_convert_encoding($excerpt, _CHARSET, $encoding)));
- $blog_name = $this->_strip_controlchar(strip_tags(mb_convert_encoding($blog_name, _CHARSET, $encoding)));
- }else{
- $title = $this->_strip_controlchar($this->_convert_to_utf8($title, $encoding));
- $excerpt = $this->_strip_controlchar($this->_convert_to_utf8($excerpt, $encoding));
- $blog_name = $this->_strip_controlchar($this->_convert_to_utf8($blog_name, $encoding));
-
- $title = $this->_decode_entities(strip_tags($title));
- $excerpt = $this->_decode_entities(strip_tags($excerpt));
- $blog_name = $this->_decode_entities(strip_tags($blog_name));
- }
-//modify end+++++++++
-
- // 4. Save data in the DB
- $res = @sql_query('
- SELECT
- tb_id, block, spam
- FROM
- '.sql_table('plugin_tb').'
- WHERE
- url = \''.mysql_real_escape_string($url).'\' AND
- tb_id = \''.intval($tb_id).'\'
- ');
-
- if (mysql_num_rows($res) != 0)
- {
- // Existing TB, update it
-/*
- $res = @sql_query('
- UPDATE
- '.sql_table('plugin_tb').'
- SET
- title = "'.mysql_real_escape_string($title).'",
- excerpt = "'.mysql_real_escape_string($excerpt).'",
- blog_name = "'.mysql_real_escape_string($blog_name).'",
- timestamp = '.mysqldate(time()).'
- WHERE
- url = "'.mysql_real_escape_string($url).'" AND
- tb_id = "'.$tb_id.'"
- ');
-*/
-//modify start+++++++++
- $rows = mysql_fetch_assoc($res);
- $spam = ( $rows['block'] || $rows['spam'] ) ? true : false;
- $res = @sql_query('
- UPDATE
- '.sql_table('plugin_tb').'
- SET
- title = \''.mysql_real_escape_string($title).'\',
- excerpt = \''.mysql_real_escape_string($excerpt).'\',
- blog_name = \''.mysql_real_escape_string($blog_name).'\',
- timestamp = '.mysqldate($b->getCorrectTime()).'
- WHERE
- url = \''.mysql_real_escape_string($url).'\' AND
- tb_id = \''.mysql_real_escape_string(intval($tb_id)).'\'
- ');
-//modify end+++++++++
-
- if (!$res) {
- return 'Could not update trackback data: '.mysql_error();
- }
- }
- else
- {
-//mod by cles
- // spam block
- $res = @sql_query('SELECT id FROM '.sql_table('plugin_tb').' WHERE block = 1 and url = \''.mysql_real_escape_string($url).'\'' );
- if (mysql_num_rows($res) != 0) {
- // NP_Trackback has blocked tb !
- ACTIONLOG :: add(INFO, "Trackback: Duplicated Blocked Trackback [ignore] (itemid:$tb_id from: $url)");
- return 'Sorry, trackback ping is not accepted.';
- }
-//mod by cles end
-
- // 4. SPAM check (for SpamCheck API 2 /w compat. API 1)
- $spamcheck = array (
- 'type' => 'trackback',
- 'id' => $tb_id,
- 'title' => $title,
- 'excerpt' => $excerpt,
- 'blogname' => $blog_name,
- 'url' => $url,
- 'return' => true,
- 'live' => true,
-
- /* Backwards compatibility with SpamCheck API 1*/
- 'data' => $url . "\n" . $title . "\n" . $excerpt . "\n" . $blog_name . "\n" . serverVar('HTTP_USER_AGENT'),
- 'ipblock' => true,
- );
-
- $manager->notify('SpamCheck', array ('spamcheck' => & $spamcheck));
-
- if (isset($spamcheck['result']) && $spamcheck['result'] == true)
- {
- $spam = true;
- }
-
- // 5. Content check (TO DO)
- if($spam == false || $enableLinkCheck == 'ignore' ) //modify
- {
-//mod by cles
-// $contents = $this->retrieveUrl ($url);
-//
-// if (preg_match("/(".preg_quote($_SERVER["REQUEST_URI"], '/').")|(".preg_quote($_SERVER["SERVER_NAME"], '/').")/i", $contents)) {
-// $link = true;
-// }
- if( $enableLinkCheck ){
- $contents = $this->retrieveUrl($url);
-
- $linkArray = $this->getPermaLinksFromText($contents);
-
- if( defined('NP_TRACKBACK_LINKCHECK_STRICT') )
- $itemLink = $this->_createItemLink($tb_id, $b);
- else
- $itemLink = $b->getURL();
-
- $itemLinkPat = '{^' . preg_quote($itemLink) .'}i';
- $itemLinkPat = str_replace('&','&(amp;)?', $itemLinkPat);
-
- foreach($linkArray as $l) {
- if(preg_match($itemLinkPat, $l)){
- ACTIONLOG :: add(INFO, "Trackback: LinkCheck OK. (link: $l pat: $itemLinkPat )");
- $link = true;
- break;
- }
- }
- if( ! $link ){
- $cnt = @count($linkArray);
- if( $enableLinkCheck == 'ignore' ){
- ACTIONLOG :: add(INFO, "Trackback: LinkCheck NG. [ignore] (itemid:$tb_id from: $url cnt: $cnt pat: $itemLinkPat)");
- return 'Sorry, trackback ping is not accepted.';
- } else {
- ACTIONLOG :: add(INFO, "Trackback: LinkCheck NG. [block] (itemid:$tb_id from: $url cnt: $cnt pat: $itemLinkPat");
- }
- }
- }
-//mod by cles end
- }
-
- // 6. Determine if Trackback is safe...
-//modify start+++++++++
-// $block = $spam == true || $link == false;
-// $block = $spam == true ;
-//modify end+++++++++
-//mod by cles
- if ( $enableLinkCheck )
- $block = ($spam == true || $link == false);
- else
- $block = $spam == true ;
-//mod by cles end
- // New TB, insert it
-/*
- $query = '
- INSERT INTO
- '.sql_table('plugin_tb').'
- SET
- tb_id = "'.$tb_id.'",
- block = "'.($block ? '1' : '0').'",
- spam = "'.($spam ? '1' : '0').'",
- link = "'.($link ? '1' : '0').'",
- url = "'.mysql_real_escape_string($url).'",
- title = "'.mysql_real_escape_string($title).'",
- excerpt = "'.mysql_real_escape_string($excerpt).'",
- blog_name = "'.mysql_real_escape_string($blog_name).'",
- timestamp = '.mysqldate(time()).'
- ';
-*/
-//modify start+++++++++
- $query = '
- INSERT INTO
- '.sql_table('plugin_tb').'
- SET
- tb_id = \''.mysql_real_escape_string(intval($tb_id)).'\',
- block = \''.($block ? '1' : '0').'\',
- spam = \''.($spam ? '1' : '0').'\',
- link = \''.($link ? '1' : '0').'\',
- url = \''.mysql_real_escape_string($url).'\',
- title = \''.mysql_real_escape_string($title).'\',
- excerpt = \''.mysql_real_escape_string($excerpt).'\',
- blog_name = \''.mysql_real_escape_string($blog_name).'\',
- timestamp = '.mysqldate($b->getCorrectTime()).'
- ';
-//modify end+++++++++
-
- $res = @sql_query($query);
-
- if (!$res) {
- return 'Could not save trackback data, possibly because of a double entry: ' . mysql_error() . $query;
- }
- }
-
- // 7. Send notification e-mail if needed
- $notifyAddrs = $this->getOption('NotifyEmail');
- $notifyAddrs = ( $notifyAddrs ? $notifyAddrs . ';' : '')
- . $this->getBlogOption($blogId ,'NotifyEmailBlog');
-
- if ($notifyAddrs && $spam == false)
- {
-
- $vars = array (
- 'tb_id' => $tb_id,
- 'url' => $url,
- 'title' => $title,
- 'excerpt' => $excerpt,
- 'blogname' => $blog_name
- );
-
-//modify start+++++++++
-/*
- $vars = array (
- 'tb_id' => $tb_id,
- 'url' => $url,
- 'title' => mb_convert_encoding($title, 'ISO-2022-JP', _CHARSET),
- 'excerpt' => mb_convert_encoding($excerpt, 'ISO-2022-JP', _CHARSET),
- 'blogname' => mb_convert_encoding($blog_name, 'ISO-2022-JP', _CHARSET)
- );
-*/
-//maybe not needed because japanese version has "mb_send_mail" in function notify
-//modify end+++++++++
-
- $mailto_title = TEMPLATE::fill($this->notificationMailTitle, $vars);
- $mailto_msg = TEMPLATE::fill($this->notificationMail, $vars);
-
- global $CONF, $DIR_LIBS;
-
- // make sure notification class is loaded
- if (!class_exists('notification'))
- include($DIR_LIBS . 'NOTIFICATION.php');
-
- $notify = new NOTIFICATION($notifyAddrs);
- $notify->notify($mailto_title, $mailto_msg , $CONF['AdminEmail']);
-
-//mod by cles+++++++++++
- if ($manager->pluginInstalled('NP_Cache')){
- $p =& $manager->getPlugin('NP_Cache');
- $p->setCurrentBlog($tb_id);
- $p->cleanItem($tb_id);
- $p->cleanArray(array('index'));
- }
-//mod by cles end +++++++++++
- }
-
- if( $block )
- return 'Sorry, trackback ping is not accepted.';
- return '';
- }
-
- function xmlResponse($errorMessage = '')
- {
- header('Content-type: application/xml; charset=utf-8');
- echo "<"."?xml version='1.0' encoding='UTF-8'?".">\n";
- echo "<response>\n";
-
- if ($errorMessage){
- if (_CHARSET != 'UTF-8')
- $errorMessage = mb_convert_encoding($errorMessage, 'UTF-8');
- echo "<error>1</error>\n";
- echo "<message>".htmlspecialchars($errorMessage, ENT_QUOTES)."</message>\n";
- } else {
- echo "<error>0</error>\n";
- }
-
- echo "</response>";
- exit;
- }
-
- /*
- * Check if member may send ping (check if logged in)
- */
- function canSendPing() {
- global $member;
- return $member->isLoggedIn() || $this->xmlrpc;
- }
-
-
-//mod by cles
- function redirect($tb_id, $urlHash){
- global $CONF;
- $query = 'SELECT url FROM '.sql_table('plugin_tb').' WHERE tb_id='.intval($tb_id).' and md5(url)="'.$urlHash.'"';
- $res = sql_query($query);
-
- $url = $CONF['SiteURL'];
-
- if ($o = mysql_fetch_object($res)) {
- $url = htmlspecialchars($o->url, ENT_QUOTES);
- }
-
- $url = stripslashes($url);
- $url = str_replace('&','&',$url);
- $url = str_replace('<','<',$url);
- $url = str_replace('>','>',$url);
- $url = str_replace('"','"',$url);
-
- header('Location: '.$url);
- }
-
- function getRequiredURL($itemid){
- global $manager;
- $blog = & $manager->getBlog(getBlogIDFromItemID($itemid));
- if( $this->isEnableLinkCheck($itemid) )
- return $this->_createItemLink($itemid, $blog);
- return null;
- }
-
- function isEnableLinkCheck($itemid){
- $blogid = getBlogIDFromItemID($itemid);
-
- switch( $this->getItemOption($itemid, 'isAcceptW/OLink') ){
- case 'default':
- $def = $this->getBlogOption($blogid, 'isAcceptW/OLinkDef');
- if($def == 'yes')
- return false;
- else
- return $def; // block or ignore
- case 'yes':
- return false;
- case 'no':
- return true;
- default :
- ACTIONLOG :: add(INFO, "Trackback: Unknown Option (itemid:$itemid, value:$val)");
- return false;
- }
- }
-
- function isAcceptTrackBack($itemid = null){
- $ret = false;
- if( $this->getOption('AcceptPing') == 'yes' ){
- $bid = null;
- if($itemid){
- $bid = getBlogIDFromItemID(intval($itemid));
- } else {
- global $blog;
- $bid = $blog->getID();
- }
-
- if( $this->getBlogOption($bid, "AllowTrackBack") == 'yes' ){
- if( $itemid ){
- $ret = ( $this->getItemOption(intval($itemid), 'ItemAcceptPing') == 'yes' ) ? true : false ;
- } else {
- $ret = true;
- }
- } else {
- $ret = false;
- }
- }
- return $ret;
- }
-
-//mod by cles end
-
- /**************************************************************************************
- * EVENTS
- */
-
- function event_SendTrackback($data) {
- global $manager;
-
- // Enable sending trackbacks for the XML-RPC API, otherwise we would
- // get an error because the current user is not exactly logged in.
- $this->xmlrpc = true;
-
- $itemid = $data['tb_id'];
- $item = &$manager->getItem($itemid, 0, 0);
- if (!$item) return; // don't ping for draft & future
- if ($item['draft']) return; // don't ping on draft items
-
- // gather some more information, needed to send the ping (blog name, etc)
- $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
- $blog_name = $blog->getName();
-
- $title = $data['title'] != '' ? $data['title'] : $item['title'];
- $title = strip_tags($title);
-
- $excerpt = $data['body'] != '' ? $data['body'] : $item['body'];
- $excerpt = strip_tags($excerpt);
- $excerpt = $this->_cut_string($excerpt, 200);
-
- $CONF['ItemURL'] = preg_replace('/\/$/', '', $blog->getURL());
- //$url = createItemLink($itemid);
- $url = $this->_createItemLink($itemid, $blog);
-
- while (list(,$url) = each($data['urls'])) {
- $res = $this->sendPing($itemid, $title, $url, $excerpt, $blog_name, $url);
- if ($res) ACTIONLOG::add(WARNING, 'TrackBack Error:' . $res . ' (' . $url . ')');
- }
- }
-
- function event_RetrieveTrackback($data) {
-
- $res = sql_query('
- SELECT
- url,
- title,
- UNIX_TIMESTAMP(timestamp) AS timestamp
- FROM
- '.sql_table('plugin_tb').'
- WHERE
- tb_id = '.intval($data['tb_id']).' AND
- block = 0
- ORDER BY
- timestamp ASC
- ');
-
- while ($row = mysql_fetch_array($res)) {
-
- $trackback = array(
- 'title' => $row['title'],
- 'url' => $row['url'],
- 'ip' => ''
- );
-
- $data['trackbacks'][] = $trackback;
- }
- }
-/*
- function event_BookmarkletExtraHead($data) {
- global $NP_TB_URL;
- list ($NP_TB_URL,) = $this->getURIfromLink(requestVar('loglink'));
- }
-*/
- function event_PrepareItemForEdit($data) {
-// if (!$this->getOption('AutoXMLHttp'))
- if ($this->getOption('AutoXMLHttp') == 'no')
- {
- // The space between body and more is to make sure we didn't join 2 words accidently....
- $this->larray = $this->autoDiscovery($data['item']['body'].' '.$data['item']['more']);
- }
- }
-
- /*
- * After an item has been added to the database, send out a ping if requested
- * (trackback_ping_url variable in request)
- */
- function event_PostAddItem($data) {
- $this->pingTrackback($data);
- }
-
- function event_PreUpdateItem($data) {
- $this->pingTrackback($data);
- }
-
- /**
- * Add trackback options to add item form/bookmarklet
- */
- function event_AddItemFormExtras($data) {
-
-// global $NP_TB_URL;
-
- ?>
- <h3>TrackBack</h3>
- <p>
-<!--modify start+++++++++-->
-<!-- <label for="plug_tb_url">TrackBack Ping URL:</label>
- <input type="text" value="<?php if (isSet($NP_TB_URL)) {echo $NP_TB_URL;} ?>" id="plug_tb_url" name="trackback_ping_url" size="60" />
--->
-<!--modify end+++++++++-->
- <label for="plug_tb_url">TrackBack URL:</label><br />
- <textarea id="plug_tb_url" name="trackback_ping_url" cols="60" rows="5" style="font:normal xx-small Tahoma, Arial, verdana ;"></textarea>
-<input type="button" name="btnAdd" value="<?php echo _TB_LIST_IT?>" onClick="AddStart()" />
-
- <br />
-
- <?php
-// if ($this->getOption('AutoXMLHttp'))
- if ($this->getOption('AutoXMLHttp') == 'yes')
- {
- ?>
- <div id="tb_auto">
-<input type="button" name="discoverit" value="Auto Discover" onclick="tbSetup();" />
- <img id='tb_busy' src='<?php echo $this->getAdminURL(); ?>busy.gif' style="display:none;" /><br />
- <div id="tb_auto_title"></div>
- <table border="1"><tbody id="tb_ping_list"></tbody></table>
- <input type="hidden" id="tb_url_amount" name="tb_url_amount" value="0" />
- </div>
-
- <?php
- $this->jsautodiscovery();
- }
- ?>
- </p>
- <?php
- }
-
- /**
- * Add trackback options to edit item form/bookmarklet
- */
- function event_EditItemFormExtras($data) {
- global $CONF;
- ?>
-<!-- <input type="text" value="" id="plug_tb_url" name="trackback_ping_url" size="60" /><br />-->
- <h3>TrackBack</h3>
- <p>
- <label for="plug_tb_url">TrackBack URL:</label><br />
- <textarea id="plug_tb_url" name="trackback_ping_url" cols="60" rows="5" style="font:normal xx-small Tahoma, Arial, verdana ;"></textarea>
-<input type="button" name="btnAdd" value="<?php echo _TB_LIST_IT?>" onClick="AddStart()" />
-
- <?php
-// if ($this->getOption('AutoXMLHttp'))
- if ($this->getOption('AutoXMLHttp') == 'yes')
- {
- ?>
-
-
- <div id="tb_auto">
-<input type="button" name="discoverit" value="Auto Discover" onclick="tbSetup();" />
- <img id='tb_busy' src='<?php echo $this->getAdminURL(); ?>busy.gif' style="display:none;" /><br />
- <div id="tb_auto_title"></div>
- <table border="1"><tbody id="tb_ping_list"></tbody></table>
- <input type="hidden" id="tb_url_amount" name="tb_url_amount" value="0" />
- </div>
-
- <?php
- $this->jsautodiscovery();
- }
- else
- {
- if (count($this->larray) > 0)
- {
- ?>
- Auto Discovered Ping URL's:<br />
- <?php
- echo '<input type="hidden" name="tb_url_amount" value="'.count($this->larray).'" />';
-
- $i = 0;
-
- while (list($url, $title) = each ($this->larray))
- {
-//modify start+++++++++
- if (_CHARSET != 'UTF-8') {
- $title = $this->_utf8_to_entities($title);
- $title = mb_convert_encoding($title, _CHARSET, 'UTF-8');
- }
-//modify end+++++++++
-
- echo '<input type="checkbox" name="tb_url_'.$i.
- '" value="'.$url.'" id="tb_url_'.$i.
- '" /><label for="tb_url_'.$i.'" title="'.$url.'">'.$title.'</label><br />';
-
- $i++;
- }
- }
- }
- ?>
- </p>
- <?php
- }
-
- /**
- * Insert Javascript AutoDiscovery routines
- */
- function jsautodiscovery()
- {
- global $CONF;
-
- ?>
- <script type='text/javascript' src='<?php echo $this->getAdminURL(); ?>autodetect.php'></script>
- <?php
- }
-
- /**
- * Ping all URLs
- */
- function pingTrackback($data) {
- global $manager, $CONF;
-
- $ping_urls_count = 0;
- $ping_urls = array();
- $localflag = array();
-
- $ping_url = requestVar('trackback_ping_url');
-//modify start+++++++++
-/*
- if ($ping_url) {
- $ping_urls[0] = $ping_url;
- $ping_urls_count++;
- }
-*/
- if (trim($ping_url)) {
- $ping_urlsTemp = array();
- $ping_urlsTemp = preg_split("/[\s,]+/", trim($ping_url));
- for($i=0;$i<count($ping_urlsTemp);$i++){
- $ping_urls[] = trim($ping_urlsTemp[$i]);
- $ping_urls_count++;
- }
- }
-//modify end+++++++++
-
- $tb_url_amount = requestVar('tb_url_amount');
- for ($i=0;$i<$tb_url_amount;$i++) {
- $tb_temp_url = requestVar('tb_url_'.$i);
- if ($tb_temp_url) {
- $ping_urls[$ping_urls_count] = $tb_temp_url;
- $localflag[$ping_urls_count] = (requestVar('tb_url_'.$i.'_local') == 'on')? 1: 0;
- $ping_urls_count++;
- }
- }
-
- if ($ping_urls_count <= 0) {
- return;
- }
-
- $itemid = $data['itemid'];
- $item = &$manager->getItem($itemid, 0, 0);
- if (!$item) return; // don't ping for draft & future
- if ($item['draft']) return; // don't ping on draft items
-
- // gather some more information, needed to send the ping (blog name, etc)
- $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
- $blog_name = $blog->getName();
-
- $title = $data['title'] != '' ? $data['title'] : $item['title'];
- $title = strip_tags($title);
-
- $excerpt = $data['body'] != '' ? $data['body'] : $item['body'];
- $excerpt = strip_tags($excerpt);
- $excerpt = $this->_cut_string($excerpt, 200);
-
-/*
- $CONF['ItemURL'] = preg_replace('/\/$/', '', $blog->getURL());
- $url = createItemLink($itemid);
-*/
- $url = $this->_createItemLink($item['itemid'],$blog);
-
- // send the ping(s) (add errors to actionlog)
- for ($i=0; $i<count($ping_urls); $i++) {
- if( ! $localflag[$i] )
- $res = $this->sendPing($itemid, $title, $url, $excerpt, $blog_name, $ping_urls[$i]);
- else
- $res = $this->handleLocalPing($itemid, $title, $excerpt, $blog_name, $ping_urls[$i]);
- if ($res) ACTIONLOG::add(WARNING, 'TrackBack Error:' . $res . ' (' . $ping_urls[$i] . ')');
- }
- }
-
-
-
-
- /**************************************************************************************
- * AUTO-DISCOVERY
- */
-
- /*
- * Auto-Discovery of TrackBack Ping URLs based on HTML story
- */
- function autoDiscovery($text)
- {
- $links = $this->getPermaLinksFromText($text);
- $result = array();
-
- for ($i = 0; $i < count($links); $i++)
- {
- list ($url, $title) = $this->getURIfromLink($links[$i]);
-
- if ($url != '')
- $result[$url] = $title;
- }
-
- return $result;
- }
-
- /*
- * Auto-Discovery of TrackBack Ping URLs based on single link
- */
- function getURIfromLink($link)
- {
-
- // Check to see if the cache contains this link
- $res = sql_query('SELECT url, title FROM '.sql_table('plugin_tb_lookup').' WHERE link=\''.mysql_real_escape_string($link).'\'');
-
- if ($row = mysql_fetch_array($res))
- {
- if ($row['title'] != '')
- {
-//modify start+++++++++
- if (_CHARSET != 'UTF-8'){
- $row['title'] = mb_convert_encoding($row['title'], 'UTF-8', _CHARSET);
- $row['title'] = $this->_decode_entities($row['title']);
- }
-//modify end+++++++++
- return array (
- $row['url'], $row['title']
- );
- }
- else
- {
- return array (
- $row['url'], $row['url']
- );
- }
- }
-
- // Retrieve RDF
- if (($rdf = $this->getRDFFromLink($link)) !== false)
- {
- // Get PING attribute
- if (($uri = $this->getAttributeFromRDF($rdf, 'trackback:ping')) !== false)
- {
- // Get TITLE attribute
- if (($title = $this->getAttributeFromRDF($rdf, 'dc:title')) !== false)
- {
- // Get CREATOR attribute
- if (($author = $this->getAttributeFromRDF($rdf, 'dc:creator')) !== false)
- {
- $title = $author. ": " . $title;
- }
-
- $uri = $this->_decode_entities($uri);
-//modify start+++++++++
- if (_CHARSET != 'UTF-8')
- $convertedTitle = mb_convert_encoding($title, _CHARSET, 'UTF-8');
- else
- $convertedTitle = $title;
-/*
- // Store in cache
- $res = sql_query("INSERT INTO ".sql_table('plugin_tb_lookup')." (link, url, title) VALUES ('".mysql_real_escape_string($link)."','".mysql_real_escape_string($uri)."','".mysql_real_escape_string($title)."')");
-*/
- // Store in cache
- $res = sql_query("INSERT INTO ".sql_table('plugin_tb_lookup')." (link, url, title) VALUES ('".mysql_real_escape_string($link)."','".mysql_real_escape_string($uri)."','".mysql_real_escape_string($convertedTitle)."')");
-//modify end+++++++++
- $title = $this->_decode_entities($title);
-
- return array (
- $uri, $title
- );
- }
- else
- {
- $uri = html_entity_decode($uri, ENT_COMPAT);
-
- // Store in cache
- $res = sql_query("INSERT INTO ".sql_table('plugin_tb_lookup')." (link, url, title) VALUES ('".mysql_real_escape_string($link)."','".mysql_real_escape_string($uri)."','')");
-
- return array (
- $uri, $uri
- );
- }
- }
- }
-
- // Store in cache
- $res = sql_query("INSERT INTO ".sql_table('plugin_tb_lookup')." (link, url, title) VALUES ('".mysql_real_escape_string($link)."','','')");
-
- return array ('', '');
- }
-
- /*
- * Detect links used in HTML code
- */
- function getPermaLinksFromText($text)
- {
- $links = array();
-
- if (preg_match_all('/<a +([^>]+)>/i', $text, $array, PREG_SET_ORDER))
- {
- $count = count($array);
- for ($i = 0; $i < $count; $i++)
- {
- if( preg_match('/https?:\/\/[-_.!~*\'()a-z0-9;\/?:@&=+$,%]+/i', $array[$i][1], $matches) )
- $links[$matches[0]] = 1;
- }
- }
-
- return array_keys($links);
- }
-
- /*
- * Retrieve RDF code from external link
- */
- function getRDFFromLink($link)
- {
- if ($content = $this->getContents($link))
- {
- preg_match_all('/(<rdf:RDF.*?<\/rdf:RDF>)/sm', $content, $rdfs, PREG_SET_ORDER);
-
- if (count($rdfs) > 1)
- {
- for ($i = 0; $i < count($rdfs); $i++)
- {
- if (preg_match('|dc:identifier="'.preg_quote($link).'"|ms',$rdfs[$i][1]))
- {
- return $rdfs[$i][1];
- }
- }
- }
- else
- {
- // No need to check the identifier
- return $rdfs[0][1];
- }
- }
-
- return false;
- }
-
- /**
- * Retrieve the contents of an external (X)HTML document
- */
- function getContents($link) {
-
- // Use cURL extention if available
- if (function_exists("curl_init") && $this->useCurl == 2)
- {
- // Make HEAD request
- $ch = curl_init();
- @curl_setopt($ch, CURLOPT_URL, $link);
- @curl_setopt($ch, CURLOPT_HEADER, true);
- @curl_setopt($ch, CURLOPT_NOBODY, true);
- @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
- @curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
- @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- @curl_setopt($ch, CURLOPT_TIMEOUT, 20);
- @curl_setopt($ch, CURLOPT_USERAGENT, $this->userAgent);
-
- $headers = curl_exec($ch);
- curl_close($ch);
-
- // Check if the link points to a (X)HTML document
- if (preg_match('/Content-Type: (text\/html|application\/xhtml+xml)/i', $headers))
- {
- return $this->retrieveUrl ($link);
- }
-
- return false;
- }
- else
- {
- return $this->retrieveUrl ($link);
- }
- }
-
- /*
- * Get a single attribute from RDF
- */
- function getAttributeFromRDF($rdf, $attribute)
- {
- if (preg_match('/'.$attribute.'="([^"]+)"/', $rdf, $matches))
- {
- return $matches[1];
- }
-
- return false;
- }
-
-
-
-
-
-
- /**************************************************************************************/
- /* Internal helper functions for dealing with external file retrieval */
-
- function retrieveUrl ($url) {
-//mod by cles
- $ua = ini_set('user_agent', $this->userAgent);
-//mod by cles end
- if (function_exists('curl_init') && $this->useCurl > 0)
- {
- // Set options
- $ch = curl_init();
- @curl_setopt($ch, CURLOPT_URL, $url);
- @curl_setopt($ch, CURLOPT_HEADER, 1);
- @curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- @curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
- @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
- @curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
- @curl_setopt($ch, CURLOPT_TIMEOUT, 20);
- @curl_setopt($ch, CURLOPT_USERAGENT, $this->userAgent);
-
- // Retrieve response
- $raw = curl_exec($ch);
- $info = curl_getinfo($ch);
-
- // Split into headers and contents
- $headers = substr($raw, 0, $info['header_size']);
- $contents = substr($raw, $info['header_size']);
-
- curl_close($ch);
- }
- elseif ($fp = @fopen ($url, "rb"))
- {
-//mod by cles
-// $contents = fread($fp, 8192);
- $contents = '';
- while (!feof($fp)) {
- $contents .= fread($fp, 8192);
- }
-//mod by cles end
- $headers = '';
-
- fclose($fp);
- }
-//mod by cles
- ini_set('user_agent', $ua);
-//mod by cles end
-
- // Next normalize the encoding to UTF8...
- $contents = $this->_convert_to_utf8_auto($contents, $headers);
-
- return $contents;
- }
-
-
- /**************************************************************************************/
- /* Internal helper functions for dealing with encodings and entities */
-
- var $entities_default = array (
- '"' => '"',
- '&' => '&',
- ''' => ''',
- '<' => '<',
- '>' => '>',
- );
-
-//modify start+++++++++
- function _restore_to_utf8($contents)
- {
- if (_CHARSET != 'UTF-8')
- {
- $contents = mb_convert_encoding($contents, 'UTF-8', _CHARSET);
- }
- $contents = $this->_decode_entities(strip_tags($contents));
- return $contents;
- }
-//modify end+++++++++
- function _detect_encoding($string)
- {
-//modify start+++++++++
- if (function_exists('mb_convert_encoding')) {
- $encoding = (preg_match ("/;\s*charset=([^\n]+)/is", serverVar("CONTENT_TYPE"), $regs))?
- strtoupper(trim($regs[1])):
- '';
-
- if ( ($encoding !="") && ((mb_http_input("P") == "") || ( strtolower( ini_get("mbstring.http_input") ) == "pass")) ) {
- return $encoding;
- } else {
- $encoding = mb_detect_encoding($string, 'UTF-8,EUC-JP,SJIS,ISO-8859-1,ASCII,JIS');
- }
- return ( $encoding ) ? $encoding : 'ISO-8859-1';
- }
-//modify end+++++++++
- if (!ereg("[\x80-\xFF]", $string) && !ereg("\x1B", $string))
- return 'US-ASCII';
-
- if (!ereg("[\x80-\xFF]", $string) && ereg("\x1B", $string))
- return 'ISO-2022-JP';
-
- if (preg_match("/^([\x01-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF][\x80-\xBF])+$/", $string) == 1)
- return 'UTF-8';
-
- if (preg_match("/^([\x01-\x7F]|\x8E[\xA0-\xDF]|\x8F[xA1-\xFE][\xA1-\xFE]|[\xA1-\xFE][\xA1-\xFE])+$/", $string) == 1)
- return 'EUC-JP';
-
- if (preg_match("/^([\x01-\x7F]|[\xA0-\xDF]|[\x81-\xFC][\x40-\xFC])+$/", $string) == 1)
- return 'Shift_JIS';
-
- return 'ISO-8859-1';
- }
-
- function _convert_to_utf8($contents, $encoding)
- {
- $done = false;
-
-//modify start+++++++++
-// if (!$done && function_exists('iconv'))
-// {
-//
-// $result = @iconv($encoding, 'UTF-8//IGNORE', $contents);
-//
-// if ($result)
-// {
-// $contents = $result;
-// $done = true;
-// }
-// }
-
- if(!$done && function_exists('mb_convert_encoding'))
- {
-
- if( function_exists('mb_substitute_character') ){
- @mb_substitute_character('none');
- }
- $result = @mb_convert_encoding($contents, 'UTF-8', $encoding );
-
- if ($result)
- {
- $contents = $result;
- $done = true;
- }
- }
-
- if (!$done && function_exists('iconv'))
- {
-
- $result = @iconv($encoding, 'UTF-8//IGNORE', $contents);
-
- if ($result)
- {
- $contents = $result;
- $done = true;
- }
- }
-//modify end+++++++++
- return $contents;
- }
-
- function _convert_to_utf8_auto($contents, $headers = '')
- {
- /* IN: string in unknown encoding, headers received during transfer
- * OUT: string in UTF-8 encoding
- */
-
- $str = substr($contents, 0, 4096);
- $len = strlen($str);
- $pos = 0;
- $out = '';
-
- while ($pos < $len)
- {
- $ord = ord($str[$pos]);
-
- if ($ord > 32 && $ord < 128)
- $out .= $str[$pos];
-
- $pos++;
- }
-
- // Detection of encoding, check headers
- if (preg_match ("/;\s*charset=([^\n]+)/is", $headers, $regs))
- $encoding = strtoupper(trim($regs[1]));
-
- // Then check meta inside document
- if (preg_match ("/;\s*charset=([^\"']+)/is", $out, $regs))
- $encoding = strtoupper(trim($regs[1]));
-
- // Then check xml declaration
- if (preg_match("/<\?xml.+encoding\s*=\s*[\"|']([^\"']+)[\"|']\s*\?>/i", $out, $regs))
- $encoding = strtoupper(trim($regs[1]));
-
- // Converts
- return $this->_convert_to_utf8($contents, $encoding);
- }
-
- function _decode_entities($string)
- {
- /* IN: string in UTF-8 containing entities
- * OUT: string in UTF-8 without entities
- */
-
- /// Convert all hexadecimal entities to decimal entities
- $string = preg_replace('/&#[Xx]([0-9A-Fa-f]+);/e', "'&#'.hexdec('\\1').';'", $string);
-
- global $_entities;
- // Deal with invalid cp1251 numeric entities
- $string = strtr($string, $_entities['cp1251']);
-
- // Convert all named entities to numeric entities
- $string = strtr($string, $this->entities_default);
- $string = strtr($string, $_entities['named']);
-
- // Convert all numeric entities to UTF-8
- $string = preg_replace('/&#([0-9]+);/e', "'&#x'.dechex('\\1').';'", $string);
- $string = preg_replace('/&#[Xx]([0-9A-Fa-f]+);/e', "NP_TrackBack::_hex_to_utf8('\\1')", $string);
-
- return $string;
- }
-
- function _hex_to_utf8($s){
- return entity::_hex_to_utf8($s);
- }
-
- function _utf8_to_entities($string)
- {
- /* IN: string in UTF-8 encoding
- * OUT: string consisting of only characters ranging from 0x00 to 0x7f,
- * using numeric entities to represent the other characters
- */
-
- $len = strlen ($string);
- $pos = 0;
- $out = '';
-
- while ($pos < $len)
- {
- $ascii = ord (substr ($string, $pos, 1));
-
- if ($ascii >= 0xF0)
- {
- $byte[1] = ord(substr ($string, $pos, 1)) - 0xF0;
- $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
- $byte[3] = ord(substr ($string, $pos + 2, 1)) - 0x80;
- $byte[4] = ord(substr ($string, $pos + 3, 1)) - 0x80;
-
- $char_code = ($byte[1] << 18) + ($byte[2] << 12) + ($byte[3] << 6) + $byte[4];
- $pos += 4;
- }
- elseif (($ascii >= 0xE0) && ($ascii < 0xF0))
- {
- $byte[1] = ord(substr ($string, $pos, 1)) - 0xE0;
- $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
- $byte[3] = ord(substr ($string, $pos + 2, 1)) - 0x80;
-
- $char_code = ($byte[1] << 12) + ($byte[2] << 6) + $byte[3];
- $pos += 3;
- }
- elseif (($ascii >= 0xC0) && ($ascii < 0xE0))
- {
- $byte[1] = ord(substr ($string, $pos, 1)) - 0xC0;
- $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
-
- $char_code = ($byte[1] << 6) + $byte[2];
- $pos += 2;
- }
- else
- {
- $char_code = ord(substr ($string, $pos, 1));
- $pos += 1;
- }
-
- if ($char_code < 0x80)
- $out .= chr($char_code);
- else
- $out .= '&#'. str_pad($char_code, 5, '0', STR_PAD_LEFT) . ';';
- }
-
- return $out;
- }
-
- function _utf8_to_javascript($string)
- {
- /* IN: string in UTF-8 encoding
- * OUT: string consisting of only characters ranging from 0x00 to 0x7f,
- * using javascript escapes to represent the other characters
- */
-
- $len = strlen ($string);
- $pos = 0;
- $out = '';
-
- while ($pos < $len)
- {
- $ascii = ord (substr ($string, $pos, 1));
-
- if ($ascii >= 0xF0)
- {
- $byte[1] = ord(substr ($string, $pos, 1)) - 0xF0;
- $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
- $byte[3] = ord(substr ($string, $pos + 2, 1)) - 0x80;
- $byte[4] = ord(substr ($string, $pos + 3, 1)) - 0x80;
-
- $char_code = ($byte[1] << 18) + ($byte[2] << 12) + ($byte[3] << 6) + $byte[4];
- $pos += 4;
- }
- elseif (($ascii >= 0xE0) && ($ascii < 0xF0))
- {
- $byte[1] = ord(substr ($string, $pos, 1)) - 0xE0;
- $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
- $byte[3] = ord(substr ($string, $pos + 2, 1)) - 0x80;
-
- $char_code = ($byte[1] << 12) + ($byte[2] << 6) + $byte[3];
- $pos += 3;
- }
- elseif (($ascii >= 0xC0) && ($ascii < 0xE0))
- {
- $byte[1] = ord(substr ($string, $pos, 1)) - 0xC0;
- $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
-
- $char_code = ($byte[1] << 6) + $byte[2];
- $pos += 2;
- }
- else
- {
- $char_code = ord(substr ($string, $pos, 1));
- $pos += 1;
- }
-
- if ($char_code < 0x80)
- $out .= chr($char_code);
- else
- $out .= '\\u'. str_pad(dechex($char_code), 4, '0', STR_PAD_LEFT);
- }
-
- return $out;
- }
-/*
- function _cut_string($string, $dl = 0) {
-
- $defaultLength = $dl > 0 ? $dl : $this->getOption('defaultLength');
-
- if ($defaultLength < 1)
- return $string;
-
- $border = 6;
- $count = 0;
- $lastvalue = 0;
-
- for ($i = 0; $i < strlen($string); $i++)
- {
- $value = ord($string[$i]);
-
- if ($value > 127)
- {
- if ($value >= 192 && $value <= 223)
- $i++;
- elseif ($value >= 224 && $value <= 239)
- $i = $i + 2;
- elseif ($value >= 240 && $value <= 247)
- $i = $i + 3;
-
- if ($lastvalue <= 223 && $value >= 223 &&
- $count >= $defaultLength - $border)
- {
- return substr($string, 0, $i) . '...';
- }
-
- // Chinese and Japanese characters are
- // wider than Latin characters
- if ($value >= 224)
- $count++;
-
- }
- elseif ($string[$i] == '/' || $string[$i] == '?' ||
- $string[$i] == '-' || $string[$i] == ':' ||
- $string[$i] == ',' || $string[$i] == ';')
- {
- if ($count >= $defaultLength - $border)
- return substr($string, 0, $i) . '...';
- }
- elseif ($string[$i] == ' ')
- {
- if ($count >= $defaultLength - $border)
- return substr($string, 0, $i) . '...';
- }
-
- if ($count == $defaultLength)
- return substr($string, 0, $i + 1) . '...';
-
- $lastvalue = $value;
- $count++;
- }
-
- return $string;
- }
-*/
-
-function _cut_string($string, $dl = 0) {
- $maxLength = $dl > 0 ? $dl : $this->getOption('defaultLength');
-
- if ($maxLength < 1)
- return $string;
- if (strlen($string) > $maxLength)
- $string = mb_strimwidth($string, 0, $maxLength, '...', _CHARSET);
-
- return $string;
-}
-
-function _strip_controlchar($string){
- $string = preg_replace("/[\x01-\x08\x0b\x0c\x0e-\x1f\x7f]+/","",$string);
- $string = str_replace("\0","",$string);
- return $string;
-}
-
-//modify start+++++++++
- function checkTableVersion(){
- $res = sql_query("SHOW FIELDS from ".sql_table('plugin_tb') );
- $fieldnames = array();
- while ($co = mysql_fetch_assoc($res)) {
- if($co['Field'] == 'block') return true;
- }
- return false;
- }
-//modify end+++++++++
-
-/*---------------------------------------------------------------------------------- */
-/* LOCAL */
-/*---------------------------------------------------------------------------------- */
- /**
- * Handle an incoming TrackBack ping and save the data in the database
- */
- function handleLocalPing($itemid, $title, $excerpt, $blog_name, $ping_url){
- global $manager;
- $ping_url = trim($ping_url);
-
- if( preg_match("/^.+tb_id=([0-9]+)$/",$ping_url,$idnum) ){
- $tb_id = intval($idnum[1]);
- } elseif ( preg_match("/([0-9]+)\.trackback/",$ping_url,$idnum) ){
- $tb_id = intval($idnum[1]);
- } elseif ( preg_match("/itemid=([0-9]+)/",$ping_url,$idnum) ){
- $tb_id = intval($idnum[1]);
- }
-
- if ((!$manager->existsItem($tb_id,0,0)) && ($this->getOption('CheckIDs') == 'yes'))
- return _ERROR_NOSUCHITEM . "[ $tb_id ]";
-
- // save data in the DB
- $query = 'INSERT INTO ' . sql_table('plugin_tb_lc') . " (tb_id, from_id) VALUES ('".intval($tb_id)."','".intval($itemid)."')";
- $res = @sql_query($query);
- if (!$res)
- return 'Could not save trackback data, possibly because of a double entry: ' . mysql_error();
- }
-
- /**
- * Show the list of TrackBack pings for a certain Trackback ID
- */
- function showLocalList($tb_id) {
- global $CONF, $manager;
-
- // create SQL query
- $query = 'SELECT t.from_id as from_id , i.ititle as ititle, i.ibody as ibody, i.itime as itime, i.iblog as iblog FROM '.sql_table('plugin_tb_lc').' as t, '.sql_table('item').' as i WHERE t.tb_id='.intval($tb_id) .' and i.inumber=t.from_id ORDER BY i.itime DESC';
- $res = sql_query($query);
-
- $vars = array(
- 'tburl' => $this->getTrackBackUrl($tb_id)
- );
-
- // when no TrackBack pings are found
- if (!$res || mysql_num_rows($res) == 0) {
- echo TEMPLATE::fill($this->getOption('tplLocalEmpty'), $vars);
- return;
- }
-
- // when TrackBack pings are found
- echo TEMPLATE::fill($this->getOption('tplLocalHeader'), $vars);
-
- while ($o = mysql_fetch_object($res)) {
- $canDelete = $this->canDelete($tb_id);
- $data = array(
- 'url' => createItemLink($o->from_id),
- 'blogname' => htmlspecialchars(getBlogNameFromID($o->iblog)),
- 'timestamp' => strftime('%Y-%m-%d',strtotime($o->itime)),
- 'title' => htmlspecialchars($o->ititle),
- 'excerpt' => htmlspecialchars(shorten(strip_tags($o->ibody),200,'...')),
- 'delete' => $canDelete?'<a href="'. $manager->addTicketToUrl($CONF['ActionURL'].'?action=plugin&name=TrackBack&type=deletelc&tb_id='.intval($tb_id).'&from_id='.intval($o->from_id)).'">[delete]</a>':'',
- 'tburl' => $this->getTrackBackUrl($tb_id),
- 'commentcount'=> quickQuery('SELECT COUNT(*) as result FROM '.sql_table('comment').' WHERE citem=' . intval($o->from_id))
- );
- echo TEMPLATE::fill($this->getOption('tplLocalItem'), $data);
- }
- echo TEMPLATE::fill($this->getOption('tplLocalFooter'), $vars);
- }
-
- /**
- * Delete a TrackBack item, redirect to referer
- */
- function deleteLocal($tb_id, $from_id) {
- if (!$this->canDelete($tb_id))
- return 'You\'re not allowed to delete this trackback item';
- $query = 'DELETE FROM ' . sql_table('plugin_tb_lc') . " WHERE tb_id='" . intval($tb_id) . "' and from_id='" . intval($from_id) ."'";
- sql_query($query);
- return '';
- }
-
- function canDelete($tb_id) {
- global $member, $manager;
-
- if ( ! $member->isLoggedIn() ) return 0;
-
- $checkIDs = $this->getOption('CheckIDs');
- $itemExists =& $manager->existsItem($tb_id,0,0);
-
- // if CheckIDs option is set, check if member canEdit($tb_id)
- // if CheckIDs option is not set, and item exists, check if member canEdit($tb_id)
- // if CheckIDs option is not set, and item does not exists, check if member isAdmin()
-
- if (($checkIDs == 'yes') || ($itemExists))
- return $member->canAlterItem($tb_id);
- else
- return $member->isAdmin();
- }
-
- /**************************************************************************************/
- /* Plugin API calls, for installation, configuration and setup */
-
- function getName() { return 'TrackBack'; }
- function getAuthor() { return 'rakaz + nakahara21 + hsur'; }
- function getURL() { return 'http://blog.cles.jp/np_cles/category/31/subcatid/3'; }
- function getVersion() { return '2.0.3 jp12'; }
- function getDescription() { return '[$Revision: 1.22 $]<br />' . _TB_DESCRIPTION; }
-
-//modify start+++++++++
-/*
- function getTableList() { return array(sql_table("plugin_tb"), sql_table("plugin_tb_lookup")); }
- function getEventList() { return array('QuickMenu','PostAddItem','AddItemFormExtras','EditItemFormExtras','PreUpdateItem','PrepareItemForEdit', 'BookmarkletExtraHead'); }
-*/
- function getTableList() { return array(sql_table("plugin_tb"), sql_table("plugin_tb_lookup"), sql_table('plugin_tb_lc')); }
-
- function getEventList() { return array('QuickMenu','PostAddItem','AddItemFormExtras','EditItemFormExtras','PreUpdateItem','PrepareItemForEdit', 'BookmarkletExtraHead', 'RetrieveTrackback', 'SendTrackback', 'InitSkinParse'); }
-//modify end+++++++++
- function getMinNucleusVersion() { return 330; }
-
- function supportsFeature($feature) {
- switch($feature) {
- case 'SqlTablePrefix':
- return 1;
-//modify start+++++++++
-// case 'HelpPage':
-// return 1;
-//modify end+++++++++
- default:
- return 0;
- }
- }
-
-
- function hasAdminArea() { return 1; }
-
- function event_QuickMenu(&$data) {
- global $member, $nucleus, $blogid;
-
- // only show to admins
- if (!$member->isLoggedIn()) return;
-
- array_push(
- $data['options'],
- array(
- 'title' => 'Trackback',
- 'url' => $this->getAdminURL(),
- 'tooltip' => 'Manage your trackbacks'
- )
- );
- }
-
- function install() {
- $this->createOption('AcceptPing', _TB_AcceptPing,'yesno','yes');
- $this->createOption('SendPings', _TB_SendPings,'yesno','yes');
- $this->createOption('AutoXMLHttp', _TB_AutoXMLHttp, 'yesno', 'yes');
- $this->createOption('CheckIDs', _TB_CheckIDs,'yesno','yes');
-
- $this->createOption('tplHeader', _TB_tplHeader, 'textarea', _TB_tplHeader_VAL);
- $this->createOption('tplEmpty', _TB_tplEmpty, 'textarea', _TB_tplEmpty_VAL);
- $this->createOption('tplItem', _TB_tplItem, 'textarea', _TB_tplItem_VAL);
- $this->createOption('tplFooter', _TB_tplFooter, 'textarea', _TB_tplFooter_VAL);
-//mod by cles
- $this->createOption('tplLocalHeader', _TB_tplLocalHeader, 'textarea', _TB_tplLocalHeader_VAL);
- $this->createOption('tplLocalEmpty', _TB_tplLocalEmpty, 'textarea', _TB_tplLocalEmpty_VAL);
- $this->createOption('tplLocalItem', _TB_tplLocalItem, 'textarea', _TB_tplLocalItem_VAL);
- $this->createOption('tplLocalFooter', _TB_tplLocalFooter, 'textarea', _TB_tplLocalFooter_VAL);
-//mod by cles end
-
- $this->createOption('tplTbNone', _TB_tplTbNone, 'text', "No Trackbacks");
- $this->createOption('tplTbOne', _TB_tplTbOne, 'text', "1 Trackback");
- $this->createOption('tplTbMore', _TB_tplTbMore, 'text', "<%number%> Trackbacks");
- $this->createOption('dateFormat', _TB_dateFormat, 'text', _TB_dateFormat_VAL);
-
- $this->createOption('NotifyEmail', _TB_NotifyEmail,'text','');
- $this->createOption('DropTable', _TB_DropTable,'yesno','no');
-//mod by cles
- $this->createOption('HideUrl',_TB_HideUrl,'yesno','yes');
- $this->createOption('ajaxEnabled',_TB_ajaxEnabled,'yesno','no');
-
- $this->createItemOption('ItemAcceptPing',_TB_ItemAcceptPing,'yesno','yes');
- $this->createItemOption('isAcceptW/OLink',_TB_isAcceptWOLink,'select','default', _TB_isAcceptWOLink_VAL);
-
- $this->createBlogOption('NotifyEmailBlog', _TB_NotifyEmailBlog,'text','');
- $this->createBlogOption('isAcceptW/OLinkDef',_TB_isAcceptWOLinkDef,'select','block', _TB_isAcceptWOLinkDef_VAL);
- $this->createBlogOption('AllowTrackBack',_TB_AllowTrackBack,'yesno','yes');
-//mod by cles end
-
- /* Create tables */
- sql_query("
- CREATE TABLE IF NOT EXISTS
- ".sql_table('plugin_tb')."
- (
- `id` INT(11) NOT NULL AUTO_INCREMENT,
- `tb_id` INT(11) NOT NULL,
- `url` TEXT NOT NULL,
- `block` TINYINT(4) NOT NULL,
- `spam` TINYINT(4) NOT NULL,
- `link` TINYINT(4) NOT NULL,
- `title` TEXT,
- `excerpt` TEXT,
- `blog_name` TEXT,
- `timestamp` DATETIME,
-
- PRIMARY KEY (`id`)
- )
- ");
-
- sql_query("
- CREATE TABLE IF NOT EXISTS
- ".sql_table('plugin_tb_lookup')."
- (
- `link` TEXT NOT NULL,
- `url` TEXT NOT NULL,
- `title` TEXT,
-
- PRIMARY KEY (`link` (100))
- )
- ");
-//modify start+++++++++
- @sql_query('ALTER TABLE `' . sql_table('plugin_tb') . '` ADD INDEX `tb_id_block_timestamp_idx` ( `tb_id`, `block`, `timestamp` DESC )');
- @sql_query('CREATE TABLE IF NOT EXISTS ' . sql_table('plugin_tb_lc'). ' (tb_id int(11) not null, from_id int(11) not null, PRIMARY KEY (tb_id,from_id))');
-//modify end+++++++++
- }
-
- function uninstall() {
- if ($this->getOption('DropTable') == 'yes') {
- sql_query ('DROP TABLE '.sql_table('plugin_tb'));
- sql_query ('DROP TABLE '.sql_table('plugin_tb_lookup'));
- sql_query ("DROP table ".sql_table('plugin_tb_lc'));
- }
- }
-
- function init() {
- // include language file for this plugin
- $language = ereg_replace( '[\\|/]', '', getLanguageName());
- if (file_exists($this->getDirectory().'language/'.$language.'.php'))
- include_once($this->getDirectory().'language/'.$language.'.php');
- else
- include_once($this->getDirectory().'language/'.'english.php');
- $this->notificationMail = _TB_NORTIFICATION_MAIL_BODY;
- $this->notificationMailTitle = _TB_NORTIFICATION_MAIL_TITLE;
-
- $this->userAgent = 'NucleusCMS NP_TrackBack plugin ( '.$this->getVersion().' )';
- }
- }
+ <?php\r
+ }\r
+\r
+ /**\r
+ * Retrieving TrackBack Pings (when __mode=rss)\r
+ */\r
+ function rssResponse($tb_id) {\r
+ $itemid = intval($itemid);\r
+ global $manager, $CONF;\r
+ $item =& $manager->getItem($tb_id, 0, 0);\r
+ \r
+ if($item)\r
+ {\r
+ $blog =& $manager->getBlog(getBlogIDFromItemID($item['itemid']));\r
+ \r
+ $blog_name = $blog->getName();\r
+ $title = $item['title'];\r
+ $excerpt = $item['body'];\r
+\r
+//modify start+++++++++\r
+/*\r
+ if (_CHARSET != 'UTF-8')\r
+ {\r
+ $title = $this->_convert_to_utf8($title, $encoding);\r
+ $excerpt = $this->_convert_to_utf8($excerpt, $encoding);\r
+ $blog_name = $this->_convert_to_utf8($blog_name, $encoding);\r
+ }\r
+\r
+ $title = $this->_decode_entities(strip_tags($title));\r
+ $excerpt = $this->_decode_entities(strip_tags($excerpt));\r
+ $blog_name = $this->_decode_entities(strip_tags($blog_name));\r
+*/\r
+\r
+ $title = $this->_restore_to_utf8($title);\r
+ $excerpt = $this->_restore_to_utf8($excerpt);\r
+ $blog_name = $this->_restore_to_utf8($blog_name);\r
+//modify end+++++++++\r
+\r
+ $excerpt = $this->_cut_string($excerpt, 200);\r
+\r
+ \r
+//modify start+++++++++\r
+/*\r
+ $CONF['ItemURL'] = preg_replace('/\/$/', '', $blog->getURL()); \r
+ $url = createItemLink($item['itemid'],''); \r
+*/\r
+ $url = $this->_createItemLink($item['itemid'],$blog); \r
+//modify end+++++++++\r
+ \r
+ // Use UTF-8 charset for output\r
+ header('Content-Type: text/xml');\r
+ echo "<","?xml version='1.0' encoding='UTF-8'?",">\n";\r
+ \r
+ echo "<response>\n";\r
+ echo "\t<error>0</error>\n";\r
+ echo "\t<rss version='0.91'>\n";\r
+ echo "\t\t<channel>\n";\r
+ echo "\t\t\t<title>".htmlspecialchars($title, ENT_QUOTES)."</title>\n";\r
+ echo "\t\t\t<link>".htmlspecialchars($url, ENT_QUOTES)."</link>\n";\r
+ echo "\t\t\t<description>".htmlspecialchars($excerpt, ENT_QUOTES)."</description>\n";\r
+ \r
+ $query = 'SELECT url, blog_name, excerpt, title, UNIX_TIMESTAMP(timestamp) as timestamp FROM '.sql_table('plugin_tb').' WHERE tb_id='.intval($tb_id).' AND block = 0 ORDER BY timestamp DESC';\r
+ $res = sql_query($query);\r
+ while ($o = mysql_fetch_object($res)) \r
+ {\r
+ // No need to do conversion, because it is already UTF-8\r
+ $data = array (\r
+ 'url' => htmlspecialchars($o->url, ENT_QUOTES),\r
+ 'blogname' => htmlspecialchars($this->_restore_to_utf8($o->blog_name), ENT_QUOTES),\r
+ 'timestamp' => strftime('%Y-%m-%d',$o->timestamp),\r
+ 'title' => htmlspecialchars($this->_restore_to_utf8($o->title), ENT_QUOTES),\r
+ 'excerpt' => htmlspecialchars($this->_restore_to_utf8($o->excerpt), ENT_QUOTES),\r
+ 'tburl' => $this->getTrackBackUrl($tb_id)\r
+ );\r
+ \r
+ echo "\n";\r
+ echo "\t\t\t<item>\n";\r
+ echo "\t\t\t\t<title>".$data['title']."</title>\n";\r
+ echo "\t\t\t\t<link>".$data['url']."</link>\n";\r
+ echo "\t\t\t\t<description>".$data['excerpt']."</description>\n";\r
+ echo "\t\t\t</item>\n";\r
+ }\r
+ echo "\t\t</channel>\n";\r
+ echo "\t</rss>\n";\r
+ echo "</response>";\r
+ exit;\r
+ }\r
+ else\r
+ {\r
+ $this->xmlResponse(_ERROR_NOSUCHITEM);\r
+ }\r
+ \r
+ }\r
+\r
+\r
+\r
+ /**************************************************************************************\r
+ * SENDING AND RECEIVING TRACKBACK PINGS\r
+ */\r
+\r
+ /* \r
+ * Send a Trackback ping to another website\r
+ */\r
+ function sendPing($itemid, $title, $url, $excerpt, $blog_name, $ping_url) \r
+ {\r
+ $sendEncoding = 'UTF-8';\r
+ \r
+ // 1. Check some basic things\r
+ if (!$this->canSendPing()) {\r
+ return 'You\'re not allowed to send pings';\r
+ }\r
+ \r
+ if ($this->getOption('SendPings') == 'no') {\r
+ return 'Sending trackback pings is disabled';\r
+ }\r
+ \r
+ if ($ping_url == '') {\r
+ return 'No ping URL';\r
+ }\r
+ \r
+ // 2. Check if protocol is correct http URL\r
+ $parsed_url = parse_url($ping_url);\r
+\r
+ if ($parsed_url['scheme'] != 'http' || $parsed_url['host'] == '')\r
+ return 'Bad ping URL';\r
+ \r
+ $port = ($parsed_url['port']) ? $parsed_url['port'] : 80;\r
+ \r
+ // 3. Create contents\r
+ if($sendEncoding != _CHARSET){\r
+ $title = mb_convert_encoding($title, $sendEncoding, _CHARSET);\r
+ $excerpt = mb_convert_encoding($excerpt, $sendEncoding, _CHARSET);\r
+ $blog_name = mb_convert_encoding($blog_name, $sendEncoding, _CHARSET);\r
+ }\r
+ \r
+ \r
+ $content = 'title=' . urlencode( $title );\r
+ $content .= '&url=' . urlencode( $url );\r
+ $content .= '&excerpt=' . urlencode( $excerpt );\r
+ $content .= '&blog_name=' . urlencode( $blog_name );\r
+ \r
+ // 4. Prepare HTTP request\r
+ $request = 'POST ' . $parsed_url['path'];\r
+\r
+ if ($parsed_url['query'] != '')\r
+ $request .= '?' . $parsed_url['query'];\r
+ \r
+ $request .= " HTTP/1.1\r\n";\r
+ $request .= "Accept: */*\r\n";\r
+ $request .= "User-Agent: " . $this->userAgent . "\r\n";\r
+ $request .= ( $port == 80 )?\r
+ "Host: " . $parsed_url['host'] . "\r\n":\r
+ "Host: " . $parsed_url['host'] . ":" . $port . "\r\n";\r
+ $request .= "Cache-Control: no-cache\r\n";\r
+ $request .= "Connection: Close\r\n";\r
+ $request .= "Content-Length: " . strlen( $content ) . "\r\n";\r
+ $request .= "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n";\r
+ $request .= "\r\n";\r
+ $request .= $content;\r
+ \r
+ $socket = fsockopen( $parsed_url['host'], $port, $errno, $errstr );\r
+ if ( ! $socket )\r
+ return 'Could not send ping: '.$errstr.' ('.$errno.')';\r
+ \r
+ // 5. Execute HTTP request\r
+ fputs($socket, $request);\r
+ \r
+ // 6. Receive response\r
+ $result = '';\r
+ while (!feof($socket)) {\r
+ $result .= fgets($socket, 4096);\r
+ }\r
+ \r
+ fclose($socket);\r
+ \r
+//modify start+++++++++\r
+ list($header, $body) = split("\r\n\r\n", $result, 2);\r
+ preg_match("/HTTP\/1\.[0-1] ([0-9]+) ([^\r\n]*)\r?\n/", $header, $httpresp);\r
+ $respCd = $httpresp[1];\r
+ $respMsg = $httpresp[2];\r
+\r
+ if( $respCd != 200 ){\r
+ return 'An error occurred: HTTP Error: [' . $respCd . '] ' . $respMsg;\r
+ }\r
+ \r
+ if( defined('NP_TRACKBACK_USE_XML_PARSER') && function_exists('xml_parser_create') ){\r
+ $p = new NP_TrackBack_XMLParser();\r
+\r
+ # remove invalid string\r
+ $body = strstr($body, '<');\r
+ $body = substr($body, 0, strrpos($body,'>') === false ? 0 : strrpos($body,'>') + 1 );\r
+\r
+ $p->parse($body);\r
+ $p->free();\r
+ if( $p->isError ){\r
+ $errorMessage = mb_convert_encoding($p->message, _CHARSET, 'UTF-8');\r
+ return 'An error occurred: ' . htmlspecialchars($errorMessage, ENT_QUOTES);\r
+ }\r
+ } else {\r
+ if ( strpos($DATA[1],'<error>0</error>') === false ){\r
+ preg_match("/<message>(.*?)<\/message>/",$DATA[1],$error_message);\r
+ if( $error_message[1] ){\r
+ $errorMessage = mb_convert_encoding($error_message[1], _CHARSET);\r
+ return 'An error occurred: '.htmlspecialchars($errorMessage, ENT_QUOTES);\r
+ } else {\r
+ return 'An error occurred: fatal error.';\r
+ }\r
+ }\r
+ }\r
+ \r
+ return '';\r
+ } \r
+//modify end+++++++++\r
+\r
+ /* \r
+ * Handle a Trackback ping sent to this website\r
+ */\r
+ function handlePing($tb_id = 0) {\r
+ global $manager;\r
+ \r
+ // Defaults\r
+ $spam = false;\r
+ $link = false;\r
+//modify start+++++++++\r
+// $block = true;\r
+ $block = false;\r
+//modify end+++++++++\r
+ if ($tb_id == 0)\r
+ $tb_id = intRequestVar('tb_id');\r
+ \r
+ $rss = requestVar('__mode') == 'rss'; \r
+//mod by cles\r
+ $enableLinkCheck = $this->isEnableLinkCheck($tb_id);\r
+ $block = ( $enableLinkCheck ) ? true : false ;\r
+//mod by cles end\r
+\r
+ if (!$tb_id) {\r
+ return 'TrackBack ID is missing (tb_id)';\r
+ }\r
+ \r
+ if ((!$manager->existsItem($tb_id,0,0)) && ($this->getOption('CheckIDs') == 'yes')) {\r
+ return _ERROR_NOSUCHITEM;\r
+ }\r
+\r
+ // 0. Check if we need to output the list as rss\r
+ if ($rss) {\r
+ $this->rssResponse($tb_id);\r
+ return;\r
+ }\r
+//mod by cles\r
+ // check: accept pings.\r
+ $blogId = getBlogIDFromItemID($tb_id);\r
+ $isAcceptPing = $this->isAcceptTrackBack($tb_id);\r
+ \r
+ if (! $isAcceptPing)\r
+ return 'Sorry, no trackback pings are accepted.';\r
+//mod by cles end\r
+\r
+ // 1. Get attributes\r
+//modify start+++++++++\r
+ $b =& $manager->getBlog($blogId);\r
+//modify end+++++++++\r
+ $url = requestVar('url');\r
+ $title = requestVar('title');\r
+ $excerpt = requestVar('excerpt');\r
+ $blog_name = requestVar('blog_name');\r
+ \r
+ if( $url && preg_match('/https?:\/\/([^\/]+)/', $url, $matches) ){\r
+ if( gethostbynamel($matches[1]) === FALSE )\r
+ return 'URL is invalid (url)';\r
+ } else {\r
+ return 'URL is missing or invalid (url)';\r
+ }\r
+\r
+ // 2. Conversion of encoding...\r
+//modify start+++++++++\r
+/* if (preg_match ("/;\s*charset=([^\n]+)/is", $_SERVER["CONTENT_TYPE"], $regs))\r
+ $encoding = strtoupper(trim($regs[1]));\r
+ else\r
+ $encoding = $this->_detect_encoding($excerpt);\r
+*/\r
+ $encoding = $this->_detect_encoding($excerpt);\r
+//modify end+++++++++\r
+ \r
+//modify start+++++++++\r
+ if (_CHARSET != 'UTF-8'){\r
+ $title = $this->_strip_controlchar(strip_tags(mb_convert_encoding($title, _CHARSET, $encoding)));\r
+ $excerpt = $this->_strip_controlchar(strip_tags(mb_convert_encoding($excerpt, _CHARSET, $encoding)));\r
+ $blog_name = $this->_strip_controlchar(strip_tags(mb_convert_encoding($blog_name, _CHARSET, $encoding)));\r
+ }else{\r
+ $title = $this->_strip_controlchar($this->_convert_to_utf8($title, $encoding));\r
+ $excerpt = $this->_strip_controlchar($this->_convert_to_utf8($excerpt, $encoding));\r
+ $blog_name = $this->_strip_controlchar($this->_convert_to_utf8($blog_name, $encoding));\r
+\r
+ $title = $this->_decode_entities(strip_tags($title));\r
+ $excerpt = $this->_decode_entities(strip_tags($excerpt));\r
+ $blog_name = $this->_decode_entities(strip_tags($blog_name));\r
+ }\r
+//modify end+++++++++\r
+\r
+ // 4. Save data in the DB\r
+ $res = @sql_query('\r
+ SELECT \r
+ tb_id, block, spam\r
+ FROM \r
+ '.sql_table('plugin_tb').' \r
+ WHERE \r
+ url = \''.mysql_real_escape_string($url).'\' AND \r
+ tb_id = \''.intval($tb_id).'\'\r
+ ');\r
+ \r
+ if (mysql_num_rows($res) != 0) \r
+ {\r
+ // Existing TB, update it\r
+/*\r
+ $res = @sql_query('\r
+ UPDATE\r
+ '.sql_table('plugin_tb').'\r
+ SET \r
+ title = "'.mysql_real_escape_string($title).'", \r
+ excerpt = "'.mysql_real_escape_string($excerpt).'", \r
+ blog_name = "'.mysql_real_escape_string($blog_name).'", \r
+ timestamp = '.mysqldate(time()).'\r
+ WHERE \r
+ url = "'.mysql_real_escape_string($url).'" AND \r
+ tb_id = "'.$tb_id.'"\r
+ ');\r
+*/\r
+//modify start+++++++++\r
+ $rows = mysql_fetch_assoc($res);\r
+ $spam = ( $rows['block'] || $rows['spam'] ) ? true : false;\r
+ $res = @sql_query('\r
+ UPDATE\r
+ '.sql_table('plugin_tb').'\r
+ SET \r
+ title = \''.mysql_real_escape_string($title).'\', \r
+ excerpt = \''.mysql_real_escape_string($excerpt).'\', \r
+ blog_name = \''.mysql_real_escape_string($blog_name).'\', \r
+ timestamp = '.mysqldate($b->getCorrectTime()).'\r
+ WHERE \r
+ url = \''.mysql_real_escape_string($url).'\' AND \r
+ tb_id = \''.mysql_real_escape_string(intval($tb_id)).'\'\r
+ ');\r
+//modify end+++++++++\r
+\r
+ if (!$res) {\r
+ return 'Could not update trackback data: '.mysql_error();\r
+ }\r
+ } \r
+ else \r
+ {\r
+//mod by cles\r
+ // spam block\r
+ $res = @sql_query('SELECT id FROM '.sql_table('plugin_tb').' WHERE block = 1 and url = \''.mysql_real_escape_string($url).'\'' );\r
+ if (mysql_num_rows($res) != 0) {\r
+ // NP_Trackback has blocked tb !\r
+ ACTIONLOG :: add(INFO, "Trackback: Duplicated Blocked Trackback [ignore] (itemid:$tb_id from: $url)");\r
+ return 'Sorry, trackback ping is not accepted.';\r
+ }\r
+//mod by cles end\r
+ \r
+ // 4. SPAM check (for SpamCheck API 2 /w compat. API 1)\r
+ $spamcheck = array (\r
+ 'type' => 'trackback',\r
+ 'id' => $tb_id,\r
+ 'title' => $title,\r
+ 'excerpt' => $excerpt,\r
+ 'blogname' => $blog_name,\r
+ 'url' => $url,\r
+ 'return' => true,\r
+ 'live' => true,\r
+ \r
+ /* Backwards compatibility with SpamCheck API 1*/\r
+ 'data' => $url . "\n" . $title . "\n" . $excerpt . "\n" . $blog_name . "\n" . serverVar('HTTP_USER_AGENT'),\r
+ 'ipblock' => true,\r
+ );\r
+ \r
+ $manager->notify('SpamCheck', array ('spamcheck' => & $spamcheck));\r
+ \r
+ if (isset($spamcheck['result']) && $spamcheck['result'] == true) \r
+ {\r
+ $spam = true;\r
+ }\r
+ \r
+ // 5. Content check (TO DO)\r
+ if($spam == false || $enableLinkCheck == 'ignore' ) //modify\r
+ {\r
+//mod by cles\r
+// $contents = $this->retrieveUrl ($url);\r
+// \r
+// if (preg_match("/(".preg_quote($_SERVER["REQUEST_URI"], '/').")|(".preg_quote($_SERVER["SERVER_NAME"], '/').")/i", $contents)) { \r
+// $link = true;\r
+// }\r
+ if( $enableLinkCheck ){\r
+ $contents = $this->retrieveUrl($url);\r
+ \r
+ $linkArray = $this->getPermaLinksFromText($contents);\r
+ \r
+ if( defined('NP_TRACKBACK_LINKCHECK_STRICT') )\r
+ $itemLink = $this->_createItemLink($tb_id, $b);\r
+ else\r
+ $itemLink = $b->getURL();\r
+ \r
+ $itemLinkPat = '{^' . preg_quote($itemLink) .'}i';\r
+ $itemLinkPat = str_replace('&','&(amp;)?', $itemLinkPat);\r
+ \r
+ foreach($linkArray as $l) {\r
+ if(preg_match($itemLinkPat, $l)){\r
+ ACTIONLOG :: add(INFO, "Trackback: LinkCheck OK. (link: $l pat: $itemLinkPat )");\r
+ $link = true;\r
+ break;\r
+ }\r
+ }\r
+ if( ! $link ){\r
+ $cnt = @count($linkArray);\r
+ if( $enableLinkCheck == 'ignore' ){\r
+ ACTIONLOG :: add(INFO, "Trackback: LinkCheck NG. [ignore] (itemid:$tb_id from: $url cnt: $cnt pat: $itemLinkPat)");\r
+ return 'Sorry, trackback ping is not accepted.';\r
+ } else {\r
+ ACTIONLOG :: add(INFO, "Trackback: LinkCheck NG. [block] (itemid:$tb_id from: $url cnt: $cnt pat: $itemLinkPat");\r
+ }\r
+ }\r
+ }\r
+//mod by cles end\r
+ }\r
+\r
+ // 6. Determine if Trackback is safe...\r
+//modify start+++++++++\r
+// $block = $spam == true || $link == false;\r
+// $block = $spam == true ;\r
+//modify end+++++++++\r
+//mod by cles\r
+ if ( $enableLinkCheck )\r
+ $block = ($spam == true || $link == false);\r
+ else\r
+ $block = $spam == true ;\r
+//mod by cles end\r
+ // New TB, insert it\r
+/*\r
+ $query = '\r
+ INSERT INTO \r
+ '.sql_table('plugin_tb').' \r
+ SET\r
+ tb_id = "'.$tb_id.'",\r
+ block = "'.($block ? '1' : '0').'",\r
+ spam = "'.($spam ? '1' : '0').'",\r
+ link = "'.($link ? '1' : '0').'",\r
+ url = "'.mysql_real_escape_string($url).'",\r
+ title = "'.mysql_real_escape_string($title).'",\r
+ excerpt = "'.mysql_real_escape_string($excerpt).'",\r
+ blog_name = "'.mysql_real_escape_string($blog_name).'",\r
+ timestamp = '.mysqldate(time()).'\r
+ ';\r
+*/\r
+//modify start+++++++++\r
+ $query = '\r
+ INSERT INTO \r
+ '.sql_table('plugin_tb').' \r
+ SET\r
+ tb_id = \''.mysql_real_escape_string(intval($tb_id)).'\',\r
+ block = \''.($block ? '1' : '0').'\',\r
+ spam = \''.($spam ? '1' : '0').'\',\r
+ link = \''.($link ? '1' : '0').'\',\r
+ url = \''.mysql_real_escape_string($url).'\',\r
+ title = \''.mysql_real_escape_string($title).'\',\r
+ excerpt = \''.mysql_real_escape_string($excerpt).'\',\r
+ blog_name = \''.mysql_real_escape_string($blog_name).'\',\r
+ timestamp = '.mysqldate($b->getCorrectTime()).'\r
+ ';\r
+//modify end+++++++++\r
+ \r
+ $res = @sql_query($query);\r
+\r
+ if (!$res) {\r
+ return 'Could not save trackback data, possibly because of a double entry: ' . mysql_error() . $query;\r
+ }\r
+ }\r
+ \r
+ // 7. Send notification e-mail if needed\r
+ $notifyAddrs = $this->getOption('NotifyEmail');\r
+ $notifyAddrs = ( $notifyAddrs ? $notifyAddrs . ';' : '') \r
+ . $this->getBlogOption($blogId ,'NotifyEmailBlog');\r
+ \r
+ if ($notifyAddrs && $spam == false) \r
+ {\r
+ \r
+ $vars = array (\r
+ 'tb_id' => $tb_id,\r
+ 'url' => $url,\r
+ 'title' => $title,\r
+ 'excerpt' => $excerpt,\r
+ 'blogname' => $blog_name\r
+ );\r
+ \r
+//modify start+++++++++\r
+/*\r
+ $vars = array (\r
+ 'tb_id' => $tb_id,\r
+ 'url' => $url,\r
+ 'title' => mb_convert_encoding($title, 'ISO-2022-JP', _CHARSET),\r
+ 'excerpt' => mb_convert_encoding($excerpt, 'ISO-2022-JP', _CHARSET),\r
+ 'blogname' => mb_convert_encoding($blog_name, 'ISO-2022-JP', _CHARSET)\r
+ );\r
+*/ \r
+//maybe not needed because japanese version has "mb_send_mail" in function notify\r
+//modify end+++++++++\r
+ \r
+ $mailto_title = TEMPLATE::fill($this->notificationMailTitle, $vars);\r
+ $mailto_msg = TEMPLATE::fill($this->notificationMail, $vars);\r
+ \r
+ global $CONF, $DIR_LIBS;\r
+ \r
+ // make sure notification class is loaded\r
+ if (!class_exists('notification'))\r
+ include($DIR_LIBS . 'NOTIFICATION.php');\r
+ \r
+ $notify = new NOTIFICATION($notifyAddrs);\r
+ $notify->notify($mailto_title, $mailto_msg , $CONF['AdminEmail']);\r
+ \r
+//mod by cles+++++++++++ \r
+ if ($manager->pluginInstalled('NP_Cache')){\r
+ $p =& $manager->getPlugin('NP_Cache');\r
+ $p->setCurrentBlog($tb_id);\r
+ $p->cleanItem($tb_id);\r
+ $p->cleanArray(array('index'));\r
+ }\r
+//mod by cles end +++++++++++ \r
+ }\r
+\r
+ if( $block )\r
+ return 'Sorry, trackback ping is not accepted.';\r
+ return '';\r
+ } \r
+\r
+ function xmlResponse($errorMessage = '') \r
+ {\r
+ header('Content-type: application/xml; charset=utf-8');\r
+ echo "<"."?xml version='1.0' encoding='UTF-8'?".">\n";\r
+ echo "<response>\n";\r
+\r
+ if ($errorMessage){\r
+ if (_CHARSET != 'UTF-8')\r
+ $errorMessage = mb_convert_encoding($errorMessage, 'UTF-8');\r
+ echo "<error>1</error>\n";\r
+ echo "<message>".htmlspecialchars($errorMessage, ENT_QUOTES)."</message>\n";\r
+ } else {\r
+ echo "<error>0</error>\n";\r
+ }\r
+\r
+ echo "</response>";\r
+ exit;\r
+ }\r
+ \r
+ /*\r
+ * Check if member may send ping (check if logged in)\r
+ */\r
+ function canSendPing() {\r
+ global $member;\r
+ return $member->isLoggedIn() || $this->xmlrpc;\r
+ }\r
+\r
+\r
+//mod by cles\r
+ function redirect($tb_id, $urlHash){\r
+ global $CONF;\r
+ $query = 'SELECT url FROM '.sql_table('plugin_tb').' WHERE tb_id='.intval($tb_id).' and md5(url)="'.$urlHash.'"';\r
+ $res = sql_query($query);\r
+ \r
+ $url = $CONF['SiteURL'];\r
+ \r
+ if ($o = mysql_fetch_object($res)) {\r
+ $url = htmlspecialchars($o->url, ENT_QUOTES);\r
+ }\r
+ \r
+ $url = stripslashes($url);\r
+ $url = str_replace('&','&',$url);\r
+ $url = str_replace('<','<',$url);\r
+ $url = str_replace('>','>',$url);\r
+ $url = str_replace('"','"',$url);\r
+ \r
+ header('Location: '.$url);\r
+ }\r
+ \r
+ function getRequiredURL($itemid){\r
+ global $manager;\r
+ $blog = & $manager->getBlog(getBlogIDFromItemID($itemid));\r
+ if( $this->isEnableLinkCheck($itemid) )\r
+ return $this->_createItemLink($itemid, $blog);\r
+ return null;\r
+ }\r
+ \r
+ function isEnableLinkCheck($itemid){\r
+ $blogid = getBlogIDFromItemID($itemid);\r
+ \r
+ switch( $this->getItemOption($itemid, 'isAcceptW/OLink') ){\r
+ case 'default':\r
+ $def = $this->getBlogOption($blogid, 'isAcceptW/OLinkDef');\r
+ if($def == 'yes')\r
+ return false;\r
+ else\r
+ return $def; // block or ignore\r
+ case 'yes':\r
+ return false;\r
+ case 'no':\r
+ return true;\r
+ default :\r
+ ACTIONLOG :: add(INFO, "Trackback: Unknown Option (itemid:$itemid, value:$val)");\r
+ return false;\r
+ }\r
+ }\r
+ \r
+ function isAcceptTrackBack($itemid = null){\r
+ $ret = false;\r
+ if( $this->getOption('AcceptPing') == 'yes' ){\r
+ $bid = null;\r
+ if($itemid){\r
+ $bid = getBlogIDFromItemID(intval($itemid));\r
+ } else {\r
+ global $blog;\r
+ $bid = $blog->getID();\r
+ }\r
+ \r
+ if( $this->getBlogOption($bid, "AllowTrackBack") == 'yes' ){\r
+ if( $itemid ){\r
+ $ret = ( $this->getItemOption(intval($itemid), 'ItemAcceptPing') == 'yes' ) ? true : false ;\r
+ } else {\r
+ $ret = true;\r
+ }\r
+ } else {\r
+ $ret = false;\r
+ }\r
+ }\r
+ return $ret;\r
+ }\r
+ \r
+//mod by cles end\r
+\r
+ /**************************************************************************************\r
+ * EVENTS\r
+ */\r
+\r
+ function event_SendTrackback($data) {\r
+ global $manager;\r
+ \r
+ // Enable sending trackbacks for the XML-RPC API, otherwise we would \r
+ // get an error because the current user is not exactly logged in.\r
+ $this->xmlrpc = true;\r
+ \r
+ $itemid = $data['tb_id'];\r
+ $item = &$manager->getItem($itemid, 0, 0);\r
+ if (!$item) return; // don't ping for draft & future\r
+ if ($item['draft']) return; // don't ping on draft items\r
+ \r
+ // gather some more information, needed to send the ping (blog name, etc) \r
+ $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));\r
+ $blog_name = $blog->getName();\r
+ \r
+ $title = $data['title'] != '' ? $data['title'] : $item['title'];\r
+ $title = strip_tags($title);\r
+ \r
+ $excerpt = $data['body'] != '' ? $data['body'] : $item['body'];\r
+ $excerpt = strip_tags($excerpt);\r
+ $excerpt = $this->_cut_string($excerpt, 200);\r
+ \r
+ $CONF['ItemURL'] = preg_replace('/\/$/', '', $blog->getURL());\r
+ //$url = createItemLink($itemid);\r
+ $url = $this->_createItemLink($itemid, $blog);\r
+ \r
+ while (list(,$url) = each($data['urls'])) {\r
+ $res = $this->sendPing($itemid, $title, $url, $excerpt, $blog_name, $url);\r
+ if ($res) ACTIONLOG::add(WARNING, 'TrackBack Error:' . $res . ' (' . $url . ')');\r
+ }\r
+ }\r
+ \r
+ function event_RetrieveTrackback($data) {\r
+ \r
+ $res = sql_query('\r
+ SELECT \r
+ url, \r
+ title, \r
+ UNIX_TIMESTAMP(timestamp) AS timestamp \r
+ FROM \r
+ '.sql_table('plugin_tb').' \r
+ WHERE \r
+ tb_id = '.intval($data['tb_id']).' AND\r
+ block = 0\r
+ ORDER BY \r
+ timestamp ASC\r
+ ');\r
+ \r
+ while ($row = mysql_fetch_array($res)) {\r
+ \r
+ $trackback = array(\r
+ 'title' => $row['title'],\r
+ 'url' => $row['url'],\r
+ 'ip' => ''\r
+ );\r
+ \r
+ $data['trackbacks'][] = $trackback;\r
+ }\r
+ }\r
+/*\r
+ function event_BookmarkletExtraHead($data) {\r
+ global $NP_TB_URL;\r
+ list ($NP_TB_URL,) = $this->getURIfromLink(requestVar('loglink'));\r
+ } \r
+*/\r
+ function event_PrepareItemForEdit($data) {\r
+// if (!$this->getOption('AutoXMLHttp'))\r
+ if ($this->getOption('AutoXMLHttp') == 'no')\r
+ {\r
+ // The space between body and more is to make sure we didn't join 2 words accidently....\r
+ $this->larray = $this->autoDiscovery($data['item']['body'].' '.$data['item']['more']);\r
+ }\r
+ } \r
+\r
+ /*\r
+ * After an item has been added to the database, send out a ping if requested\r
+ * (trackback_ping_url variable in request)\r
+ */\r
+ function event_PostAddItem($data) {\r
+ $this->pingTrackback($data);\r
+ }\r
+ \r
+ function event_PreUpdateItem($data) {\r
+ $this->pingTrackback($data);\r
+ }\r
+\r
+ /**\r
+ * Add trackback options to add item form/bookmarklet\r
+ */\r
+ function event_AddItemFormExtras($data) {\r
+ \r
+// global $NP_TB_URL;\r
+ \r
+ ?>\r
+ <h3>TrackBack</h3>\r
+ <p>\r
+<!--modify start+++++++++-->\r
+<!-- <label for="plug_tb_url">TrackBack Ping URL:</label>\r
+ <input type="text" value="<?php if (isSet($NP_TB_URL)) {echo $NP_TB_URL;} ?>" id="plug_tb_url" name="trackback_ping_url" size="60" />\r
+-->\r
+<!--modify end+++++++++-->\r
+ <label for="plug_tb_url">TrackBack URL:</label><br />\r
+ <textarea id="plug_tb_url" name="trackback_ping_url" cols="60" rows="5" style="font:normal xx-small Tahoma, Arial, verdana ;"></textarea>\r
+<input type="button" name="btnAdd" value="<?php echo _TB_LIST_IT?>" onClick="AddStart()" />\r
+\r
+ <br />\r
+ \r
+ <?php\r
+// if ($this->getOption('AutoXMLHttp'))\r
+ if ($this->getOption('AutoXMLHttp') == 'yes')\r
+ {\r
+ ?>\r
+ <div id="tb_auto">\r
+<input type="button" name="discoverit" value="Auto Discover" onclick="tbSetup();" />\r
+ <img id='tb_busy' src='<?php echo $this->getAdminURL(); ?>busy.gif' style="display:none;" /><br />\r
+ <div id="tb_auto_title"></div>\r
+ <table border="1"><tbody id="tb_ping_list"></tbody></table>\r
+ <input type="hidden" id="tb_url_amount" name="tb_url_amount" value="0" /> \r
+ </div>\r
+ \r
+ <?php\r
+ $this->jsautodiscovery();\r
+ }\r
+ ?>\r
+ </p>\r
+ <?php\r
+ }\r
+\r
+ /**\r
+ * Add trackback options to edit item form/bookmarklet\r
+ */\r
+ function event_EditItemFormExtras($data) {\r
+ global $CONF;\r
+ ?>\r
+<!-- <input type="text" value="" id="plug_tb_url" name="trackback_ping_url" size="60" /><br />-->\r
+ <h3>TrackBack</h3>\r
+ <p>\r
+ <label for="plug_tb_url">TrackBack URL:</label><br />\r
+ <textarea id="plug_tb_url" name="trackback_ping_url" cols="60" rows="5" style="font:normal xx-small Tahoma, Arial, verdana ;"></textarea>\r
+<input type="button" name="btnAdd" value="<?php echo _TB_LIST_IT?>" onClick="AddStart()" />\r
+ \r
+ <?php\r
+// if ($this->getOption('AutoXMLHttp'))\r
+ if ($this->getOption('AutoXMLHttp') == 'yes')\r
+ {\r
+ ?>\r
+\r
+\r
+ <div id="tb_auto">\r
+<input type="button" name="discoverit" value="Auto Discover" onclick="tbSetup();" />\r
+ <img id='tb_busy' src='<?php echo $this->getAdminURL(); ?>busy.gif' style="display:none;" /><br />\r
+ <div id="tb_auto_title"></div>\r
+ <table border="1"><tbody id="tb_ping_list"></tbody></table>\r
+ <input type="hidden" id="tb_url_amount" name="tb_url_amount" value="0" /> \r
+ </div>\r
+\r
+ <?php\r
+ $this->jsautodiscovery();\r
+ }\r
+ else\r
+ {\r
+ if (count($this->larray) > 0) \r
+ {\r
+ ?>\r
+ Auto Discovered Ping URL's:<br />\r
+ <?php\r
+ echo '<input type="hidden" name="tb_url_amount" value="'.count($this->larray).'" />';\r
+ \r
+ $i = 0;\r
+ \r
+ while (list($url, $title) = each ($this->larray))\r
+ {\r
+//modify start+++++++++\r
+ if (_CHARSET != 'UTF-8') {\r
+ $title = $this->_utf8_to_entities($title);\r
+ $title = mb_convert_encoding($title, _CHARSET, 'UTF-8');\r
+ }\r
+//modify end+++++++++\r
+\r
+ echo '<input type="checkbox" name="tb_url_'.$i.\r
+ '" value="'.$url.'" id="tb_url_'.$i.\r
+ '" /><label for="tb_url_'.$i.'" title="'.$url.'">'.$title.'</label><br />';\r
+ \r
+ $i++;\r
+ }\r
+ }\r
+ } \r
+ ?>\r
+ </p>\r
+ <?php\r
+ }\r
+\r
+ /**\r
+ * Insert Javascript AutoDiscovery routines\r
+ */\r
+ function jsautodiscovery() \r
+ {\r
+ global $CONF;\r
+ \r
+ ?>\r
+ <script type='text/javascript' src='<?php echo $this->getAdminURL(); ?>autodetect.php'></script> \r
+ <?php\r
+ }\r
+\r
+ /**\r
+ * Ping all URLs\r
+ */\r
+ function pingTrackback($data) {\r
+ global $manager, $CONF;\r
+ \r
+ $ping_urls_count = 0;\r
+ $ping_urls = array();\r
+ $localflag = array();\r
+ \r
+ $ping_url = requestVar('trackback_ping_url');\r
+//modify start+++++++++\r
+/*\r
+ if ($ping_url) {\r
+ $ping_urls[0] = $ping_url;\r
+ $ping_urls_count++;\r
+ }\r
+*/\r
+ if (trim($ping_url)) {\r
+ $ping_urlsTemp = array();\r
+ $ping_urlsTemp = preg_split("/[\s,]+/", trim($ping_url));\r
+ for($i=0;$i<count($ping_urlsTemp);$i++){\r
+ $ping_urls[] = trim($ping_urlsTemp[$i]);\r
+ $ping_urls_count++;\r
+ }\r
+ }\r
+//modify end+++++++++\r
+ \r
+ $tb_url_amount = requestVar('tb_url_amount');\r
+ for ($i=0;$i<$tb_url_amount;$i++) {\r
+ $tb_temp_url = requestVar('tb_url_'.$i);\r
+ if ($tb_temp_url) {\r
+ $ping_urls[$ping_urls_count] = $tb_temp_url;\r
+ $localflag[$ping_urls_count] = (requestVar('tb_url_'.$i.'_local') == 'on')? 1: 0;\r
+ $ping_urls_count++;\r
+ }\r
+ }\r
+ \r
+ if ($ping_urls_count <= 0) {\r
+ return;\r
+ }\r
+ \r
+ $itemid = $data['itemid'];\r
+ $item = &$manager->getItem($itemid, 0, 0);\r
+ if (!$item) return; // don't ping for draft & future\r
+ if ($item['draft']) return; // don't ping on draft items\r
+ \r
+ // gather some more information, needed to send the ping (blog name, etc) \r
+ $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));\r
+ $blog_name = $blog->getName();\r
+\r
+ $title = $data['title'] != '' ? $data['title'] : $item['title'];\r
+ $title = strip_tags($title);\r
+\r
+ $excerpt = $data['body'] != '' ? $data['body'] : $item['body'];\r
+ $excerpt = strip_tags($excerpt);\r
+ $excerpt = $this->_cut_string($excerpt, 200);\r
+ \r
+/*\r
+ $CONF['ItemURL'] = preg_replace('/\/$/', '', $blog->getURL()); \r
+ $url = createItemLink($itemid);\r
+*/\r
+ $url = $this->_createItemLink($item['itemid'],$blog); \r
+ \r
+ // send the ping(s) (add errors to actionlog)\r
+ for ($i=0; $i<count($ping_urls); $i++) {\r
+ if( ! $localflag[$i] )\r
+ $res = $this->sendPing($itemid, $title, $url, $excerpt, $blog_name, $ping_urls[$i]);\r
+ else\r
+ $res = $this->handleLocalPing($itemid, $title, $excerpt, $blog_name, $ping_urls[$i]);\r
+ if ($res) ACTIONLOG::add(WARNING, 'TrackBack Error:' . $res . ' (' . $ping_urls[$i] . ')');\r
+ }\r
+ }\r
+\r
+ \r
+ \r
+ \r
+ /**************************************************************************************\r
+ * AUTO-DISCOVERY\r
+ */\r
+\r
+ /*\r
+ * Auto-Discovery of TrackBack Ping URLs based on HTML story\r
+ */\r
+ function autoDiscovery($text) \r
+ {\r
+ $links = $this->getPermaLinksFromText($text);\r
+ $result = array();\r
+ \r
+ for ($i = 0; $i < count($links); $i++)\r
+ {\r
+ list ($url, $title) = $this->getURIfromLink($links[$i]);\r
+ \r
+ if ($url != '')\r
+ $result[$url] = $title;\r
+ }\r
+ \r
+ return $result;\r
+ }\r
+ \r
+ /*\r
+ * Auto-Discovery of TrackBack Ping URLs based on single link\r
+ */\r
+ function getURIfromLink($link) \r
+ {\r
+ \r
+ // Check to see if the cache contains this link\r
+ $res = sql_query('SELECT url, title FROM '.sql_table('plugin_tb_lookup').' WHERE link=\''.mysql_real_escape_string($link).'\'');\r
+\r
+ if ($row = mysql_fetch_array($res)) \r
+ {\r
+ if ($row['title'] != '')\r
+ {\r
+//modify start+++++++++\r
+ if (_CHARSET != 'UTF-8'){\r
+ $row['title'] = mb_convert_encoding($row['title'], 'UTF-8', _CHARSET);\r
+ $row['title'] = $this->_decode_entities($row['title']);\r
+ }\r
+//modify end+++++++++\r
+ return array (\r
+ $row['url'], $row['title']\r
+ );\r
+ }\r
+ else\r
+ {\r
+ return array (\r
+ $row['url'], $row['url']\r
+ );\r
+ }\r
+ }\r
+ \r
+ // Retrieve RDF\r
+ if (($rdf = $this->getRDFFromLink($link)) !== false) \r
+ {\r
+ // Get PING attribute\r
+ if (($uri = $this->getAttributeFromRDF($rdf, 'trackback:ping')) !== false) \r
+ {\r
+ // Get TITLE attribute\r
+ if (($title = $this->getAttributeFromRDF($rdf, 'dc:title')) !== false) \r
+ {\r
+ // Get CREATOR attribute\r
+ if (($author = $this->getAttributeFromRDF($rdf, 'dc:creator')) !== false) \r
+ {\r
+ $title = $author. ": " . $title;\r
+ }\r
+ \r
+ $uri = $this->_decode_entities($uri);\r
+//modify start+++++++++\r
+ if (_CHARSET != 'UTF-8')\r
+ $convertedTitle = mb_convert_encoding($title, _CHARSET, 'UTF-8');\r
+ else\r
+ $convertedTitle = $title;\r
+/*\r
+ // Store in cache\r
+ $res = sql_query("INSERT INTO ".sql_table('plugin_tb_lookup')." (link, url, title) VALUES ('".mysql_real_escape_string($link)."','".mysql_real_escape_string($uri)."','".mysql_real_escape_string($title)."')");\r
+*/\r
+ // Store in cache\r
+ $res = sql_query("INSERT INTO ".sql_table('plugin_tb_lookup')." (link, url, title) VALUES ('".mysql_real_escape_string($link)."','".mysql_real_escape_string($uri)."','".mysql_real_escape_string($convertedTitle)."')");\r
+//modify end+++++++++\r
+ $title = $this->_decode_entities($title);\r
+\r
+ return array (\r
+ $uri, $title\r
+ );\r
+ }\r
+ else\r
+ {\r
+ $uri = html_entity_decode($uri, ENT_COMPAT);\r
+ \r
+ // Store in cache\r
+ $res = sql_query("INSERT INTO ".sql_table('plugin_tb_lookup')." (link, url, title) VALUES ('".mysql_real_escape_string($link)."','".mysql_real_escape_string($uri)."','')");\r
+ \r
+ return array (\r
+ $uri, $uri\r
+ );\r
+ }\r
+ }\r
+ }\r
+ \r
+ // Store in cache\r
+ $res = sql_query("INSERT INTO ".sql_table('plugin_tb_lookup')." (link, url, title) VALUES ('".mysql_real_escape_string($link)."','','')");\r
+ \r
+ return array ('', '');\r
+ }\r
+ \r
+ /*\r
+ * Detect links used in HTML code\r
+ */\r
+ function getPermaLinksFromText($text)\r
+ {\r
+ $links = array();\r
+ \r
+ if (preg_match_all('/<a +([^>]+)>/i', $text, $array, PREG_SET_ORDER))\r
+ {\r
+ $count = count($array);\r
+ for ($i = 0; $i < $count; $i++)\r
+ {\r
+ if( preg_match('/https?:\/\/[-_.!~*\'()a-z0-9;\/?:@&=+$,%]+/i', $array[$i][1], $matches) )\r
+ $links[$matches[0]] = 1;\r
+ }\r
+ }\r
+ \r
+ return array_keys($links);\r
+ }\r
+ \r
+ /*\r
+ * Retrieve RDF code from external link\r
+ */\r
+ function getRDFFromLink($link) \r
+ {\r
+ if ($content = $this->getContents($link))\r
+ {\r
+ preg_match_all('/(<rdf:RDF.*?<\/rdf:RDF>)/sm', $content, $rdfs, PREG_SET_ORDER);\r
+ \r
+ if (count($rdfs) > 1)\r
+ {\r
+ for ($i = 0; $i < count($rdfs); $i++)\r
+ {\r
+ if (preg_match('|dc:identifier="'.preg_quote($link).'"|ms',$rdfs[$i][1])) \r
+ {\r
+ return $rdfs[$i][1];\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ // No need to check the identifier\r
+ return $rdfs[0][1];\r
+ }\r
+ }\r
+ \r
+ return false;\r
+ }\r
+ \r
+ /**\r
+ * Retrieve the contents of an external (X)HTML document\r
+ */\r
+ function getContents($link) {\r
+ \r
+ // Use cURL extention if available\r
+ if (function_exists("curl_init") && $this->useCurl == 2)\r
+ {\r
+ // Make HEAD request\r
+ $ch = curl_init();\r
+ @curl_setopt($ch, CURLOPT_URL, $link);\r
+ @curl_setopt($ch, CURLOPT_HEADER, true);\r
+ @curl_setopt($ch, CURLOPT_NOBODY, true);\r
+ @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);\r
+ @curl_setopt($ch, CURLOPT_MAXREDIRS, 5);\r
+ @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\r
+ @curl_setopt($ch, CURLOPT_TIMEOUT, 20);\r
+ @curl_setopt($ch, CURLOPT_USERAGENT, $this->userAgent);\r
+\r
+ $headers = curl_exec($ch);\r
+ curl_close($ch);\r
+ \r
+ // Check if the link points to a (X)HTML document\r
+ if (preg_match('/Content-Type: (text\/html|application\/xhtml+xml)/i', $headers))\r
+ {\r
+ return $this->retrieveUrl ($link);\r
+ }\r
+ \r
+ return false;\r
+ }\r
+ else\r
+ {\r
+ return $this->retrieveUrl ($link);\r
+ }\r
+ }\r
+ \r
+ /*\r
+ * Get a single attribute from RDF\r
+ */\r
+ function getAttributeFromRDF($rdf, $attribute)\r
+ {\r
+ if (preg_match('/'.$attribute.'="([^"]+)"/', $rdf, $matches)) \r
+ {\r
+ return $matches[1];\r
+ }\r
+ \r
+ return false;\r
+ }\r
+\r
+\r
+\r
+\r
+\r
+\r
+ /**************************************************************************************/\r
+ /* Internal helper functions for dealing with external file retrieval */\r
+ \r
+ function retrieveUrl ($url) {\r
+//mod by cles\r
+ $ua = ini_set('user_agent', $this->userAgent);\r
+//mod by cles end\r
+ if (function_exists('curl_init') && $this->useCurl > 0)\r
+ {\r
+ // Set options\r
+ $ch = curl_init();\r
+ @curl_setopt($ch, CURLOPT_URL, $url);\r
+ @curl_setopt($ch, CURLOPT_HEADER, 1);\r
+ @curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);\r
+ @curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);\r
+ @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);\r
+ @curl_setopt($ch, CURLOPT_MAXREDIRS, 5);\r
+ @curl_setopt($ch, CURLOPT_TIMEOUT, 20);\r
+ @curl_setopt($ch, CURLOPT_USERAGENT, $this->userAgent);\r
+ \r
+ // Retrieve response\r
+ $raw = curl_exec($ch);\r
+ $info = curl_getinfo($ch);\r
+ \r
+ // Split into headers and contents\r
+ $headers = substr($raw, 0, $info['header_size']);\r
+ $contents = substr($raw, $info['header_size']);\r
+\r
+ curl_close($ch);\r
+ }\r
+ elseif ($fp = @fopen ($url, "rb"))\r
+ {\r
+//mod by cles\r
+// $contents = fread($fp, 8192);\r
+ $contents = '';\r
+ while (!feof($fp)) {\r
+ $contents .= fread($fp, 8192);\r
+ }\r
+//mod by cles end\r
+ $headers = '';\r
+ \r
+ fclose($fp);\r
+ } \r
+//mod by cles\r
+ ini_set('user_agent', $ua);\r
+//mod by cles end\r
+ \r
+ // Next normalize the encoding to UTF8...\r
+ $contents = $this->_convert_to_utf8_auto($contents, $headers);\r
+ \r
+ return $contents;\r
+ }\r
+ \r
+\r
+ /**************************************************************************************/\r
+ /* Internal helper functions for dealing with encodings and entities */\r
+ \r
+ var $entities_default = array (\r
+ '"' => '"', \r
+ '&' => '&', \r
+ ''' => ''', \r
+ '<' => '<', \r
+ '>' => '>', \r
+ );\r
+ \r
+//modify start+++++++++\r
+ function _restore_to_utf8($contents)\r
+ {\r
+ if (_CHARSET != 'UTF-8')\r
+ {\r
+ $contents = mb_convert_encoding($contents, 'UTF-8', _CHARSET);\r
+ }\r
+ $contents = $this->_decode_entities(strip_tags($contents));\r
+ return $contents;\r
+ }\r
+//modify end+++++++++\r
+ function _detect_encoding($string)\r
+ {\r
+//modify start+++++++++\r
+ if (function_exists('mb_convert_encoding')) {\r
+ $encoding = (preg_match ("/;\s*charset=([^\n]+)/is", serverVar("CONTENT_TYPE"), $regs))? \r
+ strtoupper(trim($regs[1])):\r
+ '';\r
+\r
+ if ( ($encoding !="") && ((mb_http_input("P") == "") || ( strtolower( ini_get("mbstring.http_input") ) == "pass")) ) {\r
+ return $encoding;\r
+ } else { \r
+ $encoding = mb_detect_encoding($string, NP_TRACKBACK_ENCODING_DETECT_ORDER);\r
+ }\r
+ return ( $encoding ) ? $encoding : _CHARSET;\r
+ }\r
+//modify end+++++++++\r
+ if (!ereg("[\x80-\xFF]", $string) && !ereg("\x1B", $string))\r
+ return 'US-ASCII';\r
+ \r
+ if (!ereg("[\x80-\xFF]", $string) && ereg("\x1B", $string))\r
+ return 'ISO-2022-JP';\r
+ \r
+ if (preg_match("/^([\x01-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF][\x80-\xBF])+$/", $string) == 1)\r
+ return 'UTF-8';\r
+ \r
+ if (preg_match("/^([\x01-\x7F]|\x8E[\xA0-\xDF]|\x8F[xA1-\xFE][\xA1-\xFE]|[\xA1-\xFE][\xA1-\xFE])+$/", $string) == 1)\r
+ return 'EUC-JP';\r
+ \r
+ if (preg_match("/^([\x01-\x7F]|[\xA0-\xDF]|[\x81-\xFC][\x40-\xFC])+$/", $string) == 1)\r
+ return 'Shift_JIS';\r
+ \r
+ return 'ISO-8859-1';\r
+ }\r
+\r
+ function _convert_to_utf8($contents, $encoding)\r
+ {\r
+ $done = false;\r
+ \r
+//modify start+++++++++\r
+// if (!$done && function_exists('iconv')) \r
+// {\r
+// \r
+// $result = @iconv($encoding, 'UTF-8//IGNORE', $contents);\r
+// \r
+// if ($result) \r
+// {\r
+// $contents = $result;\r
+// $done = true;\r
+// }\r
+// }\r
+ \r
+ if(!$done && function_exists('mb_convert_encoding')) \r
+ {\r
+ \r
+ if( function_exists('mb_substitute_character') ){\r
+ @mb_substitute_character('none');\r
+ }\r
+ $result = @mb_convert_encoding($contents, 'UTF-8', $encoding );\r
+ \r
+ if ($result) \r
+ {\r
+ $contents = $result;\r
+ $done = true;\r
+ }\r
+ }\r
+\r
+ if (!$done && function_exists('iconv')) \r
+ {\r
+ \r
+ $result = @iconv($encoding, 'UTF-8//IGNORE', $contents);\r
+ \r
+ if ($result) \r
+ {\r
+ $contents = $result;\r
+ $done = true;\r
+ }\r
+ }\r
+//modify end+++++++++\r
+ return $contents;\r
+ }\r
+ \r
+ function _convert_to_utf8_auto($contents, $headers = '')\r
+ {\r
+ /* IN: string in unknown encoding, headers received during transfer\r
+ * OUT: string in UTF-8 encoding\r
+ */\r
+ \r
+ $str = substr($contents, 0, 4096);\r
+ $len = strlen($str);\r
+ $pos = 0;\r
+ $out = '';\r
+ \r
+ while ($pos < $len)\r
+ {\r
+ $ord = ord($str[$pos]);\r
+ \r
+ if ($ord > 32 && $ord < 128)\r
+ $out .= $str[$pos];\r
+ \r
+ $pos++;\r
+ }\r
+ \r
+ // Detection of encoding, check headers\r
+ if (preg_match ("/;\s*charset=([^\n]+)/is", $headers, $regs))\r
+ $encoding = strtoupper(trim($regs[1]));\r
+ \r
+ // Then check meta inside document\r
+ if (preg_match ("/;\s*charset=([^\"']+)/is", $out, $regs))\r
+ $encoding = strtoupper(trim($regs[1]));\r
+ \r
+ // Then check xml declaration\r
+ if (preg_match("/<\?xml.+encoding\s*=\s*[\"|']([^\"']+)[\"|']\s*\?>/i", $out, $regs))\r
+ $encoding = strtoupper(trim($regs[1])); \r
+ \r
+ // Converts\r
+ return $this->_convert_to_utf8($contents, $encoding);\r
+ }\r
+ \r
+ function _decode_entities($string)\r
+ {\r
+ /* IN: string in UTF-8 containing entities\r
+ * OUT: string in UTF-8 without entities\r
+ */\r
+ \r
+ /// Convert all hexadecimal entities to decimal entities\r
+ $string = preg_replace('/&#[Xx]([0-9A-Fa-f]+);/e', "'&#'.hexdec('\\1').';'", $string); \r
+ \r
+ global $_entities;\r
+ // Deal with invalid cp1251 numeric entities \r
+ $string = strtr($string, $_entities['cp1251']);\r
+\r
+ // Convert all named entities to numeric entities\r
+ $string = strtr($string, $this->entities_default);\r
+ $string = strtr($string, $_entities['named']);\r
+\r
+ // Convert all numeric entities to UTF-8\r
+ $string = preg_replace('/&#([0-9]+);/e', "'&#x'.dechex('\\1').';'", $string);\r
+ $string = preg_replace('/&#[Xx]([0-9A-Fa-f]+);/e', "NP_TrackBack::_hex_to_utf8('\\1')", $string); \r
+\r
+ return $string;\r
+ }\r
+ \r
+ function _hex_to_utf8($s){\r
+ return entity::_hex_to_utf8($s);\r
+ } \r
+\r
+ function _utf8_to_entities($string)\r
+ {\r
+ /* IN: string in UTF-8 encoding\r
+ * OUT: string consisting of only characters ranging from 0x00 to 0x7f, \r
+ * using numeric entities to represent the other characters \r
+ */\r
+ \r
+ $len = strlen ($string);\r
+ $pos = 0;\r
+ $out = '';\r
+ \r
+ while ($pos < $len) \r
+ {\r
+ $ascii = ord (substr ($string, $pos, 1));\r
+ \r
+ if ($ascii >= 0xF0) \r
+ {\r
+ $byte[1] = ord(substr ($string, $pos, 1)) - 0xF0;\r
+ $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;\r
+ $byte[3] = ord(substr ($string, $pos + 2, 1)) - 0x80;\r
+ $byte[4] = ord(substr ($string, $pos + 3, 1)) - 0x80;\r
+ \r
+ $char_code = ($byte[1] << 18) + ($byte[2] << 12) + ($byte[3] << 6) + $byte[4];\r
+ $pos += 4;\r
+ }\r
+ elseif (($ascii >= 0xE0) && ($ascii < 0xF0)) \r
+ {\r
+ $byte[1] = ord(substr ($string, $pos, 1)) - 0xE0;\r
+ $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;\r
+ $byte[3] = ord(substr ($string, $pos + 2, 1)) - 0x80;\r
+ \r
+ $char_code = ($byte[1] << 12) + ($byte[2] << 6) + $byte[3];\r
+ $pos += 3;\r
+ }\r
+ elseif (($ascii >= 0xC0) && ($ascii < 0xE0)) \r
+ {\r
+ $byte[1] = ord(substr ($string, $pos, 1)) - 0xC0;\r
+ $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;\r
+ \r
+ $char_code = ($byte[1] << 6) + $byte[2];\r
+ $pos += 2;\r
+ }\r
+ else \r
+ {\r
+ $char_code = ord(substr ($string, $pos, 1));\r
+ $pos += 1;\r
+ }\r
+ \r
+ if ($char_code < 0x80)\r
+ $out .= chr($char_code);\r
+ else\r
+ $out .= '&#'. str_pad($char_code, 5, '0', STR_PAD_LEFT) . ';';\r
+ }\r
+ \r
+ return $out; \r
+ } \r
+\r
+ function _utf8_to_javascript($string)\r
+ {\r
+ /* IN: string in UTF-8 encoding\r
+ * OUT: string consisting of only characters ranging from 0x00 to 0x7f, \r
+ * using javascript escapes to represent the other characters \r
+ */\r
+ \r
+ $len = strlen ($string);\r
+ $pos = 0;\r
+ $out = '';\r
+ \r
+ while ($pos < $len) \r
+ {\r
+ $ascii = ord (substr ($string, $pos, 1));\r
+ \r
+ if ($ascii >= 0xF0) \r
+ {\r
+ $byte[1] = ord(substr ($string, $pos, 1)) - 0xF0;\r
+ $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;\r
+ $byte[3] = ord(substr ($string, $pos + 2, 1)) - 0x80;\r
+ $byte[4] = ord(substr ($string, $pos + 3, 1)) - 0x80;\r
+ \r
+ $char_code = ($byte[1] << 18) + ($byte[2] << 12) + ($byte[3] << 6) + $byte[4];\r
+ $pos += 4;\r
+ }\r
+ elseif (($ascii >= 0xE0) && ($ascii < 0xF0)) \r
+ {\r
+ $byte[1] = ord(substr ($string, $pos, 1)) - 0xE0;\r
+ $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;\r
+ $byte[3] = ord(substr ($string, $pos + 2, 1)) - 0x80;\r
+ \r
+ $char_code = ($byte[1] << 12) + ($byte[2] << 6) + $byte[3];\r
+ $pos += 3;\r
+ }\r
+ elseif (($ascii >= 0xC0) && ($ascii < 0xE0)) \r
+ {\r
+ $byte[1] = ord(substr ($string, $pos, 1)) - 0xC0;\r
+ $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;\r
+ \r
+ $char_code = ($byte[1] << 6) + $byte[2];\r
+ $pos += 2;\r
+ }\r
+ else \r
+ {\r
+ $char_code = ord(substr ($string, $pos, 1));\r
+ $pos += 1;\r
+ }\r
+ \r
+ if ($char_code < 0x80)\r
+ $out .= chr($char_code);\r
+ else\r
+ $out .= '\\u'. str_pad(dechex($char_code), 4, '0', STR_PAD_LEFT);\r
+ }\r
+ \r
+ return $out; \r
+ } \r
+/* \r
+ function _cut_string($string, $dl = 0) {\r
+ \r
+ $defaultLength = $dl > 0 ? $dl : $this->getOption('defaultLength');\r
+ \r
+ if ($defaultLength < 1)\r
+ return $string;\r
+ \r
+ $border = 6;\r
+ $count = 0;\r
+ $lastvalue = 0;\r
+ \r
+ for ($i = 0; $i < strlen($string); $i++)\r
+ {\r
+ $value = ord($string[$i]);\r
+ \r
+ if ($value > 127)\r
+ {\r
+ if ($value >= 192 && $value <= 223)\r
+ $i++;\r
+ elseif ($value >= 224 && $value <= 239)\r
+ $i = $i + 2;\r
+ elseif ($value >= 240 && $value <= 247)\r
+ $i = $i + 3;\r
+ \r
+ if ($lastvalue <= 223 && $value >= 223 && \r
+ $count >= $defaultLength - $border)\r
+ {\r
+ return substr($string, 0, $i) . '...';\r
+ }\r
+\r
+ // Chinese and Japanese characters are\r
+ // wider than Latin characters\r
+ if ($value >= 224)\r
+ $count++;\r
+ \r
+ }\r
+ elseif ($string[$i] == '/' || $string[$i] == '?' ||\r
+ $string[$i] == '-' || $string[$i] == ':' ||\r
+ $string[$i] == ',' || $string[$i] == ';')\r
+ {\r
+ if ($count >= $defaultLength - $border)\r
+ return substr($string, 0, $i) . '...';\r
+ }\r
+ elseif ($string[$i] == ' ')\r
+ {\r
+ if ($count >= $defaultLength - $border)\r
+ return substr($string, 0, $i) . '...';\r
+ }\r
+ \r
+ if ($count == $defaultLength)\r
+ return substr($string, 0, $i + 1) . '...';\r
+ \r
+ $lastvalue = $value;\r
+ $count++;\r
+ }\r
+\r
+ return $string;\r
+ }\r
+*/\r
+\r
+function _cut_string($string, $dl = 0) {\r
+ $maxLength = $dl > 0 ? $dl : $this->getOption('defaultLength');\r
+ \r
+ if ($maxLength < 1)\r
+ return $string;\r
+ if (strlen($string) > $maxLength)\r
+ $string = mb_strimwidth($string, 0, $maxLength, '...', _CHARSET);\r
+\r
+ return $string;\r
+}\r
+\r
+function _strip_controlchar($string){\r
+ $string = preg_replace("/[\x01-\x08\x0b\x0c\x0e-\x1f\x7f]+/","",$string);\r
+ $string = str_replace("\0","",$string);\r
+ return $string;\r
+}\r
+\r
+//modify start+++++++++\r
+ function checkTableVersion(){\r
+ $res = sql_query("SHOW FIELDS from ".sql_table('plugin_tb') );\r
+ $fieldnames = array();\r
+ while ($co = mysql_fetch_assoc($res)) {\r
+ if($co['Field'] == 'block') return true;\r
+ }\r
+ return false;\r
+ }\r
+//modify end+++++++++\r
+\r
+/*---------------------------------------------------------------------------------- */\r
+/* LOCAL */\r
+/*---------------------------------------------------------------------------------- */\r
+ /**\r
+ * Handle an incoming TrackBack ping and save the data in the database\r
+ */\r
+ function handleLocalPing($itemid, $title, $excerpt, $blog_name, $ping_url){\r
+ global $manager;\r
+ $ping_url = trim($ping_url);\r
+ \r
+ if( preg_match("/^.+tb_id=([0-9]+)$/",$ping_url,$idnum) ){\r
+ $tb_id = intval($idnum[1]);\r
+ } elseif ( preg_match("/([0-9]+)\.trackback/",$ping_url,$idnum) ){\r
+ $tb_id = intval($idnum[1]);\r
+ } elseif ( preg_match("/itemid=([0-9]+)/",$ping_url,$idnum) ){\r
+ $tb_id = intval($idnum[1]);\r
+ }\r
+\r
+ if ((!$manager->existsItem($tb_id,0,0)) && ($this->getOption('CheckIDs') == 'yes'))\r
+ return _ERROR_NOSUCHITEM . "[ $tb_id ]";\r
+ \r
+ // save data in the DB\r
+ $query = 'INSERT INTO ' . sql_table('plugin_tb_lc') . " (tb_id, from_id) VALUES ('".intval($tb_id)."','".intval($itemid)."')";\r
+ $res = @sql_query($query);\r
+ if (!$res) \r
+ return 'Could not save trackback data, possibly because of a double entry: ' . mysql_error();\r
+ }\r
+ \r
+ /**\r
+ * Show the list of TrackBack pings for a certain Trackback ID\r
+ */\r
+ function showLocalList($tb_id) {\r
+ global $CONF, $manager;\r
+ \r
+ // create SQL query\r
+ $query = 'SELECT t.from_id as from_id , i.ititle as ititle, i.ibody as ibody, i.itime as itime, i.iblog as iblog FROM '.sql_table('plugin_tb_lc').' as t, '.sql_table('item').' as i WHERE t.tb_id='.intval($tb_id) .' and i.inumber=t.from_id ORDER BY i.itime DESC';\r
+ $res = sql_query($query);\r
+ \r
+ $vars = array(\r
+ 'tburl' => $this->getTrackBackUrl($tb_id)\r
+ );\r
+\r
+ // when no TrackBack pings are found\r
+ if (!$res || mysql_num_rows($res) == 0) {\r
+ echo TEMPLATE::fill($this->getOption('tplLocalEmpty'), $vars);\r
+ return;\r
+ }\r
+ \r
+ // when TrackBack pings are found\r
+ echo TEMPLATE::fill($this->getOption('tplLocalHeader'), $vars);\r
+ \r
+ while ($o = mysql_fetch_object($res)) {\r
+ $canDelete = $this->canDelete($tb_id);\r
+ $data = array(\r
+ 'url' => createItemLink($o->from_id),\r
+ 'blogname' => htmlspecialchars(getBlogNameFromID($o->iblog)),\r
+ 'timestamp' => strftime('%Y-%m-%d',strtotime($o->itime)),\r
+ 'title' => htmlspecialchars($o->ititle),\r
+ 'excerpt' => htmlspecialchars(shorten(strip_tags($o->ibody),200,'...')),\r
+ 'delete' => $canDelete?'<a href="'. $manager->addTicketToUrl($CONF['ActionURL'].'?action=plugin&name=TrackBack&type=deletelc&tb_id='.intval($tb_id).'&from_id='.intval($o->from_id)).'">[delete]</a>':'',\r
+ 'tburl' => $this->getTrackBackUrl($tb_id),\r
+ 'commentcount'=> quickQuery('SELECT COUNT(*) as result FROM '.sql_table('comment').' WHERE citem=' . intval($o->from_id))\r
+ );\r
+ echo TEMPLATE::fill($this->getOption('tplLocalItem'), $data);\r
+ }\r
+ echo TEMPLATE::fill($this->getOption('tplLocalFooter'), $vars);\r
+ }\r
+ \r
+ /**\r
+ * Delete a TrackBack item, redirect to referer\r
+ */\r
+ function deleteLocal($tb_id, $from_id) {\r
+ if (!$this->canDelete($tb_id))\r
+ return 'You\'re not allowed to delete this trackback item';\r
+ $query = 'DELETE FROM ' . sql_table('plugin_tb_lc') . " WHERE tb_id='" . intval($tb_id) . "' and from_id='" . intval($from_id) ."'";\r
+ sql_query($query);\r
+ return '';\r
+ }\r
+ \r
+ function canDelete($tb_id) {\r
+ global $member, $manager;\r
+ \r
+ if ( ! $member->isLoggedIn() ) return 0;\r
+ \r
+ $checkIDs = $this->getOption('CheckIDs');\r
+ $itemExists =& $manager->existsItem($tb_id,0,0);\r
+ \r
+ // if CheckIDs option is set, check if member canEdit($tb_id)\r
+ // if CheckIDs option is not set, and item exists, check if member canEdit($tb_id)\r
+ // if CheckIDs option is not set, and item does not exists, check if member isAdmin()\r
+ \r
+ if (($checkIDs == 'yes') || ($itemExists))\r
+ return $member->canAlterItem($tb_id);\r
+ else\r
+ return $member->isAdmin();\r
+ }\r
+\r
+ /**************************************************************************************/\r
+ /* Plugin API calls, for installation, configuration and setup */\r
+ \r
+ function getName() { return 'TrackBack'; }\r
+ function getAuthor() { return 'rakaz + nakahara21 + hsur'; }\r
+ function getURL() { return 'http://blog.cles.jp/np_cles/category/31/subcatid/3'; }\r
+ function getVersion() { return '2.0.3 jp13'; }\r
+ function getDescription() { return '[$Revision: 1.311 $]<br />' . _TB_DESCRIPTION; }\r
+ \r
+//modify start+++++++++\r
+/*\r
+ function getTableList() { return array(sql_table("plugin_tb"), sql_table("plugin_tb_lookup")); }\r
+ function getEventList() { return array('QuickMenu','PostAddItem','AddItemFormExtras','EditItemFormExtras','PreUpdateItem','PrepareItemForEdit', 'BookmarkletExtraHead'); }\r
+*/\r
+ function getTableList() { return array(sql_table("plugin_tb"), sql_table("plugin_tb_lookup"), sql_table('plugin_tb_lc')); }\r
+\r
+ function getEventList() { return array('QuickMenu','PostAddItem','AddItemFormExtras','EditItemFormExtras','PreUpdateItem','PrepareItemForEdit', 'BookmarkletExtraHead', 'RetrieveTrackback', 'SendTrackback', 'InitSkinParse'); }\r
+//modify end+++++++++\r
+ function getMinNucleusVersion() { return 330; }\r
+ \r
+ function supportsFeature($feature) {\r
+ switch($feature) {\r
+ case 'SqlTablePrefix':\r
+ return 1;\r
+//modify start+++++++++\r
+// case 'HelpPage':\r
+// return 1;\r
+//modify end+++++++++\r
+ default:\r
+ return 0;\r
+ }\r
+ }\r
+\r
+ \r
+ function hasAdminArea() { return 1; }\r
+\r
+ function event_QuickMenu(&$data) {\r
+ global $member, $nucleus, $blogid;\r
+ \r
+ // only show to admins\r
+ if (!$member->isLoggedIn()) return;\r
+\r
+ array_push(\r
+ $data['options'],\r
+ array(\r
+ 'title' => 'Trackback',\r
+ 'url' => $this->getAdminURL(),\r
+ 'tooltip' => 'Manage your trackbacks'\r
+ )\r
+ );\r
+ }\r
+ \r
+ function install() {\r
+ $this->createOption('AcceptPing', _TB_AcceptPing,'yesno','yes');\r
+ $this->createOption('SendPings', _TB_SendPings,'yesno','yes');\r
+ $this->createOption('AutoXMLHttp', _TB_AutoXMLHttp, 'yesno', 'yes');\r
+ $this->createOption('CheckIDs', _TB_CheckIDs,'yesno','yes');\r
+\r
+ $this->createOption('tplHeader', _TB_tplHeader, 'textarea', _TB_tplHeader_VAL);\r
+ $this->createOption('tplEmpty', _TB_tplEmpty, 'textarea', _TB_tplEmpty_VAL);\r
+ $this->createOption('tplItem', _TB_tplItem, 'textarea', _TB_tplItem_VAL);\r
+ $this->createOption('tplFooter', _TB_tplFooter, 'textarea', _TB_tplFooter_VAL);\r
+//mod by cles\r
+ $this->createOption('tplLocalHeader', _TB_tplLocalHeader, 'textarea', _TB_tplLocalHeader_VAL);\r
+ $this->createOption('tplLocalEmpty', _TB_tplLocalEmpty, 'textarea', _TB_tplLocalEmpty_VAL);\r
+ $this->createOption('tplLocalItem', _TB_tplLocalItem, 'textarea', _TB_tplLocalItem_VAL);\r
+ $this->createOption('tplLocalFooter', _TB_tplLocalFooter, 'textarea', _TB_tplLocalFooter_VAL);\r
+//mod by cles end\r
+\r
+ $this->createOption('tplTbNone', _TB_tplTbNone, 'text', "No Trackbacks");\r
+ $this->createOption('tplTbOne', _TB_tplTbOne, 'text', "1 Trackback");\r
+ $this->createOption('tplTbMore', _TB_tplTbMore, 'text', "<%number%> Trackbacks");\r
+ $this->createOption('dateFormat', _TB_dateFormat, 'text', _TB_dateFormat_VAL);\r
+ \r
+ $this->createOption('NotifyEmail', _TB_NotifyEmail,'text','');\r
+ $this->createOption('DropTable', _TB_DropTable,'yesno','no');\r
+//mod by cles\r
+ $this->createOption('HideUrl',_TB_HideUrl,'yesno','yes');\r
+ $this->createOption('ajaxEnabled',_TB_ajaxEnabled,'yesno','no');\r
+\r
+ $this->createItemOption('ItemAcceptPing',_TB_ItemAcceptPing,'yesno','yes');\r
+ $this->createItemOption('isAcceptW/OLink',_TB_isAcceptWOLink,'select','default', _TB_isAcceptWOLink_VAL);\r
+\r
+ $this->createBlogOption('NotifyEmailBlog', _TB_NotifyEmailBlog,'text',''); \r
+ $this->createBlogOption('isAcceptW/OLinkDef',_TB_isAcceptWOLinkDef,'select','block', _TB_isAcceptWOLinkDef_VAL);\r
+ $this->createBlogOption('AllowTrackBack',_TB_AllowTrackBack,'yesno','yes');\r
+//mod by cles end\r
+\r
+ /* Create tables */\r
+ sql_query("\r
+ CREATE TABLE IF NOT EXISTS \r
+ ".sql_table('plugin_tb')."\r
+ (\r
+ `id` INT(11) NOT NULL AUTO_INCREMENT,\r
+ `tb_id` INT(11) NOT NULL, \r
+ `url` TEXT NOT NULL, \r
+ `block` TINYINT(4) NOT NULL, \r
+ `spam` TINYINT(4) NOT NULL, \r
+ `link` TINYINT(4) NOT NULL, \r
+ `title` TEXT, \r
+ `excerpt` TEXT, \r
+ `blog_name` TEXT, \r
+ `timestamp` DATETIME, \r
+ \r
+ PRIMARY KEY (`id`)\r
+ )\r
+ ");\r
+ \r
+ sql_query("\r
+ CREATE TABLE IF NOT EXISTS\r
+ ".sql_table('plugin_tb_lookup')."\r
+ (\r
+ `link` TEXT NOT NULL, \r
+ `url` TEXT NOT NULL, \r
+ `title` TEXT, \r
+ \r
+ PRIMARY KEY (`link` (100))\r
+ )\r
+ ");\r
+//modify start+++++++++\r
+ @sql_query('ALTER TABLE `' . sql_table('plugin_tb') . '` ADD INDEX `tb_id_block_timestamp_idx` ( `tb_id`, `block`, `timestamp` DESC )');\r
+ @sql_query('CREATE TABLE IF NOT EXISTS ' . sql_table('plugin_tb_lc'). ' (tb_id int(11) not null, from_id int(11) not null, PRIMARY KEY (tb_id,from_id))');\r
+//modify end+++++++++\r
+ }\r
+ \r
+ function uninstall() {\r
+ if ($this->getOption('DropTable') == 'yes') {\r
+ sql_query ('DROP TABLE '.sql_table('plugin_tb'));\r
+ sql_query ('DROP TABLE '.sql_table('plugin_tb_lookup'));\r
+ sql_query ("DROP table ".sql_table('plugin_tb_lc'));\r
+ }\r
+ }\r
+\r
+ function init() {\r
+ // include language file for this plugin \r
+ $language = ereg_replace( '[\\|/]', '', getLanguageName()); \r
+ if (file_exists($this->getDirectory().'language/'.$language.'.php')) \r
+ include_once($this->getDirectory().'language/'.$language.'.php'); \r
+ else \r
+ include_once($this->getDirectory().'language/'.'english.php'); \r
+ $this->notificationMail = _TB_NORTIFICATION_MAIL_BODY;\r
+ $this->notificationMailTitle = _TB_NORTIFICATION_MAIL_TITLE;\r
+ \r
+ $this->userAgent = 'NucleusCMS NP_TrackBack plugin ( '.$this->getVersion().' )';\r
+ }\r
+ }\r
-
-
- 0.9.0 Initial version of Referer by Xiffy
- 0.9.1 Added the possibility to call pop, 10 to show the most populair pages
- Minor bugfixes for htmlspecialchars
- Added substr to trim the line. Internet Explorer makes long lines instead of braking them
- 0.9.2 Added timeoffset functionality to refWhen ...
- 0.9.3 Added three display options (needs reinstallation!)
- Bugfixes and another calling option; lastall
- Added "-" on each refer*
-
- ------------------------------------------------------------
-
- 1.0 Initial release
- 1.1 Version that takes advantage of the new features in Nucleus v2.0
- (v1.55 users still need to addapt their templates)
- 1.2 - Fix: Typo (cechkids)
- - Fix: $CONF['ActionURL'] instead of $CONF['SiteURL'] . 'action.php'
- - Fix: also works with php option 'short_open_tags' set to Off
- - Added: manualpingform
- - Requires Nucleus v2.0...
- - Support for tableprefix (Nucleus versions > 2.0)
-
- 1.3 Release by caw
- - Removed: Table backwards compatibility code
- - Added: Support for adding TrackBack when editing item
- - Change: Table name changed from [nucleus_]plugin_tb to [nucleus_]plug_trackback
-
- 1.4 Release by TeRanEX
- (didn't wrote anything myself, only merged some modifications)
- - Added: Table backwards compatibility code (was removed in 1.3 but I don't
- see any reason why)
- - Change: Table name changed from [nucleus_]plug_trackback to [nucleus_]plugin_tb
- again (what was the reason for the change in 1.3?
- - Added all fixes/mods/additions of thread http://forum.nucleuscms.org/viewtopic.php?t=3247
- - Send a ping on edit item
- - sendPing with POST instead of GET
- - "Retrieving TrackBack Pings" Implementation
- - "Auto-Discovery of TrackBack Ping URLs" Implementation
- - automatically-detecting trackbackURL of permalink linked by item
- - Change: the RDF output so that it looks the same as in the MT TrackBack Spec
- (see http://forum.nucleuscms.org/viewtopic.php?t=1974)
-
- 1.5 Release by admun and TeRanEX
- - Added: Trackback updates, sending the newest data
- - Added: Autodiscovery to the bookmarklet
- - Added: Autodiscovery to the pingform
- - Fixed: Autodiscovery now looks also in the 'more'-part of an item
- - Changed/fixed: autodiscovery when editing an item, now you can check a checkbox for
- every trackback that was discovered and you want to ping
- - Added: License info
- - Changed: The description of the plugin
-
- ------------------------------------------------------------
-
- 2.0a Release by Niels Leenheer (rakaz)
- - Added: Caching of auto-detected trackback URLs in a database table
- - Added: If the cURL extension is present a HEAD request is send first, to make
- sure we are dealing with a (X)HTML page and not some large binary file format.
- - Added: The auto-detection of trackback URLs now happen in real time - as you type -
- thanks to client-side Javascript and the XmlHttpRequest object which requests
- the required data from the plugin.
-
- 2.0b - Added spinning auto-detection indicator
- - Added support for multiple character encoding methods. The plugin
- works internally fully in UTF-8 (Unicode) and can convert other
- character encodings. The output of the plugin is in UTF-8 or in US-ASCII
- with unicode characters encoded using numeric entities.
- - Added spam protection using the Blacklist plugin (thanks to Xiffy for
- helping me out by adding a generic spam check API to his plugin).
- - Added a check to see if the page which send the trackback actually
- contains a link to our server. If not, then it is probably a spamming
- attempt and block by default.
- - The output of this plugin is now fully configurable. You can specify
- you're own (X)HTML code.
- - Added a admin interface which can be used to manage trackbacks and
- manually send trackbacks to other sites. It is possible to delete
- trackbacks, but also to block and unblock trackbacks. All trackbacks
- which are marked as spam are not deleted automatically, but they end
- up in a list called 'Blocked trackbacks'. You can manually verify this
- list and unblock any trackback which is marked as spam by mistake.
- - Fixed a number of bugs, including missing hostnames and double // in
- URLs. Fixed a bug introduced in 2.0a which prevented the title and
- excerpt from showing up when sending trackbacks from a newly created
- story. Also filtering of tags is more stringent.
-
- - REMOVED: Manual ping forms. The form which is need to ping other
- weblogs is now integrated into the admin interface. The form needed
- for other weblog authors to manually add trackbacks to your website
- will return in the next release.
- - REMOVED: The ability to show a list of trackbacks in a popup window.
- This will probably return in the next release.
- - REMOVED: The ability to delete trackbacks directly from the list
- shown to administrators. This is now handled by the admin interface.
-
- 2.0 final
- - Made the help page Nucleus 3.2 compatible
- - Added a manual ping form, which allows weblog authors to add a trackback
- to your stories even when their software doesn't support trackbacks.
- - Removed <language>en</language> from the RSS output, because we can't
- be sure about the language of the contents of the RSS stream.
-
- 2.0.1 - Security fix: Plugin admin interface was exposed to all logged in users,
- not only to users with admin rights.
-
- 2.0.2 - Added autodetection of the encoding of trackbacks, which is needed when
- a trackback is send in a foreign encoding by a sender which does not
- support version 1.2 of the trackback specifications. Supported encodings:
- US-ASCII, ISO-2022-JP, UTF-8, EUC-JP, Shift_JIS. If the encoding is not
- specified according to version 1.2 of the specs AND it is not one of the
- encodings specified above, the plugin will assume it is encoding using
- ISO-8859-1.
- - Added two new events SendTrackback and RetrieveTrackback which can be
- used by other plugins or the XML-RPC APIs to allow external blog editors
- to send trackbacks. (This functionality does require a modification to
- the XML-RPC APIs).
- - Added support for more clean Trackback URLs, for example:
- http://www.rakaz.nl/nucleus/item/84.trackback or
- http://www.rakaz.nl/nucleus/item.php?id=84&format=trackback
-
- 2.0.3 - Added support for a more advanced version of the SpamCheck API
-
+ \r
+ \r
+ 0.9.0 Initial version of Referer by Xiffy\r
+ 0.9.1 Added the possibility to call pop, 10 to show the most populair pages\r
+ Minor bugfixes for htmlspecialchars\r
+ Added substr to trim the line. Internet Explorer makes long lines instead of braking them\r
+ 0.9.2 Added timeoffset functionality to refWhen ...\r
+ 0.9.3 Added three display options (needs reinstallation!)\r
+ Bugfixes and another calling option; lastall\r
+ Added "-" on each refer*\r
+ \r
+ ------------------------------------------------------------\r
+ \r
+ 1.0 Initial release\r
+ 1.1 Version that takes advantage of the new features in Nucleus v2.0\r
+ (v1.55 users still need to addapt their templates)\r
+ 1.2 - Fix: Typo (cechkids)\r
+ - Fix: $CONF['ActionURL'] instead of $CONF['SiteURL'] . 'action.php'\r
+ - Fix: also works with php option 'short_open_tags' set to Off\r
+ - Added: manualpingform\r
+ - Requires Nucleus v2.0...\r
+ - Support for tableprefix (Nucleus versions > 2.0)\r
+ \r
+ 1.3 Release by caw\r
+ - Removed: Table backwards compatibility code\r
+ - Added: Support for adding TrackBack when editing item\r
+ - Change: Table name changed from [nucleus_]plugin_tb to [nucleus_]plug_trackback\r
+\r
+ 1.4 Release by TeRanEX \r
+ (didn't wrote anything myself, only merged some modifications)\r
+ - Added: Table backwards compatibility code (was removed in 1.3 but I don't \r
+ see any reason why)\r
+ - Change: Table name changed from [nucleus_]plug_trackback to [nucleus_]plugin_tb \r
+ again (what was the reason for the change in 1.3?\r
+ - Added all fixes/mods/additions of thread http://forum.nucleuscms.org/viewtopic.php?t=3247\r
+ - Send a ping on edit item\r
+ - sendPing with POST instead of GET\r
+ - "Retrieving TrackBack Pings" Implementation \r
+ - "Auto-Discovery of TrackBack Ping URLs" Implementation \r
+ - automatically-detecting trackbackURL of permalink linked by item\r
+ - Change: the RDF output so that it looks the same as in the MT TrackBack Spec\r
+ (see http://forum.nucleuscms.org/viewtopic.php?t=1974)\r
+ \r
+ 1.5 Release by admun and TeRanEX\r
+ - Added: Trackback updates, sending the newest data\r
+ - Added: Autodiscovery to the bookmarklet\r
+ - Added: Autodiscovery to the pingform\r
+ - Fixed: Autodiscovery now looks also in the 'more'-part of an item\r
+ - Changed/fixed: autodiscovery when editing an item, now you can check a checkbox for\r
+ every trackback that was discovered and you want to ping\r
+ - Added: License info\r
+ - Changed: The description of the plugin\r
+ \r
+ ------------------------------------------------------------\r
+ \r
+ 2.0a Release by Niels Leenheer (rakaz)\r
+ - Added: Caching of auto-detected trackback URLs in a database table\r
+ - Added: If the cURL extension is present a HEAD request is send first, to make\r
+ sure we are dealing with a (X)HTML page and not some large binary file format.\r
+ - Added: The auto-detection of trackback URLs now happen in real time - as you type -\r
+ thanks to client-side Javascript and the XmlHttpRequest object which requests\r
+ the required data from the plugin.\r
+ \r
+ 2.0b - Added spinning auto-detection indicator\r
+ - Added support for multiple character encoding methods. The plugin\r
+ works internally fully in UTF-8 (Unicode) and can convert other\r
+ character encodings. The output of the plugin is in UTF-8 or in US-ASCII\r
+ with unicode characters encoded using numeric entities.\r
+ - Added spam protection using the Blacklist plugin (thanks to Xiffy for\r
+ helping me out by adding a generic spam check API to his plugin).\r
+ - Added a check to see if the page which send the trackback actually\r
+ contains a link to our server. If not, then it is probably a spamming\r
+ attempt and block by default.\r
+ - The output of this plugin is now fully configurable. You can specify\r
+ you're own (X)HTML code.\r
+ - Added a admin interface which can be used to manage trackbacks and \r
+ manually send trackbacks to other sites. It is possible to delete \r
+ trackbacks, but also to block and unblock trackbacks. All trackbacks\r
+ which are marked as spam are not deleted automatically, but they end\r
+ up in a list called 'Blocked trackbacks'. You can manually verify this\r
+ list and unblock any trackback which is marked as spam by mistake.\r
+ - Fixed a number of bugs, including missing hostnames and double // in\r
+ URLs. Fixed a bug introduced in 2.0a which prevented the title and \r
+ excerpt from showing up when sending trackbacks from a newly created\r
+ story. Also filtering of tags is more stringent.\r
+ \r
+ - REMOVED: Manual ping forms. The form which is need to ping other\r
+ weblogs is now integrated into the admin interface. The form needed\r
+ for other weblog authors to manually add trackbacks to your website\r
+ will return in the next release.\r
+ - REMOVED: The ability to show a list of trackbacks in a popup window.\r
+ This will probably return in the next release.\r
+ - REMOVED: The ability to delete trackbacks directly from the list\r
+ shown to administrators. This is now handled by the admin interface.\r
+\r
+ 2.0 final \r
+ - Made the help page Nucleus 3.2 compatible\r
+ - Added a manual ping form, which allows weblog authors to add a trackback\r
+ to your stories even when their software doesn't support trackbacks.\r
+ - Removed <language>en</language> from the RSS output, because we can't\r
+ be sure about the language of the contents of the RSS stream.\r
+\r
+ 2.0.1 - Security fix: Plugin admin interface was exposed to all logged in users,\r
+ not only to users with admin rights.\r
+\r
+ 2.0.2 - Added autodetection of the encoding of trackbacks, which is needed when\r
+ a trackback is send in a foreign encoding by a sender which does not \r
+ support version 1.2 of the trackback specifications. Supported encodings:\r
+ US-ASCII, ISO-2022-JP, UTF-8, EUC-JP, Shift_JIS. If the encoding is not\r
+ specified according to version 1.2 of the specs AND it is not one of the\r
+ encodings specified above, the plugin will assume it is encoding using\r
+ ISO-8859-1.\r
+ - Added two new events SendTrackback and RetrieveTrackback which can be\r
+ used by other plugins or the XML-RPC APIs to allow external blog editors\r
+ to send trackbacks. (This functionality does require a modification to\r
+ the XML-RPC APIs).\r
+ - Added support for more clean Trackback URLs, for example:\r
+ http://www.rakaz.nl/nucleus/item/84.trackback or \r
+ http://www.rakaz.nl/nucleus/item.php?id=84&format=trackback\r
+ \r
+ 2.0.3 - Added support for a more advanced version of the SpamCheck API\r
+ \r
\ No newline at end of file
$action = requestVar('action');
$aActionsNotToCheck = array(
'',
+ 'ping',
);
if (!in_array($action, $aActionsNotToCheck)) {
if (!$manager->checkTicket()) doError(_ERROR_BADTICKET);
-<h2>¥Ø¥ë¥×</h2>
-
-
-<h3>¥¹¥¥ó¤Ø¤Îµ½ÒÎã</h3>
-
-<p>
- <h4><%TrackBack(list)%></h4>
-</p>
-<p>
- ¼õ¤±¼è¤Ã¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤Î°ìÍ÷¤òɽ¼¨¤·¤Þ¤¹¡£<br />
- ¤Þ¤¿¡¢ <strong><%TrackBack(list,12)%></strong>¤Î¤è¤¦¤Ë¥Ñ¥é¥á¡¼¥¿¤Î2¤Ä¤á¤Ëµ»öid¤ò¤Ä¤±¤ë¤È¡¢¤½¤Îµ»öid¤Ëping¤µ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤Î°ìÍ÷¤òËä¤á¹þ¤à¤³¤È¤â²Äǽ¤Ç¤¹¡£<br />°ìÍ÷ɽ¼¨¤Î¥Ç¥¶¥¤¥ó(¥Æ¥ó¥×¥ì¡¼¥È)¤Ï¡¢¥×¥é¥°¥¤¥ó¤Î¥ª¥×¥·¥ç¥ó(ÊÔ½¸)²èÌ̤ˤƥ«¥¹¥¿¥Þ¥¤¥º¤Ç¤¤Þ¤¹¡£</p>
-
-<p>
- <h4><%TrackBack(list)%></h4>
-</p>
-<p>
- ¼õ¤±¼è¤Ã¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤Î°ìÍ÷¤òɽ¼¨¤·¤Þ¤¹¡£<br />
- ¤Þ¤¿¡¢ <strong><%TrackBack(list,12)%></strong>¤Î¤è¤¦¤Ë¥Ñ¥é¥á¡¼¥¿¤Î2¤Ä¤á¤Ëµ»öid¤ò¤Ä¤±¤ë¤È¡¢¤½¤Îµ»öid¤Ëping¤µ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤Î°ìÍ÷¤òËä¤á¹þ¤à¤³¤È¤â²Äǽ¤Ç¤¹¡£<br />°ìÍ÷ɽ¼¨¤Î¥Ç¥¶¥¤¥ó(¥Æ¥ó¥×¥ì¡¼¥È)¤Ï¡¢¥×¥é¥°¥¤¥ó¤Î¥ª¥×¥·¥ç¥ó(ÊÔ½¸)²èÌ̤ˤƥ«¥¹¥¿¥Þ¥¤¥º¤Ç¤¤Þ¤¹¡£
-</p>
-<p>
- ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¤¹¤Ù¤Æ¤Î¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤¬É½¼¨¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¤¬¡¢Â¿¿ô¤Î¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤¬¤¢¤ë¤è¤¦¤Ê¾ì¹ç¤Ë¤ÏºÇ¿·¤Î¤â¤Î¤À¤±¤òɽ¼¨¤·¤Æ¡¢»Ä¤ê¤ÎÉôʬ¤òÀޤꤿ¤¿¤à¤³¤È¤¬¤Ç¤¤Þ¤¹¡£<br />
-<br />
-¡¦ºÇ¿·¤Î5·ï¤À¤±¤òɽ¼¨¤·¤Æ¡¢¤¢¤È¤ÏÀޤꤿ¤¿¤à¾ì¹ç<br />
-<strong><%TrackBack(list, limit5)%></strong><br />
-<br />
-¡¦1.x·Ï¤ÈƱ¤¸¤è¤¦¤Ë¤¹¤Ù¤Æ¤Î¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤òŸ³«¤¹¤ë¾ì¹ç¡Ê¥Ç¥Õ¥©¥ë¥È¡Ë<br />
-<strong><%TrackBack(list, limit-1)%></strong><br />
-<br />
-¡¦¤¹¤Ù¤Æ¤Î¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤òÀޤꤿ¤¿¤ó¤À¾õÂ֤ˤ¹¤ë¾ì¹ç<br />
-<strong><%TrackBack(list, limit0)%></strong><br />
-</p>
-<p>
- µ»öid¤Î»ØÄê¤È¤ÈÀޤꤿ¤¿¤ß¤òƱ»þ¤Ë»È¤¦¾ì¹ç¤Ë¤Ï<strong><%TrackBack(list,<em>µ»öid</em>,<em>limit0</em>)%></strong>¤Î¤è¤¦¤Ë»ØÄꤷ¤Þ¤¹¡£
-</p>
-
-<p>
- <h4><%TrackBack(form)%></h4>
-</p>
-<p>
- ¼êÆ°¤Ç¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò¼õ¤±ÉÕ¤±¤ëÆþÎÏ¥Õ¥©¡¼¥à¥Ú¡¼¥¸¤Ø¤Î¥ê¥ó¥¯url¤òɽ¼¨¤·¤Þ¤¹¡£<br />
- ¥ê¥ó¥¯Àè¥Ú¡¼¥¸¤ÇÁê¼ê¦¤Ë¥È¥é¥Ã¥¯¥Ð¥Ã¥¯Á÷¿®µ¡Ç½¤¬¤Ê¤¤¾ì¹ç¤Ç¤âµ»öÍ×Ìó¤Èurl¤ò¼õ¤±ÉÕ¤±¤ë¤³¤È¤¬¤Ç¤¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£<br /><br />
- <blockquote>ÊØÍø¤Ê»È¤¤Êý¤È¤·¤Æ¤Ï¡¢¤³¤Î¥×¥é¥°¥¤¥ó¤Î¥ª¥×¥·¥ç¥ó(ÊÔ½¸)²èÌ̤ˤƥȥé¥Ã¥¯¥Ð¥Ã¥¯É½¼¨ÀìÍѥƥó¥×¥ì¡¼¥È¤Î¡Ö¥Õ¥Ã¥¿¡×¤Î½ê¤Ë¡¢
- <pre>¤³¤Îµ»ö¤Ø¤Î¼êÆ°¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤Ï
-<a href='<%form%>' onclick='window.open(this.href,
-"trackback", "scrollbars=yes,width=600,height=340,left=10,top=10,status=yes,resizable=yes");
- return false;'>¤³¤Á¤é¤Î¥Õ¥©¡¼¥à</a>¤«¤é¤É¤¦¤¾¡£
-</pre>
- ¤È½ñ¤Â¤·¤Æ¤ª¤¯¤È¡¢¾åµ<strong><%TrackBack(list)%></strong>¤ò½ñ¤¤¤¿²Õ½ê¤Ë¼«Æ°Åª¤Ë¤³¤Î¼êÆ°ping¥Õ¥©¡¼¥à¤Ø¤Î¥ê¥ó¥¯¤¬É½¼¨¤µ¤ì¡¢¼êÆ°ping¥Õ¥©¡¼¥à¤¬¥Ý¥Ã¥×¥¢¥Ã¥×¤¹¤ë¤è¤¦¤Ë¤Ç¤¤Þ¤¹¡£<br />
- ¤â¤Á¤í¤ó¡¢¥Æ¥ó¥×¥ì¡¼¥È¤Ë<strong><%form%></strong>¤òËä¤á¹þ¤Þ¤º¤Ë¡¢¥¹¥¥ó¤ÎÊ̤ξì½ê¤Ë¸ÄÊ̤Ë<a href='<%TrackBack(form)%></a>¤È½ñ¤¤¤Æ¤â(½ñ¤«¤Ê¤¯¤Æ¤â)·ë¹½¤Ç¤¹¡£</blockquote>
-
-</p>
-
-<p>
- <h4><%TrackBack(url)%></h4>
-</p>
-<p>
- ¤¤¤ï¤æ¤ë¥È¥é¥Ã¥¯¥Ð¥Ã¥¯URL(Áê¼ê¦¤«¤é¸«¤¿pingÀè)¤òɽ¼¨¤·¤Þ¤¹¡£<br />
- ¤Þ¤¿¡¢¤³¤Î¥×¥é¥°¥¤¥ó¤Î¥ª¥×¥·¥ç¥ó(ÊÔ½¸)²èÌ̤ˤÆÀßÄê¤Ç¤¤ë¥È¥é¥Ã¥¯¥Ð¥Ã¥¯É½¼¨ÀìÍѥƥó¥×¥ì¡¼¥ÈÆâ¤Ë¤Ï<strong><%action%></strong>¤È½ñ¤¹þ¤à¤È¡¢¥È¥é¥Ã¥¯¥Ð¥Ã¥¯url¤ËÊÑ´¹¤µ¤ì¤Þ¤¹¡£<br />
- <blockquote>Î㤨¤Ð¡¢¥È¥é¥Ã¥¯¥Ð¥Ã¥¯É½¼¨ÀìÍѥƥó¥×¥ì¡¼¥È¤Î¡Ö¥Õ¥Ã¥¿¡×¤Î½ê¤Ë¡¢
- <pre>¤³¤Îµ»ö¤Ø¤Î¥È¥é¥Ã¥¯¥Ð¥Ã¥¯url:<a href='<%action%>'><%action%></a>
-(±¦¥¯¥ê¥Ã¥¯¤Ç¥·¥ç¡¼¥È¥«¥Ã¥È¤Î¥³¥Ô¡¼¤ò¤´ÍøÍѤ¯¤À¤µ¤¤)
-</pre>
- ¤È½ñ¤¤¤Æ¤ª¤±¤Ð¡¢¸ÄÊ̤Ë<strong><%TrackBack(url)%></strong>¤ò¥¹¥¥ó¤Ë½ñ¤¹þ¤Þ¤Ê¤¯¤Æ¤â<strong><%TrackBack(list)%></strong>¤ò½ñ¤¤¤¿¾ì½ê¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£</blockquote>
-</p>
-
-
-<p>
- <h4><%if(TrackBack,<em>key</em>,<em>value</em>)%> (v3.3¤è¤ê)</h4>
-</p>
-<p>
- if³ÈÄ¥(<%if()%>)¤ËÂбþ¤·¤Æ¤¤¤Þ¤¹¡£<br />
- ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò¼õ¤±ÉÕ¤±¤Æ¤¤¤ë¾ì¹ç¤ä¡¢¥Ð¥Ã¥¯¥ê¥ó¥¯¥Á¥§¥Ã¥¯¤¬Í¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¾ì¹ç¤Î¤ß¤ËÆÃÄê¤Îɽ¼¨¤ò¤µ¤»¤ë¤³¤È¤¬¤Ç¤¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£<br />
- <br />
-
- <ul>
- <li><em>key</em>(¥Á¥§¥Ã¥¯¤Î¼ïÎà¤ò»ØÄꤷ¤Þ¤¹)</li>
- <li>¡¡<b>accept</b>¡¡¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò¼õ¤±ÉÕ¤±¤Æ¤¤¤ë¤«¤É¤¦¤«¡Ê¥Ç¥Õ¥©¥ë¥È¡Ë</li>
- <li>¡¡<b>required</b>¡¡¥Ð¥Ã¥¯¥ê¥ó¥¯¥Á¥§¥Ã¥¯¤¬Í¸ú¤«¤É¤¦¤«</li>
- </ul>
- <ul>
- <li><em>value</em>(ȽÄê·ë²Ì¤ò»ØÄꤷ¤Þ¤¹)</li>
- <li>¡¡<b>yes</b>¡¡¥Á¥§¥Ã¥¯¤ÎÆâÍƤ¬¿¿¤Î¾ì¹ç¡¢¿¿¤Ç¤¢¤ë¤ÈȽÃǤ·¤Þ¤¹¡Ê¥Ç¥Õ¥©¥ë¥È¡Ë</li>
- <li>¡¡<b>no</b>¡¡¥Á¥§¥Ã¥¯¤ÎÆâÍƤ¬¿¿¤Î¾ì¹ç¡¢µ¶¤Ç¤¢¤ë¤ÈȽÃǤ·¤Þ¤¹</li>
- </ul>
-
- <br />
- Îã1¡Ë<%if(TrackBack)%>¤³¤ÎÉôʬ¤Ï¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò¼õ¤±ÉÕ¤±¤Æ¤¤¤ë»þ¤Î¤ßɽ¼¨¤µ¤ì¤Þ¤¹<%endif%><br />
- Îã2¡Ë<%if(TrackBack,accept,no)%>¤³¤ÎÉôʬ¤Ï¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò¼õ¤±ÉÕ¤±¤Æ¤¤¤Ê¤¤»þ¤Î¤ßɽ¼¨¤µ¤ì¤Þ¤¹<%endif%><br />
-</p>
-
-<h3>¥Æ¥ó¥×¥ì¡¼¥ÈÆâ¤Îµ½ÒÎã</h3>
-
-<p>
- ¢¨¾åµ¤Î¥¹¥¥óµ½ÒÎã¤Ï¤¹¤Ù¤Æ¥Æ¥ó¥×¥ì¡¼¥ÈÆâ¤Ç¤â»ÈÍѤǤ¤Þ¤¹¡£
-</p>
-
-<p>
- <h4><%TrackBack(count)%></h4>
-</p>
-<p>
- µ»ö¤´¤È¤Î²¿·ï¥È¥é¥Ã¥¯¥Ð¥Ã¥¯·ï¿ô¤òɽ¼¨¤·¤Þ¤¹¡£<br />
- ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï"No Trackbacks",
- "1 Trackback", "2 Trackbacks",¤Î¤è¤¦¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£<br />
- ¥×¥é¥°¥¤¥ó¤Î¥ª¥×¥·¥ç¥ó(ÊÔ½¸)²èÌ̤ˤÆÀßÄꤷ¤Æ¤¯¤À¤µ¤¤¡£
-</p>
-
-
-<h3>ɽ¼¨¤Î¥«¥¹¥¿¥Þ¥¤¥º</h3>
-
-<p>
- ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯´ØÏ¢¤Îɽ¼¨ÊýË¡¤Ï¥Æ¥ó¥×¥ì¡¼¥È¤òÊÔ½¸¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¥«¥¹¥¿¥Þ¥¤¥º¤Ç¤¤Þ¤¹¤¬¡¢¿§¤ä;Çò¤Ê¤É¤Î¥Ç¥¶¥¤¥ó¤ÏCSS¦¤Ç»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¥Æ¥ó¥×¥ì¡¼¥ÈÆâ¤ËÆþÎϤ·¤¿¥¯¥é¥¹Ì¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ïcss¤Ç»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£¥Ç¥Õ¥©¥ë¥È¤Î¥Æ¥ó¥×¥ì¡¼¥È¤ò¾þ¤ëCSS¥×¥í¥Ñ¥Æ¥£¤ÎÎã¤ò¤¢¤²¤Æ¤ª¤¤Þ¤¹¡£
-</p>
-
-<pre>div.tb {
- border: 1px solid #000; background: #FFF;
-}
-div.tb div.head {
- padding: 4px;
- background: #000; color: #FFF;
- font-weight: bold; text-transform: lowercase; letter-spacing: 0.6em;
-}
-div.tb div.empty {
- padding: 4px;
- font-size: 95%;
-}
-div.tb div.item {
- padding: 4px;
-}
-div.tb div.item div.name {
- margin-bottom: 8px;
- font-size: 120%; font-weight: bold;
-}
-div.tb div.item div.body {
- font-size: 95%;
-}
-div.tb div.item div.body a {
- font-weight: bold;
-}
-div.tb div.item div.date {
- margin-bottom: 8px;
- color: #888;
- font-size: 85%; text-align: right;
-}
-div.tb div.info {
- padding: 4px;
- color: #FFF; background: #888;
- font-size: 85%; font-style: italic;
-}</pre>
-
-<h3>ÆüËܸìÈǹ¹¿·ÍúÎò</h3>
-
-<ul>
- <li>Version 2.0.3jp12 : (2008/01/12)</li>
- <li>¡¡[Fixed] ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Îʸ»ú¥³¡¼¥É¤¬Å¬ÀڤǤʤ«¤Ã¤¿ÌäÂê¤ò½¤Àµ</li>
- <li>¡¡[Fixed] ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ÎÁ÷¿®Ê¸»ú¥³¡¼¥É¤òUTF-8¸ÇÄê¤Ë¤·¤¿</li>
- <li>¡¡[Fixed] ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯²Ä/ÉԲĤÎȽÄ꤬¤ª¤«¤·¤«¤Ã¤¿ÌäÂê¤ò½¤Àµ</li>
-
- <li>Version 2.0.3jp11 : (2007/09/30)</li>
- <li>¡¡[Added] SuperAdmin°Ê³°¤Ç¤âTrackback¤¬´ÉÍý¤Ç¤¤ë¤è¤¦¤Ë¤·¤¿</li>
-
- <li>Version 2.0.3jp10 : (2007/06/30)</li>
- <li>¡¡[Fixed] mysql_query()¤òsql_query()¤ËÊѹ¹</li>
- <li>¡¡[Changed] ¼ÂÂλ²¾È¥Æ¡¼¥Ö¥ë¤Ë¤Ä¤¤¤ÆNucleusɸ½à¤â¤Î¤ò»È¤¦¤è¤¦¤Ë¤·¤¿</li>
- <li>¡¡[Changed] ¥¤¥ó¥¹¥È¡¼¥ë¤Ç¤¤ë¥Ð¡¼¥¸¥ç¥ó¤ò3.3°Ê¹ß¤·¤¿</li>
- <li>¡¡[Changed] Rico¤ò2.0¤Ë¥¢¥Ã¥×¥Ç¡¼¥È¤·¤¿¤Î¤Ëȼ¤¤¡¢´ÉÍý²èÌ̤ε¡Ç½¤òÁý¶¯</li>
- <li>¡¡[Added] ¥³¥á¥ó¥ÈÉôʬ¤Ç¤â¥Æ¥ó¥×¥ì¡¼¥ÈÊÑ¿ô¤¬»È¤¨¤ë¤è¤¦¤Ë¤·¤¿</li>
- <li>¡¡[Fixed] ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯Á÷¿®Éôʬ¤ÎÉÔ¶ñ¹ç¤ò½¤Àµ(FC2Âкö)</li>
- <li>¡¡[Changed] UserAgent¤ò¥ª¥ê¥¸¥Ê¥ëÈǤˤ¢¤ï¤»¤ÆÊѹ¹</li>
- <li>¡¡[Changed] TrackBack¤Î¥ì¥¹¥Ý¥ó¥¹¤Î²òÀϤËXML¥Ñ¡¼¥µ¡¼¤ò»È¤¦¤è¤¦¤Ë¤·¤¿</li>
- <li>¡¡[Fixed] ¸ÀµÚ¥ê¥ó¥¯¥Á¥§¥Ã¥¯¤ÎÉÔ¶ñ¹ç¤ò½¤Àµ</li>
- <li>¡¡[Added] ÊÝα¤Ë¤·¤Æ¤¤¤ëURL¤ÈƱ¤¸URL¤Î¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò̵»ë¤¹¤ë¤è¤¦¤Ë¤·¤¿</li>
- <!-- 10.1, 10.2, 10.3 -->
- <li>¡¡[Fixed] ¸ÀµÚ¥ê¥ó¥¯¥Á¥§¥Ã¥¯¤ÎÍѤÎURLÀ¸À®¥ë¡¼¥Á¥ó¤ÎÉÔ¶ñ¹ç¤ò½¤Àµ</li>
- <!-- 10.4 -->
- <li>¡¡[Added] spam¥È¥é¥Ã¥¯¥Ð¥Ã¥¯°ì³ç¾Ãµî»þ¤Ë³Îǧ¤¬½Ð¤ë¤è¤¦¤Ë¤·¤¿</li>
-
- <li>Version 2.0.3jp9 : (2007/05/04)</li>
- <li>¡¡[Added] doIf()¤òÄɲÃ(Nucleus 3.3¸þ¤±)</li>
- <li>¡¡[Added] URL¤¬Ìµ¸ú¤Ê¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò̵»ë¤¹¤ë¤è¤¦¤Ë¤·¤¿</li>
-
- <li>Version 2.0.3jp8 : (2007/03/18)</li>
- <li>¡¡[Fixed] ´ÉÍý²èÌ̤ÇStory¤Î¥ê¥ó¥¯¤ÎÉÔ¶ñ¹ç¤ò½¤Àµ</li>
- <li>¡¡[Changed] URLÃê½Ð¥ë¡¼¥Á¥ó¤ò²þÎÉ</li>
- <li>¡¡[Changed] ´ÉÍý²èÌ̤ؤΥê¥ó¥¯¤ò½¤Àµ</li>
- <li>¡¡[Changed] ´ÉÍý²èÌ̤Υڡ¼¥¸¥ó¥°¤òAjaxÂбþ¤Ë¤·¤¿</li>
- <li>¡¡[Changed] ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯ÄÌÃÎ¥¢¥É¥ì¥¹¤ò¥Ö¥í¥°¤´¤È¤ËÀßÄê¤Ç¤¤ë¤è¤¦¤Ë¤·¤¿</li>
- <li>¡¡[Fixed] php¤Îshort open¥¿¥°¤ò½¤Àµ</li>
- <li>¡¡[Fixed] ´ÉÍý²èÌ̤Υȥé¥Ã¥¯¥Ð¥Ã¥¯°ìÍ÷¤ÇÆüÉÕ¤¬Àµ¾ï¤Ëɽ¼¨¤µ¤ì¤Ê¤¤ÌäÂê¤ò½¤Àµ</li>
-
- <li>Version 2.0.3jp7 : (2006/11/26)</li>
- <li>¡¡[Changed] SpamChek¤Ë¤Ä¤¤¤ÆÈùÄ´À°</li>
- <li>¡¡[Added] Ticket½èÍý¤òÄɲÃ(CSRFÂкö)</li>
- <li>¡¡[Fixed] URL¤Ë&¤¬Æþ¤Ã¤Æ¤¤¤ë¤È¤¤ÎÆ°ºî¤òÊѹ¹</li>
- <li>¡¡[Added] ´ÉÍý²èÌ̤˥¢¥¤¥³¥ó¤òÄɲÃ</li>
-
- <li>Version 2.0.3jp6 : (2006/09/30)</li>
- <li>¡¡[Fixed] ¥»¥¥å¥ê¥Æ¥£¤Î¸þ¾å</li>
-
- <li>Version 2.0.3jp5 : (2006/09/16)</li>
- <li>¡¡[Fixed] getPermaLinksFromText()Æâ¤ÎURLÃê½Ð¥ë¡¼¥Á¥ó¤ÎÉÔ¶ñ¹ç¤ò½¤Àµ</li>
- <li>¡¡[Fixed] Auto-Discovery»þ¤ËSQL¥¨¥é¡¼¤¬½Ð¤ëÉÔ¶ñ¹ç¤ò½¤Àµ</li>
- <li>¡¡[Fixed] ´ÉÍý²èÌ̤ǥѡ¼¥¹¥¨¥é¡¼¤¬½Ð¤ë¾ì¹ç¤¬¤¢¤ëÉÔ¶ñ¹ç¤ò½¤Àµ</li>
- <li>¡¡[Changed] SQL¤Î¥¯¥©¡¼¥È¤ò"¤«¤é'¤ËÊѹ¹</li>
- <li>¡¡[Fixed] mb_emulator´Ä¶¤Ë¤Æ¥¨¥é¡¼¤¬½Ð¤ëÌäÂê¤ò½¤Àµ</li>
- <li>¡¡[Fixed] curl¤¬Í¸ú¤Ê´Ä¶¤Ç¥¨¥é¡¼¤¬½Ð¤ëÌäÂê¤ò½¤Àµ</li>
-
- <li>Version 2.0.3jp4 : (2006/07/15)</li>
- <li>¡¡[Added] AutoDiscoveryURL½ÐÎÏ»þ¤ËSpamCheck¤ò¹Ô¤¦¤è¤¦¤Ë¤·¤¿</li>
- <li>¡¡[Added] ¥á¥Ã¥»¡¼¥¸¡¢¥Ç¥Õ¥©¥ë¥ÈÃͤòÆüËܸ첽</li>
- <li>¡¡[Added] Âç¼êASP¤Î¸ÀµÚ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¥Á¥§¥Ã¥¯¤ÎºÝ¤ËURL¤Î¥ê¥À¥¤¥ì¥¯¥È¤ò²ò½ü¤¹¤ë¤è¤¦¤Ë¤·¤¿</li>
+<h2>¥Ø¥ë¥×</h2>\r
+\r
+\r
+<h3>¥¹¥¥ó¤Ø¤Îµ½ÒÎã</h3>\r
+<p>\r
+Nucleus CMS Japan Wiki¤Î<a href="http://japan.nucleuscms.org/wiki/plugins:trackback">NP_TrackBack¤Î¥Ú¡¼¥¸</a>¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£\r
+</p>\r
+\r
+<h3>ɽ¼¨¤Î¥«¥¹¥¿¥Þ¥¤¥º</h3>\r
+<p>\r
+ ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯´ØÏ¢¤Îɽ¼¨ÊýË¡¤Ï¥Æ¥ó¥×¥ì¡¼¥È¤òÊÔ½¸¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¥«¥¹¥¿¥Þ¥¤¥º¤Ç¤¤Þ¤¹¤¬¡¢¿§¤ä;Çò¤Ê¤É¤Î¥Ç¥¶¥¤¥ó¤ÏCSS¦¤Ç»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¥Æ¥ó¥×¥ì¡¼¥ÈÆâ¤ËÆþÎϤ·¤¿¥¯¥é¥¹Ì¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ïcss¤Ç»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£¥Ç¥Õ¥©¥ë¥È¤Î¥Æ¥ó¥×¥ì¡¼¥È¤ò¾þ¤ëCSS¥×¥í¥Ñ¥Æ¥£¤ÎÎã¤ò¤¢¤²¤Æ¤ª¤¤Þ¤¹¡£\r
+</p>\r
+\r
+<pre>div.tb {\r
+ border: 1px solid #000; background: #FFF;\r
+}\r
+div.tb div.head {\r
+ padding: 4px;\r
+ background: #000; color: #FFF;\r
+ font-weight: bold; text-transform: lowercase; letter-spacing: 0.6em;\r
+}\r
+div.tb div.empty {\r
+ padding: 4px;\r
+ font-size: 95%;\r
+}\r
+div.tb div.item {\r
+ padding: 4px;\r
+}\r
+div.tb div.item div.name {\r
+ margin-bottom: 8px;\r
+ font-size: 120%; font-weight: bold;\r
+}\r
+div.tb div.item div.body {\r
+ font-size: 95%;\r
+}\r
+div.tb div.item div.body a {\r
+ font-weight: bold;\r
+}\r
+div.tb div.item div.date {\r
+ margin-bottom: 8px;\r
+ color: #888;\r
+ font-size: 85%; text-align: right;\r
+}\r
+div.tb div.info {\r
+ padding: 4px;\r
+ color: #FFF; background: #888;\r
+ font-size: 85%; font-style: italic;\r
+}</pre>\r
+\r
+<h3>ÆüËܸìÈǹ¹¿·ÍúÎò</h3>\r
+\r
+<ul>\r
+ <li>Version 2.0.3jp13 : (2008/12/14)</li>\r
+ <li>¡¡[Fixed] Ping¥Õ¥©¡¼¥à¤Ø¤Î¥ê¥ó¥¯¤ò³«¤³¤¦¤È¤¹¤ë¤ÈInvalid or expired ticket.¤Ë¤Ê¤ëÌäÂê¤ò½¤Àµ</li>\r
+ <li>¡¡[Fixed] TrackBackÁ÷¿®»þ¤Î¥¨¥é¡¼¥Ï¥ó¥É¥ê¥ó¥°¤ò²þÎɤ·¤¿</li>\r
+ <li>¡¡[Fixed] TrackBack¤Îʸ»ú¥³¡¼¥É¤Î¸¡½Ð¤¬Àµ¤·¤¯¹Ô¤ï¤ì¤Ê¤¤¾ì¹ç¤¬¤¢¤ëÌäÂê¤ò½¤Àµ</li>\r
+ \r
+ <li>Version 2.0.3jp12 : (2008/01/12)</li>\r
+ <li>¡¡[Fixed] ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Îʸ»ú¥³¡¼¥É¤¬Å¬ÀڤǤʤ«¤Ã¤¿ÌäÂê¤ò½¤Àµ</li>\r
+ <li>¡¡[Fixed] ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ÎÁ÷¿®Ê¸»ú¥³¡¼¥É¤òUTF-8¸ÇÄê¤Ë¤·¤¿</li>\r
+ <li>¡¡[Fixed] ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯²Ä/ÉԲĤÎȽÄ꤬¤ª¤«¤·¤«¤Ã¤¿ÌäÂê¤ò½¤Àµ</li>\r
+ \r
+ <li>Version 2.0.3jp11 : (2007/09/30)</li>\r
+ <li>¡¡[Added] SuperAdmin°Ê³°¤Ç¤âTrackBack¤¬´ÉÍý¤Ç¤¤ë¤è¤¦¤Ë¤·¤¿</li>\r
+ \r
+ <li>Version 2.0.3jp10 : (2007/06/30)</li>\r
+ <li>¡¡[Fixed] mysql_query()¤òsql_query()¤ËÊѹ¹</li>\r
+ <li>¡¡[Changed] ¼ÂÂλ²¾È¥Æ¡¼¥Ö¥ë¤Ë¤Ä¤¤¤ÆNucleusɸ½à¤â¤Î¤ò»È¤¦¤è¤¦¤Ë¤·¤¿</li>\r
+ <li>¡¡[Changed] ¥¤¥ó¥¹¥È¡¼¥ë¤Ç¤¤ë¥Ð¡¼¥¸¥ç¥ó¤ò3.3°Ê¹ß¤·¤¿</li>\r
+ <li>¡¡[Changed] Rico¤ò2.0¤Ë¥¢¥Ã¥×¥Ç¡¼¥È¤·¤¿¤Î¤Ëȼ¤¤¡¢´ÉÍý²èÌ̤ε¡Ç½¤òÁý¶¯</li>\r
+ <li>¡¡[Added] ¥³¥á¥ó¥ÈÉôʬ¤Ç¤â¥Æ¥ó¥×¥ì¡¼¥ÈÊÑ¿ô¤¬»È¤¨¤ë¤è¤¦¤Ë¤·¤¿</li>\r
+ <li>¡¡[Fixed] ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯Á÷¿®Éôʬ¤ÎÉÔ¶ñ¹ç¤ò½¤Àµ(FC2Âкö)</li>\r
+ <li>¡¡[Changed] UserAgent¤ò¥ª¥ê¥¸¥Ê¥ëÈǤˤ¢¤ï¤»¤ÆÊѹ¹</li>\r
+ <li>¡¡[Changed] TrackBack¤Î¥ì¥¹¥Ý¥ó¥¹¤Î²òÀϤËXML¥Ñ¡¼¥µ¡¼¤ò»È¤¦¤è¤¦¤Ë¤·¤¿</li>\r
+ <li>¡¡[Fixed] ¸ÀµÚ¥ê¥ó¥¯¥Á¥§¥Ã¥¯¤ÎÉÔ¶ñ¹ç¤ò½¤Àµ</li>\r
+ <li>¡¡[Added] ÊÝα¤Ë¤·¤Æ¤¤¤ëURL¤ÈƱ¤¸URL¤Î¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò̵»ë¤¹¤ë¤è¤¦¤Ë¤·¤¿</li>\r
+ <!-- 10.1, 10.2, 10.3 -->\r
+ <li>¡¡[Fixed] ¸ÀµÚ¥ê¥ó¥¯¥Á¥§¥Ã¥¯¤ÎÍѤÎURLÀ¸À®¥ë¡¼¥Á¥ó¤ÎÉÔ¶ñ¹ç¤ò½¤Àµ</li>\r
+ <!-- 10.4 -->\r
+ <li>¡¡[Added] spam¥È¥é¥Ã¥¯¥Ð¥Ã¥¯°ì³ç¾Ãµî»þ¤Ë³Îǧ¤¬½Ð¤ë¤è¤¦¤Ë¤·¤¿</li>\r
+ \r
+ <li>Version 2.0.3jp9 : (2007/05/04)</li>\r
+ <li>¡¡[Added] doIf()¤òÄɲÃ(Nucleus 3.3¸þ¤±)</li>\r
+ <li>¡¡[Added] URL¤¬Ìµ¸ú¤Ê¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò̵»ë¤¹¤ë¤è¤¦¤Ë¤·¤¿</li>\r
+ \r
+ <li>Version 2.0.3jp8 : (2007/03/18)</li>\r
+ <li>¡¡[Fixed] ´ÉÍý²èÌ̤ÇStory¤Î¥ê¥ó¥¯¤ÎÉÔ¶ñ¹ç¤ò½¤Àµ</li>\r
+ <li>¡¡[Changed] URLÃê½Ð¥ë¡¼¥Á¥ó¤ò²þÎÉ</li>\r
+ <li>¡¡[Changed] ´ÉÍý²èÌ̤ؤΥê¥ó¥¯¤ò½¤Àµ</li>\r
+ <li>¡¡[Changed] ´ÉÍý²èÌ̤Υڡ¼¥¸¥ó¥°¤òAjaxÂбþ¤Ë¤·¤¿</li>\r
+ <li>¡¡[Changed] ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯ÄÌÃÎ¥¢¥É¥ì¥¹¤ò¥Ö¥í¥°¤´¤È¤ËÀßÄê¤Ç¤¤ë¤è¤¦¤Ë¤·¤¿</li>\r
+ <li>¡¡[Fixed] php¤Îshort open¥¿¥°¤ò½¤Àµ</li>\r
+ <li>¡¡[Fixed] ´ÉÍý²èÌ̤Υȥé¥Ã¥¯¥Ð¥Ã¥¯°ìÍ÷¤ÇÆüÉÕ¤¬Àµ¾ï¤Ëɽ¼¨¤µ¤ì¤Ê¤¤ÌäÂê¤ò½¤Àµ</li>\r
+ \r
+ <li>Version 2.0.3jp7 : (2006/11/26)</li>\r
+ <li>¡¡[Changed] SpamChek¤Ë¤Ä¤¤¤ÆÈùÄ´À°</li>\r
+ <li>¡¡[Added] Ticket½èÍý¤òÄɲÃ(CSRFÂкö)</li>\r
+ <li>¡¡[Fixed] URL¤Ë&¤¬Æþ¤Ã¤Æ¤¤¤ë¤È¤¤ÎÆ°ºî¤òÊѹ¹</li>\r
+ <li>¡¡[Added] ´ÉÍý²èÌ̤˥¢¥¤¥³¥ó¤òÄɲÃ</li>\r
+ \r
+ <li>Version 2.0.3jp6 : (2006/09/30)</li>\r
+ <li>¡¡[Fixed] ¥»¥¥å¥ê¥Æ¥£¤Î¸þ¾å</li>\r
+ \r
+ <li>Version 2.0.3jp5 : (2006/09/16)</li>\r
+ <li>¡¡[Fixed] getPermaLinksFromText()Æâ¤ÎURLÃê½Ð¥ë¡¼¥Á¥ó¤ÎÉÔ¶ñ¹ç¤ò½¤Àµ</li>\r
+ <li>¡¡[Fixed] Auto-Discovery»þ¤ËSQL¥¨¥é¡¼¤¬½Ð¤ëÉÔ¶ñ¹ç¤ò½¤Àµ</li>\r
+ <li>¡¡[Fixed] ´ÉÍý²èÌ̤ǥѡ¼¥¹¥¨¥é¡¼¤¬½Ð¤ë¾ì¹ç¤¬¤¢¤ëÉÔ¶ñ¹ç¤ò½¤Àµ</li>\r
+ <li>¡¡[Changed] SQL¤Î¥¯¥©¡¼¥È¤ò"¤«¤é'¤ËÊѹ¹</li>\r
+ <li>¡¡[Fixed] mb_emulator´Ä¶¤Ë¤Æ¥¨¥é¡¼¤¬½Ð¤ëÌäÂê¤ò½¤Àµ</li>\r
+ <li>¡¡[Fixed] curl¤¬Í¸ú¤Ê´Ä¶¤Ç¥¨¥é¡¼¤¬½Ð¤ëÌäÂê¤ò½¤Àµ</li>\r
+ \r
+ <li>Version 2.0.3jp4 : (2006/07/15)</li>\r
+ <li>¡¡[Added] AutoDiscoveryURL½ÐÎÏ»þ¤ËSpamCheck¤ò¹Ô¤¦¤è¤¦¤Ë¤·¤¿</li>\r
+ <li>¡¡[Added] ¥á¥Ã¥»¡¼¥¸¡¢¥Ç¥Õ¥©¥ë¥ÈÃͤòÆüËܸ첽</li>\r
+ <li>¡¡[Added] Âç¼êASP¤Î¸ÀµÚ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¥Á¥§¥Ã¥¯¤ÎºÝ¤ËURL¤Î¥ê¥À¥¤¥ì¥¯¥È¤ò²ò½ü¤¹¤ë¤è¤¦¤Ë¤·¤¿</li>\r
</ul>
\ No newline at end of file
-<?php global $manager; ?>
-<h2>
- All trackbacks
- <?php if ($count > $amount): ?>
- (Page <?php echo ceil($start / $amount) + 1;?> of <?php echo ceil($count / $amount);?>)
- <?php endif; ?>
-</h2>
-
-<?php if(count($items)): ?>
-<?php if ($count > $amount): ?>
-<table class="navigation">
- <tr>
- <td style='padding: 0;'>
- <?php if ($start > 0): ?>
- <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">
- <div>
- <input type="submit" value="<< Previous" />
- <input type="hidden" name="action" value="all" />
- <input type="hidden" name="start" value="<?php echo max(0,$start - $amount);?>" />
- <?php $manager->addTicketHidden(); ?>
- </div>
- </form>
- <?php endif; ?>
- </td>
- <td style='padding: 0; text-align: right;'>
- <?php if ($start + $amount < $count): ?>
- <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">
- <div>
- <input type="submit" value="Next > >" />
- <input type="hidden" name="action" value="all" />
- <input type="hidden" name="start" value="<?php echo ($start + $amount);?>" />
- <?php $manager->addTicketHidden(); ?>
- </div>
- </form>
- <?php endif; ?>
- </td>
- </tr>
-</table>
-<?php endif; ?>
-
-<table>
- <thead>
- <tr>
- <th>Date</th>
- <th>Story</th>
- <th>Title, Blog and Excerpt</th>
- <th colspan="2">Actions</th>
- </tr>
- </thead>
- <tbody>
- <?php while (list(,$item) = each ($items)): ?>
- <tr onmouseover='focusRow(this);' onmouseout='blurRow(this);'>
- <td>
- <?php echo str_replace(' ', ' ', date("Y-m-d @ H:i",$item['timestamp']));?>
- </td>
- <td>
- <a href="<?php echo $item['story_url']; ?>"><?php echo $item['story'];?></a>
- </td>
- <td>
- <a href="<?php echo $item['url'];?>"><img alt="Visit" border="0" src="<?php echo $plugindirurl?>silk/house_go.png" /></a>
- <strong><?php echo $item['title'];?></strong>
- <em>(<?php echo $item['blog_name'];?>)</em><br />
- <?php echo $item['excerpt'];?>
- </td>
- <td>
- <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=block&tb='.$item['id'].'&next=all&start='.$start),ENT_QUOTES);?>"><img alt="Block" border="0" src="<?php echo $plugindirurl?>silk/delete.png" /></a>
- </td>
- <td>
- <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=delete&tb='.$item['id'].'&next=all&start='.$start),ENT_QUOTES);?>"><img alt="Delete" border="0" src="<?php echo $plugindirurl?>silk/cross.png" /></a>
- </td>
- </tr>
- <?php endwhile; ?>
- </tbody>
-</table>
-
-<?php if ($count > $amount): ?>
-<table class="navigation">
- <tr>
- <td style='padding: 0;'>
- <?php if ($start > 0): ?>
- <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">
- <div>
- <input type="submit" value="<< Previous" />
- <input type="hidden" name="action" value="all" />
- <input type="hidden" name="start" value="<?php echo max(0,$start - $amount);?>" />
- <?php $manager->addTicketHidden(); ?>
- </div>
- </form>
- <?php endif; ?>
- </td>
- <td style='padding: 0; text-align: right;'>
- <?php if ($start + $amount < $count): ?>
- <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">
- <div>
- <input type="submit" value="Next > >" />
- <input type="hidden" name="action" value="all" />
- <input type="hidden" name="start" value="<?php echo ($start + $amount);?>" />
- <?php $manager->addTicketHidden(); ?>
- </div>
- </form>
- <?php endif; ?>
- </td>
- </tr>
-</table>
-<?php endif; ?>
+<?php global $manager; ?>\r
+<h2>\r
+ All trackbacks\r
+ <?php if ($count > $amount): ?>\r
+ (Page <?php echo ceil($start / $amount) + 1;?> of <?php echo ceil($count / $amount);?>)\r
+ <?php endif; ?>\r
+</h2>\r
+\r
+<?php if(count($items)): ?>\r
+<?php if ($count > $amount): ?>\r
+<table class="navigation">\r
+ <tr>\r
+ <td style='padding: 0;'>\r
+ <?php if ($start > 0): ?>\r
+ <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">\r
+ <div>\r
+ <input type="submit" value="<< Previous" /> \r
+ <input type="hidden" name="action" value="all" />\r
+ <input type="hidden" name="start" value="<?php echo max(0,$start - $amount);?>" />\r
+ <?php $manager->addTicketHidden(); ?>\r
+ </div>\r
+ </form>\r
+ <?php endif; ?>\r
+ </td>\r
+ <td style='padding: 0; text-align: right;'> \r
+ <?php if ($start + $amount < $count): ?>\r
+ <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">\r
+ <div>\r
+ <input type="submit" value="Next > >" />\r
+ <input type="hidden" name="action" value="all" />\r
+ <input type="hidden" name="start" value="<?php echo ($start + $amount);?>" />\r
+ <?php $manager->addTicketHidden(); ?>\r
+ </div>\r
+ </form>\r
+ <?php endif; ?>\r
+ </td>\r
+ </tr>\r
+</table>\r
+<?php endif; ?>\r
+\r
+<table>\r
+ <thead>\r
+ <tr>\r
+ <th>Date</th>\r
+ <th>Story</th>\r
+ <th>Title, Blog and Excerpt</th>\r
+ <th colspan="2">Actions</th>\r
+ </tr>\r
+ </thead>\r
+ <tbody>\r
+ <?php while (list(,$item) = each ($items)): ?>\r
+ <tr onmouseover='focusRow(this);' onmouseout='blurRow(this);'>\r
+ <td>\r
+ <?php echo str_replace(' ', ' ', date("Y-m-d @ H:i",$item['timestamp']));?>\r
+ </td>\r
+ <td>\r
+ <a href="<?php echo $item['story_url']; ?>"><?php echo $item['story'];?></a>\r
+ </td>\r
+ <td>\r
+ <a href="<?php echo $item['url'];?>"><img alt="Visit" border="0" src="<?php echo $plugindirurl?>silk/house_go.png" /></a>\r
+ <strong><?php echo $item['title'];?></strong> \r
+ <em>(<?php echo $item['blog_name'];?>)</em><br />\r
+ <?php echo $item['excerpt'];?>\r
+ </td>\r
+ <td>\r
+ <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=block&tb='.$item['id'].'&next=all&start='.$start),ENT_QUOTES);?>"><img alt="Block" border="0" src="<?php echo $plugindirurl?>silk/delete.png" /></a>\r
+ </td>\r
+ <td>\r
+ <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=delete&tb='.$item['id'].'&next=all&start='.$start),ENT_QUOTES);?>"><img alt="Delete" border="0" src="<?php echo $plugindirurl?>silk/cross.png" /></a>\r
+ </td>\r
+ </tr>\r
+ <?php endwhile; ?>\r
+ </tbody>\r
+</table>\r
+\r
+<?php if ($count > $amount): ?>\r
+<table class="navigation">\r
+ <tr>\r
+ <td style='padding: 0;'>\r
+ <?php if ($start > 0): ?>\r
+ <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">\r
+ <div>\r
+ <input type="submit" value="<< Previous" /> \r
+ <input type="hidden" name="action" value="all" />\r
+ <input type="hidden" name="start" value="<?php echo max(0,$start - $amount);?>" />\r
+ <?php $manager->addTicketHidden(); ?>\r
+ </div>\r
+ </form>\r
+ <?php endif; ?>\r
+ </td>\r
+ <td style='padding: 0; text-align: right;'> \r
+ <?php if ($start + $amount < $count): ?>\r
+ <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">\r
+ <div>\r
+ <input type="submit" value="Next > >" />\r
+ <input type="hidden" name="action" value="all" />\r
+ <input type="hidden" name="start" value="<?php echo ($start + $amount);?>" />\r
+ <?php $manager->addTicketHidden(); ?>\r
+ </div>\r
+ </form>\r
+ <?php endif; ?>\r
+ </td>\r
+ </tr>\r
+</table>\r
+<?php endif; ?>\r
<?php endif; ?>
\ No newline at end of file
-<?php global $manager; ?>
-<h2>
- All trackbacks
-</h2>
-
-<div id="message" style="color: red;"></div>
-
-<div style="width: 95%">
-<span id="tb_grid_bookmark"></span>
-
-<table id="tb_grid" style="border:0; margin:0;">
- <colgroup>
- <col style="width:25px;" />
- <col style="width:40px;" />
- <col style="width:70px;" />
- <col style="width:150px;" />
- <col style="width:200px;"/>
- <col style="width:25px;" />
- </colgroup>
- <thead>
- <tr>
- <th> </th>
- <th>id</th>
- <th>Date</th>
- <th>Story</th>
- <th>Title, Blog and Excerpt</th>
- <th> </th>
- </tr>
- </thead>
-</table>
-
-¾åµ¤ÇÁªÂò¤·¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò°ì³ç¤·¤Æ½èÍý¤·¤Þ¤¹
-<a href="javascript:doDelete()" onclick=""><img alt="Delete" border="0" src="<?php echo $plugindirurl?>silk/cross.png" /></a>
-<a href="javascript:doBlock()" onclick=""><img alt="Block" border="0" src="<?php echo $plugindirurl?>silk/delete.png" /></a>
-</div>
-
-<!--
-<textarea id='tb_grid_debugmsgs' rows='5' cols='80' style='font-size:smaller;'></textarea>
--->
-
-<script type="text/javascript">
-//<![CDATA[
- Rico.loadModule('LiveGridAjax');
- Rico.loadModule('LiveGridMenu');
- Rico.include('translations/livegrid_ja.js');
- Rico.include('ricoAjaxEngine.js');
-
- Rico.onLoad( function() {
- var params = [
- 'action=ajax',
- 'type=all',
- 'ticket=<?php echo $ticket ;?>'
- ];
-
- var cb = new Rico.TableColumn.checkbox('1','0');
- var colspec = [
- {canHide:false, type:'control', control:cb, ClassName:'aligncenter'},
- {type:'raw'},
- {type:'raw'},
- ,
- ,
- ,
- ];
-
- var opts = {
- saveColumnInfo : {width:true, filter:false, sort:false},
- menuEvent : 'none',
- frozenColumns : 2,
- canSortDefault : false,
- canHideDefault : true,
- allowColResize : true,
- canFilterDefault: false,
- highlightElem : 'none',
- columnSpecs : colspec
- };
-
- buffer = new Rico.Buffer.AjaxSQL('<?php echo $CONF['PluginURL'].'trackback/';?>grid.php',
- {TimeOut:10, requestParameters:params, sortParmFmt: 'displayName'}
- );
- orderGrid=new Rico.LiveGrid ('tb_grid', buffer, opts);
- orderGrid.menu=new Rico.GridMenu({});
-
- // ajaxEngine
- ajaxEngine = new Rico.AjaxEngine;
- ajaxEngine.registerRequest('updateData', '<?php echo $CONF['PluginURL'].'trackback/';?>grid.php' );
- ajaxEngine.registerAjaxElement('message');
- });
-
- function checkUpdateIds(){
- var updateIds = [];
- Rico.writeDebugMsg('check updated rows');
- for(var i = 0; i < buffer.size; i++){
- row = buffer.rows[i];
- if( row[0].content && row[0].content == '1' ){
- updateIds.push(row[1].content);
- Rico.writeDebugMsg('id: '+row[1].content+' updated');
- }
- }
- return updateIds;
- }
-
- function doBlock(){
- var ids = checkUpdateIds();
- if( !(ids.length && ids.length > 0) ) return ;
- var params = [
- 'action=doblock',
- 'ticket=<?php echo $ticket ;?>',
- 'ids='+ids.join(',')
- ];
- ajaxEngine.sendRequest('updateData', {parameters: ajaxEngine._createQueryString(params, 0)});
- orderGrid.resetContents('tb_grid');
- buffer.fetch(-1);
- }
-
- function doDelete(){
- var ids = checkUpdateIds();
- if( !(ids.length && ids.length > 0) ) return ;
- if( !confirm('ËÜÅö¤Ëºï½ü¤·¤Þ¤¹¤«¡©') ) return ;
-
- var params = [
- 'action=dodelete',
- 'ticket=<?php echo $ticket ;?>',
- 'ids='+ids.join(',')
- ];
- ajaxEngine.sendRequest('updateData', {parameters: ajaxEngine._createQueryString(params, 0)});
- orderGrid.resetContents('tb_grid');
- buffer.fetch(-1);
- }
-//]]>
-</script>
+<?php global $manager; ?>\r
+<h2>\r
+ All trackbacks\r
+</h2>\r
+\r
+<div id="message" style="color: red;"></div>\r
+\r
+<div style="width: 95%">\r
+<span id="tb_grid_bookmark"></span>\r
+\r
+<table id="tb_grid" style="border:0; margin:0;">\r
+ <colgroup>\r
+ <col style="width:25px;" />\r
+ <col style="width:40px;" />\r
+ <col style="width:70px;" />\r
+ <col style="width:150px;" />\r
+ <col style="width:200px;"/>\r
+ <col style="width:25px;" />\r
+ </colgroup>\r
+ <thead>\r
+ <tr>\r
+ <th> </th>\r
+ <th>id</th>\r
+ <th>Date</th>\r
+ <th>Story</th>\r
+ <th>Title, Blog and Excerpt</th>\r
+ <th> </th>\r
+ </tr>\r
+ </thead>\r
+</table>\r
+\r
+¾åµ¤ÇÁªÂò¤·¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò°ì³ç¤·¤Æ½èÍý¤·¤Þ¤¹\r
+<a href="javascript:doDelete()" onclick=""><img alt="Delete" border="0" src="<?php echo $plugindirurl?>silk/cross.png" /></a>\r
+<a href="javascript:doBlock()" onclick=""><img alt="Block" border="0" src="<?php echo $plugindirurl?>silk/delete.png" /></a>\r
+</div>\r
+\r
+<!--\r
+<textarea id='tb_grid_debugmsgs' rows='5' cols='80' style='font-size:smaller;'></textarea>\r
+-->\r
+\r
+<script type="text/javascript">\r
+//<![CDATA[\r
+ Rico.loadModule('LiveGridAjax');\r
+ Rico.loadModule('LiveGridMenu');\r
+ Rico.include('translations/livegrid_ja.js');\r
+ Rico.include('ricoAjaxEngine.js');\r
+ \r
+ Rico.onLoad( function() {\r
+ var params = [\r
+ 'action=ajax',\r
+ 'type=all',\r
+ 'ticket=<?php echo $ticket ;?>'\r
+ ]; \r
+ \r
+ var cb = new Rico.TableColumn.checkbox('1','0');\r
+ var colspec = [\r
+ {canHide:false, type:'control', control:cb, ClassName:'aligncenter'},\r
+ {type:'raw'},\r
+ {type:'raw'},\r
+ ,\r
+ ,\r
+ ,\r
+ ];\r
+ \r
+ var opts = {\r
+ saveColumnInfo : {width:true, filter:false, sort:false}, \r
+ menuEvent : 'none',\r
+ frozenColumns : 2,\r
+ canSortDefault : false,\r
+ canHideDefault : true,\r
+ allowColResize : true,\r
+ canFilterDefault: false,\r
+ highlightElem : 'none',\r
+ columnSpecs : colspec\r
+ };\r
+ \r
+ buffer = new Rico.Buffer.AjaxSQL('<?php echo $CONF['PluginURL'].'trackback/';?>grid.php',\r
+ {TimeOut:10, requestParameters:params, sortParmFmt: 'displayName'}\r
+ );\r
+ orderGrid=new Rico.LiveGrid ('tb_grid', buffer, opts);\r
+ orderGrid.menu=new Rico.GridMenu({});\r
+ \r
+ // ajaxEngine\r
+ ajaxEngine = new Rico.AjaxEngine;\r
+ ajaxEngine.registerRequest('updateData', '<?php echo $CONF['PluginURL'].'trackback/';?>grid.php' );\r
+ ajaxEngine.registerAjaxElement('message');\r
+ });\r
+\r
+ function checkUpdateIds(){\r
+ var updateIds = [];\r
+ Rico.writeDebugMsg('check updated rows');\r
+ for(var i = 0; i < buffer.size; i++){\r
+ row = buffer.rows[i];\r
+ if( row[0].content && row[0].content == '1' ){\r
+ updateIds.push(row[1].content);\r
+ Rico.writeDebugMsg('id: '+row[1].content+' updated');\r
+ }\r
+ }\r
+ return updateIds;\r
+ }\r
+ \r
+ function doBlock(){\r
+ var ids = checkUpdateIds();\r
+ if( !(ids.length && ids.length > 0) ) return ;\r
+ var params = [\r
+ 'action=doblock',\r
+ 'ticket=<?php echo $ticket ;?>',\r
+ 'ids='+ids.join(',')\r
+ ]; \r
+ ajaxEngine.sendRequest('updateData', {parameters: ajaxEngine._createQueryString(params, 0)});\r
+ orderGrid.resetContents('tb_grid');\r
+ buffer.fetch(-1);\r
+ }\r
+ \r
+ function doDelete(){\r
+ var ids = checkUpdateIds();\r
+ if( !(ids.length && ids.length > 0) ) return ;\r
+ if( !confirm('ËÜÅö¤Ëºï½ü¤·¤Þ¤¹¤«¡©') ) return ;\r
+ \r
+ var params = [\r
+ 'action=dodelete',\r
+ 'ticket=<?php echo $ticket ;?>',\r
+ 'ids='+ids.join(',')\r
+ ];\r
+ ajaxEngine.sendRequest('updateData', {parameters: ajaxEngine._createQueryString(params, 0)});\r
+ orderGrid.resetContents('tb_grid');\r
+ buffer.fetch(-1);\r
+ }\r
+//]]>\r
+</script>\r
-<?php global $manager; ?>
-<h2>
- ¥Ö¥í¥Ã¥¯¤µ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯
- <?php if ($count > $amount): ?>
- (Page <?php echo ceil($start / $amount) + 1;?> of <?php echo ceil($count / $amount);?>)
- <?php endif; ?>
-</h2>
-
-<ul>
- <li><a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=blocked_clear&next=blocked'),ENT_QUOTES); ?>" onClick="return confirm('¥Ö¥í¥Ã¥¯¤µ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò¥¯¥ê¥¢¤·¤Æ¤â¤è¤í¤·¤¤¤Ç¤¹¤«¡©');">¥Ö¥í¥Ã¥¯¤µ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤Î¥¯¥ê¥¢</a></li>
- <li><a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=blocked_spamclear&next=blocked'),ENT_QUOTES); ?>" onClick="return confirm('spamȽÄꤵ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò¥¯¥ê¥¢¤·¤Æ¤â¤è¤í¤·¤¤¤Ç¤¹¤«¡©');">spamȽÄꤵ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤Î¥¯¥ê¥¢</a></li>
-</ul>
-
-<?php if(count($items)): ?>
-<?php if ($count > $amount): ?>
-<table class="navigation">
- <tr>
- <td style='padding: 0;'>
- <?php if ($start > 0): ?>
- <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">
- <div>
- <input type="submit" value="<< Previous" />
- <input type="hidden" name="action" value="blocked" />
- <input type="hidden" name="start" value="<?php echo max(0,$start - $amount);?>" />
- <?php $manager->addTicketHidden(); ?>
- </div>
- </form>
- <?php endif; ?>
- </td>
- <td style='padding: 0; text-align: right;'>
- <?php if ($start + $amount < $count): ?>
- <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">
- <div>
- <input type="submit" value="Next > >" />
- <input type="hidden" name="action" value="blocked" />
- <input type="hidden" name="start" value="<?php echo ($start + $amount);?>" />
- <?php $manager->addTicketHidden(); ?>
- </div>
- </form>
- <?php endif; ?>
- </td>
- </tr>
-</table>
-<?php endif; ?>
-
-<table>
- <thead>
- <tr>
- <th>Date</th>
- <th>Story</th>
- <th>Title, Blog and Excerpt</th>
- <th colspan="2">Actions</th>
- </tr>
- </thead>
- <tbody>
- <?php while (list(,$item) = each ($items)): ?>
- <tr onmouseover='focusRow(this);' onmouseout='blurRow(this);'>
- <td>
- <?php echo str_replace(' ', ' ', date("Y-m-d @ H:i",$item['timestamp']));?>
- </td>
- <td>
- <a href="<?php echo $item['story_url']; ?>"><?php echo $item['story'];?></a>
- </td>
- <td>
- <a href="<?php echo $item['url'];?>"><img alt="Visit" border="0" src="<?php echo $plugindirurl;?>silk/house_go.png" /></a>
- <strong><?php echo $item['title'];?></strong>
- <em>(<?php echo $item['blog_name'];?>)</em>
- <?php echo $item['spam'] ?
- '<img alt="spam" border="0" src="' . $plugindirurl . 'silk/delete.png" />' :
- '';?>
- <?php echo $item['link'] ?
- '' :
- '<img alt="NOT Linked" border="0" src="' . $plugindirurl . 'silk/link_break.png" />';?>
- <br />
- <?php echo $item['excerpt'];?>
- </td>
- <td>
- <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=unblock&tb='.$item['id'].'&next=blocked&start='.$start),ENT_QUOTES);?>"><img alt="Unblock" border="0" src="<?php echo $plugindirurl;?>silk/accept.png" /></a>
- </td>
- <td>
- <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=delete&tb='.$item['id'].'&next=blocked&start='.$start),ENT_QUOTES);?>"><img alt="Delete" border="0" src="<?php echo $plugindirurl;?>silk/cross.png" /></a>
- </td>
- </tr>
- <?php endwhile; ?>
- </tbody>
-</table>
-
-<?php if ($count > $amount): ?>
-<table class="navigation">
- <tr>
- <td style='padding: 0;'>
- <?php if ($start > 0): ?>
- <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">
- <div>
- <input type="submit" value="<< Previous" />
- <input type="hidden" name="action" value="blocked" />
- <input type="hidden" name="start" value="<?php echo max(0,$start - $amount);?>" />
- <?php $manager->addTicketHidden(); ?>
- </div>
- </form>
- <?php endif; ?>
- </td>
- <td style='padding: 0; text-align: right;'>
- <?php if ($start + $amount < $count): ?>
- <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">
- <div>
- <input type="submit" value="Next > >" />
- <input type="hidden" name="action" value="blocked" />
- <input type="hidden" name="start" value="<?php echo ($start + $amount);?>" />
- <?php $manager->addTicketHidden(); ?>
- </div>
- </form>
- <?php endif; ?>
- </td>
- </tr>
-</table>
-<?php endif; ?>
-<?php endif; ?>
-
+<?php global $manager; ?>\r
+<h2>\r
+ ¥Ö¥í¥Ã¥¯¤µ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯\r
+ <?php if ($count > $amount): ?>\r
+ (Page <?php echo ceil($start / $amount) + 1;?> of <?php echo ceil($count / $amount);?>)\r
+ <?php endif; ?>\r
+</h2>\r
+\r
+<ul>\r
+ <li><a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=blocked_clear&next=blocked'),ENT_QUOTES); ?>" onClick="return confirm('¥Ö¥í¥Ã¥¯¤µ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò¥¯¥ê¥¢¤·¤Æ¤â¤è¤í¤·¤¤¤Ç¤¹¤«¡©');">¥Ö¥í¥Ã¥¯¤µ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤Î¥¯¥ê¥¢</a></li>\r
+ <li><a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=blocked_spamclear&next=blocked'),ENT_QUOTES); ?>" onClick="return confirm('spamȽÄꤵ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò¥¯¥ê¥¢¤·¤Æ¤â¤è¤í¤·¤¤¤Ç¤¹¤«¡©');">spamȽÄꤵ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤Î¥¯¥ê¥¢</a></li> \r
+</ul>\r
+\r
+<?php if(count($items)): ?>\r
+<?php if ($count > $amount): ?>\r
+<table class="navigation">\r
+ <tr>\r
+ <td style='padding: 0;'>\r
+ <?php if ($start > 0): ?>\r
+ <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">\r
+ <div>\r
+ <input type="submit" value="<< Previous" /> \r
+ <input type="hidden" name="action" value="blocked" />\r
+ <input type="hidden" name="start" value="<?php echo max(0,$start - $amount);?>" />\r
+ <?php $manager->addTicketHidden(); ?>\r
+ </div>\r
+ </form>\r
+ <?php endif; ?>\r
+ </td>\r
+ <td style='padding: 0; text-align: right;'> \r
+ <?php if ($start + $amount < $count): ?>\r
+ <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">\r
+ <div>\r
+ <input type="submit" value="Next > >" />\r
+ <input type="hidden" name="action" value="blocked" />\r
+ <input type="hidden" name="start" value="<?php echo ($start + $amount);?>" />\r
+ <?php $manager->addTicketHidden(); ?>\r
+ </div>\r
+ </form>\r
+ <?php endif; ?>\r
+ </td>\r
+ </tr>\r
+</table>\r
+<?php endif; ?>\r
+\r
+<table>\r
+ <thead>\r
+ <tr>\r
+ <th>Date</th>\r
+ <th>Story</th>\r
+ <th>Title, Blog and Excerpt</th>\r
+ <th colspan="2">Actions</th>\r
+ </tr>\r
+ </thead>\r
+ <tbody>\r
+ <?php while (list(,$item) = each ($items)): ?>\r
+ <tr onmouseover='focusRow(this);' onmouseout='blurRow(this);'>\r
+ <td>\r
+ <?php echo str_replace(' ', ' ', date("Y-m-d @ H:i",$item['timestamp']));?>\r
+ </td>\r
+ <td>\r
+ <a href="<?php echo $item['story_url']; ?>"><?php echo $item['story'];?></a>\r
+ </td>\r
+ <td>\r
+ <a href="<?php echo $item['url'];?>"><img alt="Visit" border="0" src="<?php echo $plugindirurl;?>silk/house_go.png" /></a>\r
+ <strong><?php echo $item['title'];?></strong> \r
+ <em>(<?php echo $item['blog_name'];?>)</em>\r
+ <?php echo $item['spam'] ? \r
+ '<img alt="spam" border="0" src="' . $plugindirurl . 'silk/delete.png" />' : \r
+ '';?>\r
+ <?php echo $item['link'] ? \r
+ '' : \r
+ '<img alt="NOT Linked" border="0" src="' . $plugindirurl . 'silk/link_break.png" />';?>\r
+ <br />\r
+ <?php echo $item['excerpt'];?>\r
+ </td>\r
+ <td>\r
+ <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=unblock&tb='.$item['id'].'&next=blocked&start='.$start),ENT_QUOTES);?>"><img alt="Unblock" border="0" src="<?php echo $plugindirurl;?>silk/accept.png" /></a>\r
+ </td>\r
+ <td>\r
+ <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=delete&tb='.$item['id'].'&next=blocked&start='.$start),ENT_QUOTES);?>"><img alt="Delete" border="0" src="<?php echo $plugindirurl;?>silk/cross.png" /></a>\r
+ </td>\r
+ </tr>\r
+ <?php endwhile; ?>\r
+ </tbody>\r
+</table>\r
+\r
+<?php if ($count > $amount): ?>\r
+<table class="navigation">\r
+ <tr>\r
+ <td style='padding: 0;'>\r
+ <?php if ($start > 0): ?>\r
+ <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">\r
+ <div>\r
+ <input type="submit" value="<< Previous" /> \r
+ <input type="hidden" name="action" value="blocked" />\r
+ <input type="hidden" name="start" value="<?php echo max(0,$start - $amount);?>" />\r
+ <?php $manager->addTicketHidden(); ?>\r
+ </div>\r
+ </form>\r
+ <?php endif; ?>\r
+ </td>\r
+ <td style='padding: 0; text-align: right;'> \r
+ <?php if ($start + $amount < $count): ?>\r
+ <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">\r
+ <div>\r
+ <input type="submit" value="Next > >" />\r
+ <input type="hidden" name="action" value="blocked" />\r
+ <input type="hidden" name="start" value="<?php echo ($start + $amount);?>" />\r
+ <?php $manager->addTicketHidden(); ?>\r
+ </div>\r
+ </form>\r
+ <?php endif; ?>\r
+ </td>\r
+ </tr>\r
+</table>\r
+<?php endif; ?>\r
+<?php endif; ?>\r
+\r
-<?php global $manager; ?>
-<h2>
- ¥Ö¥í¥Ã¥¯¤µ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯
-</h2>
-
-<ul>
- <li><a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=blocked_clear&next=blocked'),ENT_QUOTES); ?>" onClick="return confirm('¥Ö¥í¥Ã¥¯¤µ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò¥¯¥ê¥¢¤·¤Æ¤â¤è¤í¤·¤¤¤Ç¤¹¤«¡©');">¥Ö¥í¥Ã¥¯¤µ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤Î¥¯¥ê¥¢</a></li>
- <li><a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=blocked_spamclear&next=blocked'),ENT_QUOTES); ?>" onClick="return confirm('spamȽÄꤵ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò¥¯¥ê¥¢¤·¤Æ¤â¤è¤í¤·¤¤¤Ç¤¹¤«¡©');">spamȽÄꤵ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤Î¥¯¥ê¥¢</a></li>
-</ul>
-
-<div id="message" style="color: red;"></div>
-
-<div style="width: 95%">
-<span id="tb_grid_bookmark"></span>
-
-<table id="tb_grid" style="border:0; margin:0;">
- <colgroup>
- <col style="width:25px;" />
- <col style="width:40px;" />
- <col style="width:70px;" />
- <col style="width:150px;" />
- <col style="width:200px;"/>
- <col style="width:25px;" />
- </colgroup>
- <thead>
- <tr>
- <th> </th>
- <th>id</th>
- <th>Date</th>
- <th>Story</th>
- <th>Title, Blog and Excerpt</th>
- <th> </th>
- </tr>
- </thead>
-</table>
-¾åµ¤ÇÁªÂò¤·¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò°ì³ç¤·¤Æ½èÍý¤·¤Þ¤¹
-<a href="javascript:doUnBlock()" onclick=""><img alt="Unblock" border="0" src="<?php echo $plugindirurl;?>silk/accept.png" /></a>
-<a href="javascript:doDelete()" onclick=""><img alt="Delete" border="0" src="<?php echo $plugindirurl?>silk/cross.png" /></a>
-</div>
-
-<!--
-<textarea id='tb_grid_debugmsgs' rows='5' cols='80' style='font-size:smaller;'></textarea>
--->
-
-<script type="text/javascript">
-//<![CDATA[
- Rico.loadModule('LiveGridAjax');
- Rico.loadModule('LiveGridMenu');
- Rico.include('translations/livegrid_ja.js');
- Rico.include('ricoAjaxEngine.js');
-
- Rico.onLoad( function() {
- var params = [
- 'action=ajax',
- 'type=blocked',
- 'ticket=<?php echo $ticket ;?>'
- ];
-
- var cb = new Rico.TableColumn.checkbox('1','0');
- var colspec = [
- {canHide:false, type:'control', control:cb, ClassName:'aligncenter'},
- {type:'raw'},
- {type:'raw'},
- ,
- ,
- ,
- ];
-
- var opts = {
- saveColumnInfo : {width:true, filter:false, sort:false},
- menuEvent : 'none',
- frozenColumns : 2,
- canSortDefault : false,
- canHideDefault : true,
- allowColResize : true,
- canFilterDefault: false,
- highlightElem : 'none',
- columnSpecs : colspec
- };
-
- buffer = new Rico.Buffer.AjaxSQL('<?php echo $CONF['PluginURL'].'trackback/';?>grid.php',
- {TimeOut:10, requestParameters:params, sortParmFmt: 'displayName'}
- );
- orderGrid=new Rico.LiveGrid ('tb_grid', buffer, opts);
- orderGrid.menu=new Rico.GridMenu({});
-
- // ajaxEngine
- ajaxEngine = new Rico.AjaxEngine;
- ajaxEngine.registerRequest('updateData', '<?php echo $CONF['PluginURL'].'trackback/';?>grid.php' );
- ajaxEngine.registerAjaxElement('message');
- });
-
- function checkUpdateIds(){
- var updateIds = [];
- Rico.writeDebugMsg('check updated rows');
- for(var i = 0; i < buffer.size; i++){
- row = buffer.rows[i];
- if( row[0].content && row[0].content == '1' ){
- updateIds.push(row[1].content);
- Rico.writeDebugMsg('id: '+row[1].content+' updated');
- }
- }
- return updateIds;
- }
-
- function doUnBlock(){
- var ids = checkUpdateIds();
- if( !(ids.length && ids.length > 0) ) return ;
- var params = [
- 'action=dounblock',
- 'ticket=<?php echo $ticket ;?>',
- 'ids='+ids.join(',')
- ];
- ajaxEngine.sendRequest('updateData', {parameters: ajaxEngine._createQueryString(params, 0)});
- orderGrid.resetContents('tb_grid');
- buffer.fetch(-1);
- }
-
- function doDelete(){
- var ids = checkUpdateIds();
- if( !(ids.length && ids.length > 0) ) return ;
- if( !confirm('ËÜÅö¤Ëºï½ü¤·¤Þ¤¹¤«¡©') ) return ;
-
- var params = [
- 'action=dodelete',
- 'ticket=<?php echo $ticket ;?>',
- 'ids='+ids.join(',')
- ];
- ajaxEngine.sendRequest('updateData', {parameters: ajaxEngine._createQueryString(params, 0)});
- orderGrid.resetContents('tb_grid');
- buffer.fetch(-1);
- }
-//]]>
-</script>
+<?php global $manager; ?>\r
+<h2>\r
+ ¥Ö¥í¥Ã¥¯¤µ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯\r
+</h2>\r
+\r
+<ul>\r
+ <li><a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=blocked_clear&next=blocked'),ENT_QUOTES); ?>" onClick="return confirm('¥Ö¥í¥Ã¥¯¤µ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò¥¯¥ê¥¢¤·¤Æ¤â¤è¤í¤·¤¤¤Ç¤¹¤«¡©');">¥Ö¥í¥Ã¥¯¤µ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤Î¥¯¥ê¥¢</a></li>\r
+ <li><a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=blocked_spamclear&next=blocked'),ENT_QUOTES); ?>" onClick="return confirm('spamȽÄꤵ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò¥¯¥ê¥¢¤·¤Æ¤â¤è¤í¤·¤¤¤Ç¤¹¤«¡©');">spamȽÄꤵ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤Î¥¯¥ê¥¢</a></li> \r
+</ul>\r
+\r
+<div id="message" style="color: red;"></div>\r
+\r
+<div style="width: 95%">\r
+<span id="tb_grid_bookmark"></span>\r
+\r
+<table id="tb_grid" style="border:0; margin:0;">\r
+ <colgroup>\r
+ <col style="width:25px;" />\r
+ <col style="width:40px;" />\r
+ <col style="width:70px;" />\r
+ <col style="width:150px;" />\r
+ <col style="width:200px;"/>\r
+ <col style="width:25px;" />\r
+ </colgroup>\r
+ <thead>\r
+ <tr>\r
+ <th> </th>\r
+ <th>id</th>\r
+ <th>Date</th>\r
+ <th>Story</th>\r
+ <th>Title, Blog and Excerpt</th>\r
+ <th> </th>\r
+ </tr>\r
+ </thead>\r
+</table>\r
+¾åµ¤ÇÁªÂò¤·¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò°ì³ç¤·¤Æ½èÍý¤·¤Þ¤¹\r
+<a href="javascript:doUnBlock()" onclick=""><img alt="Unblock" border="0" src="<?php echo $plugindirurl;?>silk/accept.png" /></a>\r
+<a href="javascript:doDelete()" onclick=""><img alt="Delete" border="0" src="<?php echo $plugindirurl?>silk/cross.png" /></a>\r
+</div>\r
+\r
+<!--\r
+<textarea id='tb_grid_debugmsgs' rows='5' cols='80' style='font-size:smaller;'></textarea>\r
+-->\r
+\r
+<script type="text/javascript">\r
+//<![CDATA[\r
+ Rico.loadModule('LiveGridAjax');\r
+ Rico.loadModule('LiveGridMenu');\r
+ Rico.include('translations/livegrid_ja.js');\r
+ Rico.include('ricoAjaxEngine.js');\r
+ \r
+ Rico.onLoad( function() {\r
+ var params = [\r
+ 'action=ajax',\r
+ 'type=blocked',\r
+ 'ticket=<?php echo $ticket ;?>'\r
+ ]; \r
+ \r
+ var cb = new Rico.TableColumn.checkbox('1','0');\r
+ var colspec = [\r
+ {canHide:false, type:'control', control:cb, ClassName:'aligncenter'},\r
+ {type:'raw'},\r
+ {type:'raw'},\r
+ ,\r
+ ,\r
+ ,\r
+ ];\r
+ \r
+ var opts = {\r
+ saveColumnInfo : {width:true, filter:false, sort:false}, \r
+ menuEvent : 'none',\r
+ frozenColumns : 2,\r
+ canSortDefault : false,\r
+ canHideDefault : true,\r
+ allowColResize : true,\r
+ canFilterDefault: false,\r
+ highlightElem : 'none',\r
+ columnSpecs : colspec\r
+ };\r
+ \r
+ buffer = new Rico.Buffer.AjaxSQL('<?php echo $CONF['PluginURL'].'trackback/';?>grid.php',\r
+ {TimeOut:10, requestParameters:params, sortParmFmt: 'displayName'}\r
+ );\r
+ orderGrid=new Rico.LiveGrid ('tb_grid', buffer, opts);\r
+ orderGrid.menu=new Rico.GridMenu({});\r
+ \r
+ // ajaxEngine\r
+ ajaxEngine = new Rico.AjaxEngine;\r
+ ajaxEngine.registerRequest('updateData', '<?php echo $CONF['PluginURL'].'trackback/';?>grid.php' );\r
+ ajaxEngine.registerAjaxElement('message');\r
+ });\r
+\r
+ function checkUpdateIds(){\r
+ var updateIds = [];\r
+ Rico.writeDebugMsg('check updated rows');\r
+ for(var i = 0; i < buffer.size; i++){\r
+ row = buffer.rows[i];\r
+ if( row[0].content && row[0].content == '1' ){\r
+ updateIds.push(row[1].content);\r
+ Rico.writeDebugMsg('id: '+row[1].content+' updated');\r
+ }\r
+ }\r
+ return updateIds;\r
+ }\r
+ \r
+ function doUnBlock(){\r
+ var ids = checkUpdateIds();\r
+ if( !(ids.length && ids.length > 0) ) return ;\r
+ var params = [\r
+ 'action=dounblock',\r
+ 'ticket=<?php echo $ticket ;?>',\r
+ 'ids='+ids.join(',')\r
+ ]; \r
+ ajaxEngine.sendRequest('updateData', {parameters: ajaxEngine._createQueryString(params, 0)});\r
+ orderGrid.resetContents('tb_grid');\r
+ buffer.fetch(-1);\r
+ }\r
+ \r
+ function doDelete(){\r
+ var ids = checkUpdateIds();\r
+ if( !(ids.length && ids.length > 0) ) return ;\r
+ if( !confirm('ËÜÅö¤Ëºï½ü¤·¤Þ¤¹¤«¡©') ) return ;\r
+ \r
+ var params = [\r
+ 'action=dodelete',\r
+ 'ticket=<?php echo $ticket ;?>',\r
+ 'ids='+ids.join(',')\r
+ ];\r
+ ajaxEngine.sendRequest('updateData', {parameters: ajaxEngine._createQueryString(params, 0)});\r
+ orderGrid.resetContents('tb_grid');\r
+ buffer.fetch(-1);\r
+ }\r
+//]]>\r
+</script>\r
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html>
- <head>
- <title>TrackBack¤Î¼êÆ°Á÷¿®</title>
- <link rel="stylesheet" type="text/css" href="<?php echo $CONF['AdminURL']?>styles/bookmarklet.css" />
- </head>
-
- <body>
- <h1>TrackBack¤Î¼êÆ°Á÷¿®</h1>
-<?php if ($success): ?>
- <p>
- <strong>¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ÎÁ÷¿®¤¬´°Î»¤·¤Þ¤·¤¿</strong>
- </p>
-<?php endif; ?>
-<?php if ($error): ?>
- <p>
- <strong><?php echo $status; ?></strong>
- </p>
-<?php endif; ?>
-<?php if ($form): ?>
- <form method="post" action="<?php echo $CONF['ActionURL'] ?>">
-
- <div>
- <input type="hidden" name="tb_id" value="<?php echo $itemid;?>" />
- <input type="hidden" name="action" value="plugin" />
- <input type="hidden" name="name" value="TrackBack" />
- <input type="hidden" name="type" value="ping" />
-
- <table>
- <tr>
- <td>¤¢¤Ê¤¿¤Îµ»ö¤Îurl</td>
- <td><input type="text" value="" name="url" size="60" /></td>
- </tr>
- <tr>
- <td>µ»ö¤Î¥¿¥¤¥È¥ë</td>
- <td><input type="text" value="" name="title" size="60" /></td>
- </tr>
- <tr>
- <td>µ»ö¤ÎÍ×Ìóʸ</td>
- <td><textarea name="excerpt" cols="40" rows="5"></textarea></td>
- </tr>
- <tr>
- <td>¤¢¤Ê¤¿¤Îblog¤Î̾Á°</td>
- <td><input type="text" value="" name="blog_name" size="60" /></td>
- </tr>
- <tr>
- <td>¥È¥é¥Ã¥¯¥Ð¥Ã¥¯Á÷¿®</td>
- <td><input type="submit" value="¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤òÁ÷¿®¤¹¤ë" /></td>
- </tr>
- </table>
- </div>
-
- </form>
-<?php endif; ?>
- </body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html>\r
+ <head>\r
+ <title>TrackBack¤Î¼êÆ°Á÷¿®</title>\r
+ <link rel="stylesheet" type="text/css" href="<?php echo $CONF['AdminURL']?>styles/bookmarklet.css" />\r
+ </head>\r
+ \r
+ <body>\r
+ <h1>TrackBack¤Î¼êÆ°Á÷¿®</h1>\r
+<?php if ($success): ?>\r
+ <p>\r
+ <strong>¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ÎÁ÷¿®¤¬´°Î»¤·¤Þ¤·¤¿</strong>\r
+ </p>\r
+<?php endif; ?>\r
+<?php if ($error): ?>\r
+ <p>\r
+ <strong><?php echo $status; ?></strong>\r
+ </p>\r
+<?php endif; ?>\r
+<?php if ($form): ?> \r
+ <form method="post" action="<?php echo $CONF['ActionURL'] ?>">\r
+ \r
+ <div>\r
+ <input type="hidden" name="tb_id" value="<?php echo $itemid;?>" />\r
+ <input type="hidden" name="action" value="plugin" />\r
+ <input type="hidden" name="name" value="TrackBack" />\r
+ <input type="hidden" name="type" value="ping" />\r
+ \r
+ <table>\r
+ <tr>\r
+ <td>¤¢¤Ê¤¿¤Îµ»ö¤Îurl</td>\r
+ <td><input type="text" value="" name="url" size="60" /></td>\r
+ </tr>\r
+ <tr>\r
+ <td>µ»ö¤Î¥¿¥¤¥È¥ë</td>\r
+ <td><input type="text" value="" name="title" size="60" /></td>\r
+ </tr>\r
+ <tr>\r
+ <td>µ»ö¤ÎÍ×Ìóʸ</td>\r
+ <td><textarea name="excerpt" cols="40" rows="5"></textarea></td>\r
+ </tr>\r
+ <tr>\r
+ <td>¤¢¤Ê¤¿¤Îblog¤Î̾Á°</td>\r
+ <td><input type="text" value="" name="blog_name" size="60" /></td>\r
+ </tr>\r
+ <tr>\r
+ <td>¥È¥é¥Ã¥¯¥Ð¥Ã¥¯Á÷¿®</td>\r
+ <td><input type="submit" value="¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤òÁ÷¿®¤¹¤ë" /></td>\r
+ </tr>\r
+ </table>\r
+ </div>\r
+ \r
+ </form>\r
+<?php endif; ?>\r
+ </body>\r
</html>
\ No newline at end of file
-<?php global $manager; ?>
-<h2>Overview of all items</h2>
-
-<?php if(count($blogs)): ?>
-
-<table>
-<?php while (list(,$blog) = each ($blogs)): ?>
-<?php if(count($blog['items'])): ?>
- <thead>
- <tr>
- <th>Blog: <?php echo htmlspecialchars($blog['bname']);?></th>
- <th>Total</th>
- <th>Action</th>
- </tr>
- </thead>
- <tbody>
- <?php while (list(,$item) = each ($blog['items'])): ?>
- <tr onmouseover='focusRow(this);' onmouseout='blurRow(this);'>
- <td>
- <?php echo $item['ititle'];?>
- </td>
- <td>
- <?php echo htmlspecialchars($item['total']);?>
- </td>
- <td>
- <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=list&id='.$item['inumber']),ENT_QUOTES);?>">Trackbacks</a>
- </td>
- </tr>
- <?php endwhile; ?>
- </tbody>
-<?php endif; ?>
-<?php endwhile; ?>
-</table>
+<?php global $manager; ?>\r
+<h2>Overview of all items</h2>\r
+\r
+<?php if(count($blogs)): ?>\r
+\r
+<table>\r
+<?php while (list(,$blog) = each ($blogs)): ?>\r
+<?php if(count($blog['items'])): ?>\r
+ <thead>\r
+ <tr>\r
+ <th>Blog: <?php echo htmlspecialchars($blog['bname']);?></th>\r
+ <th>Total</th>\r
+ <th>Action</th>\r
+ </tr>\r
+ </thead>\r
+ <tbody>\r
+ <?php while (list(,$item) = each ($blog['items'])): ?>\r
+ <tr onmouseover='focusRow(this);' onmouseout='blurRow(this);'>\r
+ <td>\r
+ <?php echo $item['ititle'];?>\r
+ </td>\r
+ <td>\r
+ <?php echo htmlspecialchars($item['total']);?>\r
+ </td>\r
+ <td>\r
+ <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=list&id='.$item['inumber']),ENT_QUOTES);?>">Trackbacks</a>\r
+ </td>\r
+ </tr>\r
+ <?php endwhile; ?>\r
+ </tbody>\r
+<?php endif; ?>\r
+<?php endwhile; ?>\r
+</table>\r
<?php endif; ?>
\ No newline at end of file
-<?php global $manager; ?>
-<h2>
- All trackbacks for "<?php echo $story['title'];?>"
- <?php if ($count > $amount): ?>
- (Page <?php echo ceil($start / $amount) + 1;?> of <?php echo ceil($count / $amount);?>)
- <?php endif; ?>
-</h2>
-
-<?php if(count($items)): ?>
-<?php if ($count > $amount): ?>
-<table class="navigation">
- <tr>
- <td style='padding: 0;'>
- <?php if ($start > 0): ?>
- <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">
- <div>
- <input type="submit" value="<< Previous" />
- <input type="hidden" name="action" value="list" />
- <input type="hidden" name="id" value="<?php echo $story['id'];?>" />
- <input type="hidden" name="start" value="<?php echo max(0,$start - $amount);?>" />
- <?php $manager->addTicketHidden(); ?>
- </div>
- </form>
- <?php endif; ?>
- </td>
- <td style='padding: 0; text-align: right;'>
- <?php if ($start + $amount < $count): ?>
- <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">
- <div>
- <input type="submit" value="Next > >" />
- <input type="hidden" name="action" value="list" />
- <input type="hidden" name="id" value="<?php echo $story['id'];?>" />
- <input type="hidden" name="start" value="<?php echo ($start + $amount);?>" />
- <?php $manager->addTicketHidden(); ?>
- </div>
- </form>
- <?php endif; ?>
- </td>
- </tr>
-</table>
-<?php endif; ?>
-
-<table>
- <thead>
- <tr>
- <th>Date</th>
- <th>Title, Blog and Excerpt</th>
- <th colspan="2">Actions</th>
- </tr>
- </thead>
- <tbody>
- <?php while (list(,$item) = each ($items)): ?>
- <tr onmouseover='focusRow(this);' onmouseout='blurRow(this);'>
- <td>
- <?php echo str_replace(' ', ' ', date("Y-m-d @ H:i",$item['timestamp']));?>
- </td>
- <td>
- <a href="<?php echo $item['url'];?>"><img alt="Visit" border="0" src="<?php echo $plugindirurl?>silk/house_go.png" /></a>
- <strong><?php echo $item['title'];?></strong>
- <em>(<?php echo $item['blog_name'];?>)</em><br />
- <?php echo $item['excerpt'];?>
- </td>
- <td>
- <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=block&tb='.$item['id'].'&next=list&id='.$story['id'].'&start='.$start),ENT_QUOTES);?>"><img alt="Block" border="0" src="<?php echo $plugindirurl?>silk/delete.png" /></a>
- </td>
- <td>
- <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=delete&tb='.$item['id'].'&next=list&id='.$story['id'].'&start='.$start),ENT_QUOTES);?>"><img alt="Delete" border="0" src="<?php echo $plugindirurl?>silk/cross.png" /></a>
- </td>
- </tr>
- <?php endwhile; ?>
- </tbody>
-</table>
-
-<?php if ($count > $amount): ?>
-<table class="navigation">
- <tr>
- <td style='padding: 0;'>
- <?php if ($start > 0): ?>
- <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">
- <div>
- <input type="submit" value="<< Previous" />
- <input type="hidden" name="action" value="list" />
- <input type="hidden" name="id" value="<?php echo $story['id'];?>" />
- <input type="hidden" name="start" value="<?php echo max(0,$start - $amount);?>" />
- <?php $manager->addTicketHidden(); ?>
- </div>
- </form>
- <?php endif; ?>
- </td>
- <td style='padding: 0; text-align: right;'>
- <?php if ($start + $amount < $count): ?>
- <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">
- <div>
- <input type="submit" value="Next > >" />
- <input type="hidden" name="action" value="list" />
- <input type="hidden" name="id" value="<?php echo $story['id'];?>" />
- <input type="hidden" name="start" value="<?php echo ($start + $amount);?>" />
- <?php $manager->addTicketHidden(); ?>
- </div>
- </form>
- <?php endif; ?>
- </td>
- </tr>
-</table>
-<?php endif; ?>
-<?php endif; ?>
-
+<?php global $manager; ?>\r
+<h2>\r
+ All trackbacks for "<?php echo $story['title'];?>"\r
+ <?php if ($count > $amount): ?>\r
+ (Page <?php echo ceil($start / $amount) + 1;?> of <?php echo ceil($count / $amount);?>)\r
+ <?php endif; ?>\r
+</h2>\r
+\r
+<?php if(count($items)): ?>\r
+<?php if ($count > $amount): ?>\r
+<table class="navigation">\r
+ <tr>\r
+ <td style='padding: 0;'>\r
+ <?php if ($start > 0): ?>\r
+ <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">\r
+ <div>\r
+ <input type="submit" value="<< Previous" /> \r
+ <input type="hidden" name="action" value="list" />\r
+ <input type="hidden" name="id" value="<?php echo $story['id'];?>" />\r
+ <input type="hidden" name="start" value="<?php echo max(0,$start - $amount);?>" />\r
+ <?php $manager->addTicketHidden(); ?>\r
+ </div>\r
+ </form>\r
+ <?php endif; ?>\r
+ </td>\r
+ <td style='padding: 0; text-align: right;'> \r
+ <?php if ($start + $amount < $count): ?>\r
+ <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">\r
+ <div>\r
+ <input type="submit" value="Next > >" />\r
+ <input type="hidden" name="action" value="list" />\r
+ <input type="hidden" name="id" value="<?php echo $story['id'];?>" />\r
+ <input type="hidden" name="start" value="<?php echo ($start + $amount);?>" />\r
+ <?php $manager->addTicketHidden(); ?>\r
+ </div>\r
+ </form>\r
+ <?php endif; ?>\r
+ </td>\r
+ </tr>\r
+</table>\r
+<?php endif; ?>\r
+\r
+<table>\r
+ <thead>\r
+ <tr>\r
+ <th>Date</th>\r
+ <th>Title, Blog and Excerpt</th>\r
+ <th colspan="2">Actions</th>\r
+ </tr>\r
+ </thead>\r
+ <tbody>\r
+ <?php while (list(,$item) = each ($items)): ?>\r
+ <tr onmouseover='focusRow(this);' onmouseout='blurRow(this);'>\r
+ <td>\r
+ <?php echo str_replace(' ', ' ', date("Y-m-d @ H:i",$item['timestamp']));?>\r
+ </td>\r
+ <td>\r
+ <a href="<?php echo $item['url'];?>"><img alt="Visit" border="0" src="<?php echo $plugindirurl?>silk/house_go.png" /></a>\r
+ <strong><?php echo $item['title'];?></strong> \r
+ <em>(<?php echo $item['blog_name'];?>)</em><br />\r
+ <?php echo $item['excerpt'];?>\r
+ </td>\r
+ <td>\r
+ <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=block&tb='.$item['id'].'&next=list&id='.$story['id'].'&start='.$start),ENT_QUOTES);?>"><img alt="Block" border="0" src="<?php echo $plugindirurl?>silk/delete.png" /></a>\r
+ </td>\r
+ <td>\r
+ <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=delete&tb='.$item['id'].'&next=list&id='.$story['id'].'&start='.$start),ENT_QUOTES);?>"><img alt="Delete" border="0" src="<?php echo $plugindirurl?>silk/cross.png" /></a>\r
+ </td>\r
+ </tr>\r
+ <?php endwhile; ?>\r
+ </tbody>\r
+</table>\r
+\r
+<?php if ($count > $amount): ?>\r
+<table class="navigation">\r
+ <tr>\r
+ <td style='padding: 0;'>\r
+ <?php if ($start > 0): ?>\r
+ <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">\r
+ <div>\r
+ <input type="submit" value="<< Previous" /> \r
+ <input type="hidden" name="action" value="list" />\r
+ <input type="hidden" name="id" value="<?php echo $story['id'];?>" />\r
+ <input type="hidden" name="start" value="<?php echo max(0,$start - $amount);?>" />\r
+ <?php $manager->addTicketHidden(); ?>\r
+ </div>\r
+ </form>\r
+ <?php endif; ?>\r
+ </td>\r
+ <td style='padding: 0; text-align: right;'> \r
+ <?php if ($start + $amount < $count): ?>\r
+ <form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">\r
+ <div>\r
+ <input type="submit" value="Next > >" />\r
+ <input type="hidden" name="action" value="list" />\r
+ <input type="hidden" name="id" value="<?php echo $story['id'];?>" />\r
+ <input type="hidden" name="start" value="<?php echo ($start + $amount);?>" />\r
+ <?php $manager->addTicketHidden(); ?>\r
+ </div>\r
+ </form>\r
+ <?php endif; ?>\r
+ </td>\r
+ </tr>\r
+</table>\r
+<?php endif; ?>\r
+<?php endif; ?>\r
+\r
-<?php global $manager?>
-<h2>Trackback</h2>
-
-<script type="text/javascript" src="<?php echo $CONF['PluginURL']?>trackback/js/prototype.js"></script>
-<script type="text/javascript" src="<?php echo $CONF['PluginURL']?>trackback/js/rico/rico.js"></script>
-
-<ul>
- <li>
- <img border="0" src="<?php echo $plugindirurl?>silk/application_view_list.png" />
- <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=index'),ENT_QUOTES);?>">Overview of all items</a>
- </li>
- <li>
- <img border="0" src="<?php echo $plugindirurl?>silk/tick.png" />
- <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=all'),ENT_QUOTES);?>">¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ÎÁ´¥Ç¡¼¥¿</a>
- </li>
- <li>
- <img border="0" src="<?php echo $plugindirurl?>silk/exclamation.png" />
- <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=blocked'),ENT_QUOTES);?>">¥Ö¥í¥Ã¥¯¤µ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯</a>
- </li>
- <li>
- <img border="0" src="<?php echo $plugindirurl?>silk/transmit_go.png" />
- <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=ping'),ENT_QUOTES);?>">¼êÆ°ping</a>
- </li>
- <li>
- <img border="0" src="<?php echo $plugindirurl?>silk/help.png" />
- <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=help'),ENT_QUOTES);?>">¥Ø¥ë¥×</a>
- </li>
- <li>
- <img border="0" src="<?php echo $plugindirurl?>silk/plugin_edit.png" />
- <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['AdminURL'].'index.php?action=pluginoptions&plugid='.$plugid),ENT_QUOTES);?>">¥×¥é¥°¥¤¥ó¥ª¥×¥·¥ç¥óÀßÄê</a>
- </li>
-</ul>
+<?php global $manager?>\r
+<h2>Trackback</h2>\r
+\r
+<script type="text/javascript" src="<?php echo $CONF['PluginURL']?>trackback/js/prototype.js"></script>\r
+<script type="text/javascript" src="<?php echo $CONF['PluginURL']?>trackback/js/rico/rico.js"></script>\r
+\r
+<ul>\r
+ <li>\r
+ <img border="0" src="<?php echo $plugindirurl?>silk/application_view_list.png" />\r
+ <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=index'),ENT_QUOTES);?>">Overview of all items</a>\r
+ </li>\r
+ <li>\r
+ <img border="0" src="<?php echo $plugindirurl?>silk/tick.png" />\r
+ <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=all'),ENT_QUOTES);?>">¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ÎÁ´¥Ç¡¼¥¿</a>\r
+ </li>\r
+ <li>\r
+ <img border="0" src="<?php echo $plugindirurl?>silk/exclamation.png" />\r
+ <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=blocked'),ENT_QUOTES);?>">¥Ö¥í¥Ã¥¯¤µ¤ì¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯</a>\r
+ </li> \r
+ <li>\r
+ <img border="0" src="<?php echo $plugindirurl?>silk/transmit_go.png" />\r
+ <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=ping'),ENT_QUOTES);?>">¼êÆ°ping</a>\r
+ </li>\r
+ <li>\r
+ <img border="0" src="<?php echo $plugindirurl?>silk/help.png" />\r
+ <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['PluginURL'].'trackback/index.php?action=help'),ENT_QUOTES);?>">¥Ø¥ë¥×</a>\r
+ </li>\r
+ <li>\r
+ <img border="0" src="<?php echo $plugindirurl?>silk/plugin_edit.png" />\r
+ <a href="<?php echo htmlspecialchars($manager->addTicketToUrl($CONF['AdminURL'].'index.php?action=pluginoptions&plugid='.$plugid),ENT_QUOTES);?>">¥×¥é¥°¥¤¥ó¥ª¥×¥·¥ç¥óÀßÄê</a>\r
+ </li>\r
+</ul>\r
-<?php global $manager; ?>
-<h2>¼êÆ°ping¥Õ¥©¡¼¥à</h2>
-
-<form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">
-
- <input type="hidden" name="action" value="sendping" />
- <input type="hidden" name="next" value="ping" />
- <?php $manager->addTicketHidden(); ?>
-
- <table>
- <tr>
- <th colspan='2'>¼êÆ°ping</th>
- </tr>
- <tr>
- <td>¤¢¤Ê¤¿¤Îurl</td>
- <td>
- <input type="text" name="url" size="60" value="<?php echo htmlspecialchars($item['url']);?>" />
- </td>
- </tr>
- <tr>
- <td>µ»ö¤Î¥¿¥¤¥È¥ë</td>
- <td>
- <input type="text" name="title" size="60" value="<?php echo htmlspecialchars($item['title']);?>" />
- </td>
- </tr>
- <tr>
- <td>µ»ö¤ÎÍ×Ìóʸ</td>
- <td>
- <textarea name="excerpt" cols="40" rows="5"><?php echo $item['excerpt'];?></textarea>
- </td>
- </tr>
- <tr>
- <td>Blog̾</td>
- <td>
- <input type="text" name="blog_name" size="60" value="<?php echo htmlspecialchars($item['blogname']);?>" />
- </td>
- </tr>
- <tr>
- <td>pingÀèurl</td>
- <td>
- <input type="text" value="" name="ping_url" size="60" />
- </td>
- </tr>
- <tr>
- <td>Á÷¿®</td>
- <td><input type="submit" value="Á÷¿®" /></td>
- </tr>
- </table>
-
+<?php global $manager; ?>\r
+<h2>¼êÆ°ping¥Õ¥©¡¼¥à</h2>\r
+\r
+<form method="post" action="<?php echo $CONF['PluginURL'];?>trackback/index.php">\r
+\r
+ <input type="hidden" name="action" value="sendping" />\r
+ <input type="hidden" name="next" value="ping" />\r
+ <?php $manager->addTicketHidden(); ?>\r
+ \r
+ <table>\r
+ <tr>\r
+ <th colspan='2'>¼êÆ°ping</th>\r
+ </tr>\r
+ <tr>\r
+ <td>¤¢¤Ê¤¿¤Îurl</td>\r
+ <td>\r
+ <input type="text" name="url" size="60" value="<?php echo htmlspecialchars($item['url']);?>" />\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td>µ»ö¤Î¥¿¥¤¥È¥ë</td>\r
+ <td>\r
+ <input type="text" name="title" size="60" value="<?php echo htmlspecialchars($item['title']);?>" />\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td>µ»ö¤ÎÍ×Ìóʸ</td>\r
+ <td>\r
+ <textarea name="excerpt" cols="40" rows="5"><?php echo $item['excerpt'];?></textarea>\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td>Blog̾</td>\r
+ <td>\r
+ <input type="text" name="blog_name" size="60" value="<?php echo htmlspecialchars($item['blogname']);?>" />\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td>pingÀèurl</td>\r
+ <td>\r
+ <input type="text" value="" name="ping_url" size="60" />\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td>Á÷¿®</td>\r
+ <td><input type="submit" value="Á÷¿®" /></td>\r
+ </tr>\r
+ </table>\r
+\r
</form>
\ No newline at end of file
-<?php echo '<'.'?xml version="1.0" encoding="UTF-8"?'.'>';?>
-<?php global $manager; ?>
-
-<ajax-response>
- <response type="object" id="tb_grid_updater">
- <rowcount><?php echo $count; ?></rowcount>
- <rows update_ui="true" offset="<?php echo $start; ?>" >
- <?php while (list(,$item) = each ($items)): ?>
- <tr>
- <td>0</td>
- <td><?php echo $item['id'];?></td>
- <td>
- <?php echo date("Y-m-d H:i:s",$item['timestamp']);?>
- </td>
- <td>
- <![CDATA[
- <a href="<?php echo $item['story_url']; ?>"><?php echo $item['story'];?></a>
- ]]>
- </td>
- <td>
- <![CDATA[
- <a href="<?php echo $item['url'];?>">
- <img alt="Visit" border="0" src="<?php echo $plugindirurl?>silk/house_go.png" />
- </a>
- <strong><?php echo $item['title'];?></strong>
- <?php echo $item['excerpt'];?>
- <em>(<?php echo $item['blog_name'];?>)</em>
- ]]>
- </td>
- <td></td>
- </tr>
- <?php endwhile; ?>
- </rows>
- </response>
-</ajax-response>
+<?php echo '<'.'?xml version="1.0" encoding="UTF-8"?'.'>';?>\r
+<?php global $manager; ?>\r
+\r
+<ajax-response>\r
+ <response type="object" id="tb_grid_updater">\r
+ <rowcount><?php echo $count; ?></rowcount>\r
+ <rows update_ui="true" offset="<?php echo $start; ?>" >\r
+ <?php while (list(,$item) = each ($items)): ?>\r
+ <tr>\r
+ <td>0</td>\r
+ <td><?php echo $item['id'];?></td>\r
+ <td>\r
+ <?php echo date("Y-m-d H:i:s",$item['timestamp']);?>\r
+ </td>\r
+ <td>\r
+ <![CDATA[\r
+ <a href="<?php echo $item['story_url']; ?>"><?php echo $item['story'];?></a>\r
+ ]]>\r
+ </td>\r
+ <td>\r
+ <![CDATA[\r
+ <a href="<?php echo $item['url'];?>">\r
+ <img alt="Visit" border="0" src="<?php echo $plugindirurl?>silk/house_go.png" />\r
+ </a>\r
+ <strong><?php echo $item['title'];?></strong>\r
+ <?php echo $item['excerpt'];?>\r
+ <em>(<?php echo $item['blog_name'];?>)</em>\r
+ ]]>\r
+ </td>\r
+ <td></td>\r
+ </tr>\r
+ <?php endwhile; ?>\r
+ </rows> \r
+ </response>\r
+</ajax-response>\r
-<?php echo '<'.'?xml version="1.0" encoding="UTF-8"?'.'>';?>
-<?php global $manager; ?>
-
-<ajax-response>
- <response type="object" id='tb_grid_updater'>
- <rowcount><?php echo $count; ?></rowcount>
- <rows update_ui='true' >
- <?php while (list(,$item) = each ($items)): ?>
- <tr>
- <td>0</td>
- <td><?php echo $item['id'];?></td>
- <td>
- <?php echo date("Y-m-d H:i:s",$item['timestamp']);?>
- </td>
- <td>
- <![CDATA[
- <a href="<?php echo $item['story_url']; ?>"><?php echo $item['story'];?></a>
- ]]>
- </td>
- <td>
- <![CDATA[
- <a href="<?php echo $item['url'];?>">
- <img alt="Visit" border="0" src="<?php echo $plugindirurl?>silk/house_go.png" />
- </a>
- <strong><?php echo $item['title'];?></strong>
- <?php echo $item['spam'] ?
- '<img alt="spam" border="0" src="' . $plugindirurl . 'silk/delete.png" />' :
- '';?>
- <?php echo $item['link'] ?
- '' :
- '<img alt="NOT Linked" border="0" src="' . $plugindirurl . 'silk/link_break.png" />';?>
- <?php echo $item['excerpt'];?>
- <em>(<?php echo $item['blog_name'];?>)</em>
- ]]>
- </td>
- <td></td>
- </tr>
- <?php endwhile; ?>
- </rows>
- </response>
-</ajax-response>
+<?php echo '<'.'?xml version="1.0" encoding="UTF-8"?'.'>';?>\r
+<?php global $manager; ?>\r
+\r
+<ajax-response>\r
+ <response type="object" id='tb_grid_updater'>\r
+ <rowcount><?php echo $count; ?></rowcount>\r
+ <rows update_ui='true' >\r
+ <?php while (list(,$item) = each ($items)): ?>\r
+ <tr>\r
+ <td>0</td>\r
+ <td><?php echo $item['id'];?></td>\r
+ <td>\r
+ <?php echo date("Y-m-d H:i:s",$item['timestamp']);?>\r
+ </td>\r
+ <td>\r
+ <![CDATA[\r
+ <a href="<?php echo $item['story_url']; ?>"><?php echo $item['story'];?></a>\r
+ ]]>\r
+ </td>\r
+ <td>\r
+ <![CDATA[\r
+ <a href="<?php echo $item['url'];?>">\r
+ <img alt="Visit" border="0" src="<?php echo $plugindirurl?>silk/house_go.png" />\r
+ </a>\r
+ <strong><?php echo $item['title'];?></strong>\r
+ <?php echo $item['spam'] ? \r
+ '<img alt="spam" border="0" src="' . $plugindirurl . 'silk/delete.png" />' : \r
+ '';?>\r
+ <?php echo $item['link'] ? \r
+ '' : \r
+ '<img alt="NOT Linked" border="0" src="' . $plugindirurl . 'silk/link_break.png" />';?>\r
+ <?php echo $item['excerpt'];?>\r
+ <em>(<?php echo $item['blog_name'];?>)</em>\r
+ ]]>\r
+ </td>\r
+ <td></td>\r
+ </tr>\r
+ <?php endwhile; ?>\r
+ </rows> \r
+ </response>\r
+</ajax-response>\r
-<?echo '<'.'?xml version="1.0" encoding="UTF-8"?'.'>';?>
-<?php global $manager; ?>
-
-<ajax-response>
- <response type="element" id="message">
- <?php echo $message; ?>
- </response>
+<?echo '<'.'?xml version="1.0" encoding="UTF-8"?'.'>';?>\r
+<?php global $manager; ?>\r
+\r
+<ajax-response>\r
+ <response type="element" id="message">\r
+ <?php echo $message; ?>\r
+ </response>\r
</ajax-response>
\ No newline at end of file
-<?echo '<'.'?xml version="1.0" encoding="UTF-8"?'.'>';?>
-<?php global $manager; ?>
-
-<ajax-response>
- <response type="element" id="message">
- <?php echo $message; ?>
- </response>
+<?echo '<'.'?xml version="1.0" encoding="UTF-8"?'.'>';?>\r
+<?php global $manager; ?>\r
+\r
+<ajax-response>\r
+ <response type="element" id="message">\r
+ <?php echo $message; ?>\r
+ </response>\r
</ajax-response>
\ No newline at end of file
-<?echo '<'.'?xml version="1.0" encoding="UTF-8"?'.'>';?>
-<?php global $manager; ?>
-
-<ajax-response>
- <response type="element" id="message">
- <?php echo $message; ?>
- </response>
+<?echo '<'.'?xml version="1.0" encoding="UTF-8"?'.'>';?>\r
+<?php global $manager; ?>\r
+\r
+<ajax-response>\r
+ <response type="element" id="message">\r
+ <?php echo $message; ?>\r
+ </response>\r
</ajax-response>
\ No newline at end of file
-<?php global $manager; ?>
-<blockquote style="color: red;border:1px solid red;padding:1em;"><b>¥¢¥Ã¥×¥Ç¡¼¥È¤¬É¬ÍפǤ¹:</b><br />
-¤³¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç±¿ÍѤ¹¤ë¤¿¤á¤Ë¤ÏDBÆâ¤Î¥Æ¡¼¥Ö¥ë¤Î¥¢¥Ã¥×¥Ç¡¼¥È¤¬É¬ÍפǤ¹¡£<br />
-º£¤Þ¤Ç¤Î¥Ç¡¼¥¿¤¬ºï½ü¤µ¤ì¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£
-²¼¤Î¥¢¥Ã¥×¥Ç¡¼¥È¥Ü¥¿¥ó¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤¡£
-
- <form method="post"><div>
- <input type="hidden" name="action" value="tableUpgrade" />
- <input type="submit" tabindex="10" value="upgrade table" />
- <?php $manager->addTicketHidden(); ?>
- </div></form>
-</blockquote>
-
+<?php global $manager; ?>\r
+<blockquote style="color: red;border:1px solid red;padding:1em;"><b>¥¢¥Ã¥×¥Ç¡¼¥È¤¬É¬ÍפǤ¹:</b><br />\r
+¤³¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç±¿ÍѤ¹¤ë¤¿¤á¤Ë¤ÏDBÆâ¤Î¥Æ¡¼¥Ö¥ë¤Î¥¢¥Ã¥×¥Ç¡¼¥È¤¬É¬ÍפǤ¹¡£<br />\r
+º£¤Þ¤Ç¤Î¥Ç¡¼¥¿¤¬ºï½ü¤µ¤ì¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£\r
+²¼¤Î¥¢¥Ã¥×¥Ç¡¼¥È¥Ü¥¿¥ó¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤¡£\r
+\r
+ <form method="post"><div>\r
+ <input type="hidden" name="action" value="tableUpgrade" />\r
+ <input type="submit" tabindex="10" value="upgrade table" />\r
+ <?php $manager->addTicketHidden(); ?>\r
+ </div></form>\r
+</blockquote>\r
+ \r
-<?php global $manager; ?>
-<blockquote style="color: red;border:1px solid red;padding:1em;">
-¥Æ¡¼¥Ö¥ë¤Î¥¢¥Ã¥×¥Ç¡¼¥È¤Ï´°Î»¤·¤Þ¤·¤¿¡£
-</blockquote>
-
+<?php global $manager; ?>\r
+<blockquote style="color: red;border:1px solid red;padding:1em;">\r
+¥Æ¡¼¥Ö¥ë¤Î¥¢¥Ã¥×¥Ç¡¼¥È¤Ï´°Î»¤·¤Þ¤·¤¿¡£\r
+</blockquote>\r
+ \r
<h3>スキンへの記述例</h3>
-
-<p>
- <h4><%TrackBack(list)%></h4>
-</p>
-<p>
- 受け取ったトラックバックの一覧を表示します。<br />
- また、 <strong><%TrackBack(list,12)%></strong>のようにパラメータの2つめに記事idをつけると、その記事idにpingされたトラックバックの一覧を埋め込むことも可能です。<br />一覧表示のデザイン(テンプレート)は、プラグインのオプション(編集)画面にてカスタマイズできます。</p>
-
-<p>
- <h4><%TrackBack(list)%></h4>
-</p>
-<p>
- 受け取ったトラックバックの一覧を表示します。<br />
- また、 <strong><%TrackBack(list,12)%></strong>のようにパラメータの2つめに記事idをつけると、その記事idにpingされたトラックバックの一覧を埋め込むことも可能です。<br />一覧表示のデザイン(テンプレート)は、プラグインのオプション(編集)画面にてカスタマイズできます。
-</p>
-<p>
- デフォルトではすべてのトラックバックが表示されるようになっていますが、多数のトラックバックがあるような場合には最新のものだけを表示して、残りの部分を折りたたむことができます。<br />
-<br />
-・最新の5件だけを表示して、あとは折りたたむ場合<br />
-<strong><%TrackBack(list, limit5)%></strong><br />
-<br />
-・1.x系と同じようにすべてのトラックバックを展開する場合(デフォルト)<br />
-<strong><%TrackBack(list, limit-1)%></strong><br />
-<br />
-・すべてのトラックバックを折りたたんだ状態にする場合<br />
-<strong><%TrackBack(list, limit0)%></strong><br />
-</p>
-<p>
- 記事idの指定とと折りたたみを同時に使う場合には<strong><%TrackBack(list,<em>記事id</em>,<em>limit0</em>)%></strong>のように指定します。
-</p>
-
-<p>
- <h4><%TrackBack(form)%></h4>
-</p>
-<p>
- 手動でトラックバックを受け付ける入力フォームページへのリンクurlを表示します。<br />
- リンク先ページで相手側にトラックバック送信機能がない場合でも記事要約とurlを受け付けることができるようになります。<br /><br />
- <blockquote>便利な使い方としては、このプラグインのオプション(編集)画面にてトラックバック表示専用テンプレートの「フッタ」の所に、
- <pre>この記事への手動トラックバックは
-<a href='<%form%>' onclick='window.open(this.href,
-"trackback", "scrollbars=yes,width=600,height=340,left=10,top=10,status=yes,resizable=yes");
- return false;'>こちらのフォーム</a>からどうぞ。
-</pre>
- と書き足しておくと、上記<strong><%TrackBack(list)%></strong>を書いた箇所に自動的にこの手動pingフォームへのリンクが表示され、手動pingフォームがポップアップするようにできます。<br />
- もちろん、テンプレートに<strong><%form%></strong>を埋め込まずに、スキンの別の場所に個別に<a href='<%TrackBack(form)%></a>と書いても(書かなくても)結構です。</blockquote>
-
-</p>
-
-<p>
- <h4><%TrackBack(url)%></h4>
-</p>
<p>
- いわゆるトラックバックURL(相手側から見たping先)を表示します。<br />
- また、このプラグインのオプション(編集)画面にて設定できるトラックバック表示専用テンプレート内には<strong><%action%></strong>と書き込むと、トラックバックurlに変換されます。<br />
- <blockquote>例えば、トラックバック表示専用テンプレートの「フッタ」の所に、
- <pre>この記事へのトラックバックurl:<a href='<%action%>'><%action%></a>
-(右クリックでショートカットのコピーをご利用ください)
-</pre>
- と書いておけば、個別に<strong><%TrackBack(url)%></strong>をスキンに書き込まなくても<strong><%TrackBack(list)%></strong>を書いた場所に表示されます。</blockquote>
+Nucleus CMS Japan Wikiの<a href="http://japan.nucleuscms.org/wiki/plugins:trackback">NP_TrackBackのページ</a>を参照してください。
</p>
-
-<p>
- <h4><%if(TrackBack,<em>key</em>,<em>value</em>)%> (v3.3より)</h4>
-</p>
-<p>
- if拡張(<%if()%>)に対応しています。<br />
- トラックバックを受け付けている場合や、バックリンクチェックが有効になっている場合のみに特定の表示をさせることができるようになります。<br />
- <br />
-
- <ul>
- <li><em>key</em>(チェックの種類を指定します)</li>
- <li> <b>accept</b> トラックバックを受け付けているかどうか(デフォルト)</li>
- <li> <b>required</b> バックリンクチェックが有効かどうか</li>
- </ul>
- <ul>
- <li><em>value</em>(判定結果を指定します)</li>
- <li> <b>yes</b> チェックの内容が真の場合、真であると判断します(デフォルト)</li>
- <li> <b>no</b> チェックの内容が真の場合、偽であると判断します</li>
- </ul>
-
- <br />
- 例1)<%if(TrackBack)%>この部分はトラックバックを受け付けている時のみ表示されます<%endif%><br />
- 例2)<%if(TrackBack,accept,no)%>この部分はトラックバックを受け付けていない時のみ表示されます<%endif%><br />
-</p>
-
-<h3>テンプレート内の記述例</h3>
-
-<p>
- ※上記のスキン記述例はすべてテンプレート内でも使用できます。
-</p>
-
-<p>
- <h4><%TrackBack(count)%></h4>
-</p>
-<p>
- 記事ごとの何件トラックバック件数を表示します。<br />
- デフォルトでは"No Trackbacks",
- "1 Trackback", "2 Trackbacks",のように表示されます。<br />
- プラグインのオプション(編集)画面にて設定してください。
-</p>
-
-
<h3>表示のカスタマイズ</h3>
-
<p>
トラックバック関連の表示方法はテンプレートを編集することによってカスタマイズできますが、色や余白などのデザインはCSS側で指定する必要があります。テンプレート内に入力したクラス名のプロパティはcssで指定してください。デフォルトのテンプレートを飾るCSSプロパティの例をあげておきます。
</p>
<h3>日本語版更新履歴</h3>
<ul>
+ <li>Version 2.0.3jp13 : (2008/12/14)</li>
+ <li> [Fixed] Pingフォームへのリンクを開こうとするとInvalid or expired ticket.になる問題を修正</li>
+ <li> [Fixed] TrackBack送信時のエラーハンドリングを改良した</li>
+ <li> [Fixed] TrackBackの文字コードの検出が正しく行われない場合がある問題を修正</li>
+
<li>Version 2.0.3jp12 : (2008/01/12)</li>
<li> [Fixed] エラーメッセージの文字コードが適切でなかった問題を修正</li>
<li> [Fixed] トラックバックの送信文字コードをUTF-8固定にした</li>
<li> [Fixed] トラックバック可/不可の判定がおかしかった問題を修正</li>
<li>Version 2.0.3jp11 : (2007/09/30)</li>
- <li> [Added] SuperAdmin以外でもTrackbackが管理できるようにした</li>
+ <li> [Added] SuperAdmin以外でもTrackBackが管理できるようにした</li>
<li>Version 2.0.3jp10 : (2007/06/30)</li>
<li> [Fixed] mysql_query()をsql_query()に変更</li>
-<?php echo '<'.'?xml version="1.0" encoding="UTF-8"?'.'>';?>
-<?php global $manager; ?>
-
-<ajax-response>
- <response type="object" id="tb_grid_updater">
- <rowcount><?php echo $count; ?></rowcount>
- <rows update_ui="true" offset="<?php echo $start; ?>" >
- <?php while (list(,$item) = each ($items)): ?>
- <tr>
- <td>0</td>
- <td><?php echo $item['id'];?></td>
- <td>
- <?php echo date("Y-m-d H:i:s",$item['timestamp']);?>
- </td>
- <td>
- <![CDATA[
- <a href="<?php echo $item['story_url']; ?>"><?php echo $item['story'];?></a>
- ]]>
- </td>
- <td>
- <![CDATA[
- <a href="<?php echo $item['url'];?>">
- <img alt="Visit" border="0" src="<?php echo $plugindirurl?>silk/house_go.png" />
- </a>
- <strong><?php echo $item['title'];?></strong>
- <?php echo $item['excerpt'];?>
- <em>(<?php echo $item['blog_name'];?>)</em>
- ]]>
- </td>
- <td></td>
- </tr>
- <?php endwhile; ?>
- </rows>
- </response>
-</ajax-response>
+<?php echo '<'.'?xml version="1.0" encoding="UTF-8"?'.'>';?>\r
+<?php global $manager; ?>\r
+\r
+<ajax-response>\r
+ <response type="object" id="tb_grid_updater">\r
+ <rowcount><?php echo $count; ?></rowcount>\r
+ <rows update_ui="true" offset="<?php echo $start; ?>" >\r
+ <?php while (list(,$item) = each ($items)): ?>\r
+ <tr>\r
+ <td>0</td>\r
+ <td><?php echo $item['id'];?></td>\r
+ <td>\r
+ <?php echo date("Y-m-d H:i:s",$item['timestamp']);?>\r
+ </td>\r
+ <td>\r
+ <![CDATA[\r
+ <a href="<?php echo $item['story_url']; ?>"><?php echo $item['story'];?></a>\r
+ ]]>\r
+ </td>\r
+ <td>\r
+ <![CDATA[\r
+ <a href="<?php echo $item['url'];?>">\r
+ <img alt="Visit" border="0" src="<?php echo $plugindirurl?>silk/house_go.png" />\r
+ </a>\r
+ <strong><?php echo $item['title'];?></strong>\r
+ <?php echo $item['excerpt'];?>\r
+ <em>(<?php echo $item['blog_name'];?>)</em>\r
+ ]]>\r
+ </td>\r
+ <td></td>\r
+ </tr>\r
+ <?php endwhile; ?>\r
+ </rows> \r
+ </response>\r
+</ajax-response>\r
-<?php echo '<'.'?xml version="1.0" encoding="UTF-8"?'.'>';?>
-<?php global $manager; ?>
-
-<ajax-response>
- <response type="object" id='tb_grid_updater'>
- <rowcount><?php echo $count; ?></rowcount>
- <rows update_ui='true' >
- <?php while (list(,$item) = each ($items)): ?>
- <tr>
- <td>0</td>
- <td><?php echo $item['id'];?></td>
- <td>
- <?php echo date("Y-m-d H:i:s",$item['timestamp']);?>
- </td>
- <td>
- <![CDATA[
- <a href="<?php echo $item['story_url']; ?>"><?php echo $item['story'];?></a>
- ]]>
- </td>
- <td>
- <![CDATA[
- <a href="<?php echo $item['url'];?>">
- <img alt="Visit" border="0" src="<?php echo $plugindirurl?>silk/house_go.png" />
- </a>
- <strong><?php echo $item['title'];?></strong>
- <?php echo $item['spam'] ?
- '<img alt="spam" border="0" src="' . $plugindirurl . 'silk/delete.png" />' :
- '';?>
- <?php echo $item['link'] ?
- '' :
- '<img alt="NOT Linked" border="0" src="' . $plugindirurl . 'silk/link_break.png" />';?>
- <?php echo $item['excerpt'];?>
- <em>(<?php echo $item['blog_name'];?>)</em>
- ]]>
- </td>
- <td></td>
- </tr>
- <?php endwhile; ?>
- </rows>
- </response>
-</ajax-response>
+<?php echo '<'.'?xml version="1.0" encoding="UTF-8"?'.'>';?>\r
+<?php global $manager; ?>\r
+\r
+<ajax-response>\r
+ <response type="object" id='tb_grid_updater'>\r
+ <rowcount><?php echo $count; ?></rowcount>\r
+ <rows update_ui='true' >\r
+ <?php while (list(,$item) = each ($items)): ?>\r
+ <tr>\r
+ <td>0</td>\r
+ <td><?php echo $item['id'];?></td>\r
+ <td>\r
+ <?php echo date("Y-m-d H:i:s",$item['timestamp']);?>\r
+ </td>\r
+ <td>\r
+ <![CDATA[\r
+ <a href="<?php echo $item['story_url']; ?>"><?php echo $item['story'];?></a>\r
+ ]]>\r
+ </td>\r
+ <td>\r
+ <![CDATA[\r
+ <a href="<?php echo $item['url'];?>">\r
+ <img alt="Visit" border="0" src="<?php echo $plugindirurl?>silk/house_go.png" />\r
+ </a>\r
+ <strong><?php echo $item['title'];?></strong>\r
+ <?php echo $item['spam'] ? \r
+ '<img alt="spam" border="0" src="' . $plugindirurl . 'silk/delete.png" />' : \r
+ '';?>\r
+ <?php echo $item['link'] ? \r
+ '' : \r
+ '<img alt="NOT Linked" border="0" src="' . $plugindirurl . 'silk/link_break.png" />';?>\r
+ <?php echo $item['excerpt'];?>\r
+ <em>(<?php echo $item['blog_name'];?>)</em>\r
+ ]]>\r
+ </td>\r
+ <td></td>\r
+ </tr>\r
+ <?php endwhile; ?>\r
+ </rows> \r
+ </response>\r
+</ajax-response>\r
-/*
-Based on "Coffee with milk" table design by Roger Johansson, 456 Berea Street
-www.456bereastreet.com
-================================================*/
-
-.ricoLG_table {
- border-top:1px solid #523A0B !important;
- border-right:none;
- font:normal 76%/150% "Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif;
- color:#000;
-}
-tr.ricoLG_hdg .ricoLG_cell, tr.ricoLG_hdg th, tr.ricoLG_hdg td { /* td/th required for IE */
- background:#EBE5D9 !important;
- line-height:normal;
- text-align:left;
-}
-
-tr.ricoLG_hdg th, tr.ricoLG_hdg td {
- border-bottom:1px solid #523A0B;
- background:#EBE5D9;
- }
-
-tr.ricoLG_hdg th, tr.ricoLG_hdg td {
- border-left: 1px solid #E0D8CD !important;
-}
-
-.ricoLG_bottom th, .ricoLG_bottom td {
- border-left: 1px solid #FFF;
-}
-
-tr.ricoLG_hdg div.ricoLG_cell {
- background:#EBE5D9;
- font-weight:bold;
- padding:0.5em 0 0.5em 0.5em;
-}
-div.ricoLG_outerDiv table a {
- color:#523A0B;
- text-decoration:none;
- border-bottom:1px dotted;
- }
-div.ricoLG_outerDiv tbody a:visited {
- color:#444;
- font-weight:normal;
- }
-div.ricoLG_outerDiv table a:hover {
- border-bottom-style:solid;
- }
-
-.ricoLG_bottom div.ricoLG_oddRow {
- background-color:#F7F4EE;
- border-top: 1px solid #EBE5D9;
- border-bottom: 1px solid #EBE5D9;
-}
-.ricoLG_bottom div.ricoLG_evenRow {
- border-top: 1px solid #FFF;
- border-bottom: 1px solid #FFF;
-}
-.ricoLG_selection {
- background-color:#ffffee !important;
- border-color:#523A0B !important;
-}
-.ricoLG_table {
- border-style:none;
-}
-
-caption {
- font-family:Georgia,Times,serif;
- font-weight:normal;
- font-size:1.4em;
- text-align:left;
- margin:0;
- padding:0.5em 0.25em;
+/*\r
+Based on "Coffee with milk" table design by Roger Johansson, 456 Berea Street\r
+www.456bereastreet.com\r
+================================================*/\r
+\r
+.ricoLG_table {\r
+ border-top:1px solid #523A0B !important;\r
+ border-right:none;\r
+ font:normal 76%/150% "Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif;\r
+ color:#000;\r
+}\r
+tr.ricoLG_hdg .ricoLG_cell, tr.ricoLG_hdg th, tr.ricoLG_hdg td { /* td/th required for IE */\r
+ background:#EBE5D9 !important;\r
+ line-height:normal;\r
+ text-align:left;\r
+}\r
+\r
+tr.ricoLG_hdg th, tr.ricoLG_hdg td {\r
+ border-bottom:1px solid #523A0B;\r
+ background:#EBE5D9;\r
+ }\r
+\r
+tr.ricoLG_hdg th, tr.ricoLG_hdg td {\r
+ border-left: 1px solid #E0D8CD !important;\r
+}\r
+\r
+.ricoLG_bottom th, .ricoLG_bottom td {\r
+ border-left: 1px solid #FFF;\r
+}\r
+\r
+tr.ricoLG_hdg div.ricoLG_cell {\r
+ background:#EBE5D9;\r
+ font-weight:bold;\r
+ padding:0.5em 0 0.5em 0.5em;\r
+}\r
+div.ricoLG_outerDiv table a {\r
+ color:#523A0B;\r
+ text-decoration:none;\r
+ border-bottom:1px dotted;\r
+ }\r
+div.ricoLG_outerDiv tbody a:visited {\r
+ color:#444;\r
+ font-weight:normal;\r
+ }\r
+div.ricoLG_outerDiv table a:hover {\r
+ border-bottom-style:solid;\r
+ }\r
+\r
+.ricoLG_bottom div.ricoLG_oddRow {\r
+ background-color:#F7F4EE;\r
+ border-top: 1px solid #EBE5D9;\r
+ border-bottom: 1px solid #EBE5D9;\r
+}\r
+.ricoLG_bottom div.ricoLG_evenRow {\r
+ border-top: 1px solid #FFF;\r
+ border-bottom: 1px solid #FFF;\r
+}\r
+.ricoLG_selection {\r
+ background-color:#ffffee !important;\r
+ border-color:#523A0B !important;\r
+}\r
+.ricoLG_table {\r
+ border-style:none;\r
+}\r
+\r
+caption {\r
+ font-family:Georgia,Times,serif;\r
+ font-weight:normal;\r
+ font-size:1.4em;\r
+ text-align:left;\r
+ margin:0;\r
+ padding:0.5em 0.25em;\r
}
\ No newline at end of file
-/* -------------------------------------------------------
-Based on Grayed Out table design
-Author: Terence Ordona
-URL: http://www.imaputz.com/
- ------------------------------------------------------- */
-div.ricoLG_outerDiv *, div.ricoLG_cell {
- font-size: 11px;
- font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
-}
-
-.ricoLG_table {
- border-top: 1px solid #CCC;
- border-right: 1px solid #CCC;
-}
-
-tr.ricoLG_hdg th, tr.ricoLG_hdg td {
- background-color: #FFF !important;
- background: url(../images/grayedout.gif) #FFF repeat-x scroll center left;
- border-bottom: 1px solid #CCC;
-}
-
-.ricoLG_table th, .ricoLG_table td {
- border-left: 1px solid #CCC;
-}
-
-.ricoLG_bottom th, .ricoLG_bottom td {
- border-bottom: 1px solid #CCC;
-}
-
-.ricoLG_bottom div.ricoLG_cell {
- border-bottom: none;
- padding: 5px;
-}
-
-tr.ricoLG_hdg .ricoLG_cell {
- font-weight: normal;
-}
-
-div.ricoLG_outerDiv a:visited, div.ricoLG_outerDiv a:link {
- color: #009;
- text-decoration: none;
-}
-
-div.ricoLG_outerDiv a:hover {
- color: #009;
- text-decoration: underline;
-}
-
-.ricoLG_oddRow {
- background-color: #EEE;
-}
-
-div.ricoLG_selection {
- background-color: #999;
- color: #FFF;
-}
-
-div.ricoLG_highlightDiv {
- border-color: #999;
-}
-
-caption {
- text-align: left;
- font-size: 100%;
- padding: .75em;
- color: #000;
-}
-
+/* -------------------------------------------------------\r
+Based on Grayed Out table design\r
+Author: Terence Ordona\r
+URL: http://www.imaputz.com/\r
+ ------------------------------------------------------- */\r
+div.ricoLG_outerDiv *, div.ricoLG_cell {\r
+ font-size: 11px;\r
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;\r
+}\r
+\r
+.ricoLG_table {\r
+ border-top: 1px solid #CCC;\r
+ border-right: 1px solid #CCC;\r
+}\r
+\r
+tr.ricoLG_hdg th, tr.ricoLG_hdg td {\r
+ background-color: #FFF !important;\r
+ background: url(../images/grayedout.gif) #FFF repeat-x scroll center left;\r
+ border-bottom: 1px solid #CCC;\r
+}\r
+\r
+.ricoLG_table th, .ricoLG_table td {\r
+ border-left: 1px solid #CCC;\r
+}\r
+\r
+.ricoLG_bottom th, .ricoLG_bottom td {\r
+ border-bottom: 1px solid #CCC;\r
+}\r
+\r
+.ricoLG_bottom div.ricoLG_cell {\r
+ border-bottom: none;\r
+ padding: 5px;\r
+}\r
+\r
+tr.ricoLG_hdg .ricoLG_cell {\r
+ font-weight: normal;\r
+}\r
+\r
+div.ricoLG_outerDiv a:visited, div.ricoLG_outerDiv a:link {\r
+ color: #009;\r
+ text-decoration: none;\r
+}\r
+\r
+div.ricoLG_outerDiv a:hover {\r
+ color: #009;\r
+ text-decoration: underline;\r
+}\r
+\r
+.ricoLG_oddRow {\r
+ background-color: #EEE;\r
+}\r
+\r
+div.ricoLG_selection {\r
+ background-color: #999;\r
+ color: #FFF;\r
+}\r
+\r
+div.ricoLG_highlightDiv {\r
+ border-color: #999;\r
+}\r
+ \r
+caption {\r
+ text-align: left;\r
+ font-size: 100%;\r
+ padding: .75em;\r
+ color: #000;\r
+}\r
+\r
-/* display grid headings with a green background */
-
-tr.ricoLG_hdg .ricoLG_cell, tr.ricoLG_hdg th, tr.ricoLG_hdg td { /* td/th required for IE */
- background-color : #cedebd !important;
- color : #000000;
- font-weight : bold;
-}
-div.ricoLG_selection { background-color: #cedebd; }
+/* display grid headings with a green background */\r
+\r
+tr.ricoLG_hdg .ricoLG_cell, tr.ricoLG_hdg th, tr.ricoLG_hdg td { /* td/th required for IE */\r
+ background-color : #cedebd !important;\r
+ color : #000000;\r
+ font-weight : bold;\r
+}\r
+div.ricoLG_selection { background-color: #cedebd; }\r
-tr.ricoLG_hdg .ricoLG_cell, tr.ricoLG_hdg th, tr.ricoLG_hdg td { /* td/th required for IE */
- Filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=white,endColorStr=Gainsboro);
-}
+tr.ricoLG_hdg .ricoLG_cell, tr.ricoLG_hdg th, tr.ricoLG_hdg td { /* td/th required for IE */\r
+ Filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=white,endColorStr=Gainsboro); \r
+}\r
-/* ricoCalendar */
-
-div.ricoCalContainer, div.ricoTreeContainer {
- position:absolute;
- z-index:9999;
- font-size:8pt;
- left:0px;
- top:0px;
-}
-
-table.ricoCalTab {
- border:1px solid #666666;
-}
-
-table.ricoCalTab thead a {
- border:1px solid #D4D0C8;
- text-decoration: none;
- color:black;
-}
-
-table.ricoCalTab thead img {
- border:none;
- padding-left: 0.3em;
- padding-right: 0.3em;
-}
-
-table.ricoCalTab thead a:hover {
- border:1px solid #666666;
- cursor:pointer;
-}
-
-table.ricoCalTab thead td {
- background-color: #D4D0C8;
- font-weight: bold;
- text-align:center;
- padding: 2px;
-}
-
-table.ricoCalTab tfoot td {
- color:#FFF;
- text-align:center;
- background-color: #666666;
- padding: 2px;
-}
-
-table.ricoCalTab tfoot span {
- text-decoration: underline;
- cursor:pointer;
-}
-
-table.ricoCalTab tbody {
- background-color: white;
-}
-
-tr.ricoCalDayNames td {
- font-weight: bold;
- padding: 0px 2px 0px 2px;
- text-align:right;
-}
-
-td.ricoCal0, td.ricoCal1, td.ricoCal2, td.ricoCal3, td.ricoCal4, td.ricoCal5, td.ricoCal6, td.ricoCalToday, td.ricoCalEmpty {
- text-decoration:none;
- text-align:right;
- width:3em;
-}
-
-/* Monday-Friday */
-td.ricoCal1, td.ricoCal2, td.ricoCal3, td.ricoCal4, td.ricoCal5 {
- cursor:pointer;
- color:black;
-}
-
-/* Sunday, Saturday */
-td.ricoCal0, td.ricoCal6 {
- cursor:pointer;
- color:#999;
-}
-
-td.ricoCalToday {
- cursor:pointer;
- color:red;
- font-weight:bold;
-}
-
-td.ricoCalWeekNum {
- background-color: #D4D0C8;
- color:black;
- text-align:center;
-}
-
-.ricoCalMenu {
- position:absolute;
- background-color: #FEE;
- border-bottom:1px solid #666666;
- border-right:1px solid #666666;
-}
-
-.ricoCalMenu td {
- border-top:1px solid #666666;
- border-left:1px solid #666666;
-}
-
-.ricoCalMenu a {
- display:block;
- text-decoration:none;
- color:black;
- cursor:pointer;
-}
-
-.ricoCalMenu a:hover {
- background-color: #FCC;
-}
+/* ricoCalendar */\r
+\r
+div.ricoCalContainer, div.ricoTreeContainer {\r
+ position:absolute;\r
+ z-index:9999;\r
+ font-size:8pt;\r
+ left:0px;\r
+ top:0px;\r
+}\r
+\r
+table.ricoCalTab {\r
+ border:1px solid #666666;\r
+}\r
+\r
+table.ricoCalTab thead a {\r
+ border:1px solid #D4D0C8;\r
+ text-decoration: none;\r
+ color:black;\r
+}\r
+\r
+table.ricoCalTab thead img {\r
+ border:none;\r
+ padding-left: 0.3em;\r
+ padding-right: 0.3em;\r
+}\r
+\r
+table.ricoCalTab thead a:hover {\r
+ border:1px solid #666666;\r
+ cursor:pointer;\r
+}\r
+\r
+table.ricoCalTab thead td {\r
+ background-color: #D4D0C8;\r
+ font-weight: bold;\r
+ text-align:center;\r
+ padding: 2px;\r
+}\r
+\r
+table.ricoCalTab tfoot td {\r
+ color:#FFF;\r
+ text-align:center;\r
+ background-color: #666666;\r
+ padding: 2px;\r
+}\r
+\r
+table.ricoCalTab tfoot span {\r
+ text-decoration: underline;\r
+ cursor:pointer;\r
+}\r
+\r
+table.ricoCalTab tbody {\r
+ background-color: white;\r
+}\r
+\r
+tr.ricoCalDayNames td {\r
+ font-weight: bold;\r
+ padding: 0px 2px 0px 2px;\r
+ text-align:right;\r
+}\r
+\r
+td.ricoCal0, td.ricoCal1, td.ricoCal2, td.ricoCal3, td.ricoCal4, td.ricoCal5, td.ricoCal6, td.ricoCalToday, td.ricoCalEmpty {\r
+ text-decoration:none;\r
+ text-align:right;\r
+ width:3em;\r
+}\r
+\r
+/* Monday-Friday */\r
+td.ricoCal1, td.ricoCal2, td.ricoCal3, td.ricoCal4, td.ricoCal5 {\r
+ cursor:pointer;\r
+ color:black;\r
+}\r
+\r
+/* Sunday, Saturday */\r
+td.ricoCal0, td.ricoCal6 {\r
+ cursor:pointer;\r
+ color:#999;\r
+}\r
+\r
+td.ricoCalToday {\r
+ cursor:pointer;\r
+ color:red;\r
+ font-weight:bold;\r
+}\r
+\r
+td.ricoCalWeekNum {\r
+ background-color: #D4D0C8;\r
+ color:black;\r
+ text-align:center;\r
+}\r
+\r
+.ricoCalMenu {\r
+ position:absolute;\r
+ background-color: #FEE;\r
+ border-bottom:1px solid #666666;\r
+ border-right:1px solid #666666;\r
+}\r
+\r
+.ricoCalMenu td {\r
+ border-top:1px solid #666666;\r
+ border-left:1px solid #666666;\r
+}\r
+\r
+.ricoCalMenu a {\r
+ display:block;\r
+ text-decoration:none;\r
+ color:black;\r
+ cursor:pointer;\r
+}\r
+\r
+.ricoCalMenu a:hover {\r
+ background-color: #FCC;\r
+}\r
-div.ricoLG_outerDiv {
- position:relative;
- /*border:thin solid blue; /* for debugging */
-}
-
-div.ricoLG_innerDiv, div.ricoLG_frozenTabsDiv {
- overflow:hidden;
- margin:0px;
- padding:0px;
- position:absolute;
- top:0px;
-}
-
-div.ricoLG_scrollDiv {
- overflow:scroll;
- position:relative;
-}
-
-div.ricoLG_scrollTabsDiv {
- position:absolute;
- top:0px;
-}
-
-div.ricoLG_resizeDiv {
- position:absolute;
- top:0px;
- width:1px;
- z-index:2;
- background-color:blue;
-}
-
-div.ricoLG_highlightDiv {
- position:absolute;
- border: 2px solid black;
-}
-
-.ricoLG_table {
- margin: 0px;
- padding: 0px;
- border-right: 1px solid silver;
- border-top: 1px solid silver;
-}
-
-.ricoLG_table th, .ricoLG_table td {
- border-left: 1px solid silver;
-}
-
-table.ricoLG_bottom {
- border-top-style: none;
-}
-
-.ricoLG_evenRow { }
-.ricoLG_oddRow { background-color: #EEE; }
-.ricoLG_selection { background-color: #cedebd; }
-
-div.ricoLG_col {
- overflow:hidden;
- width:100px;
-}
-
-.ricoLG_top div.ricoLG_col {
- position:relative;
-}
-
-.ricoLG_top div.ricoLG_Resize {
- position:absolute;
- width:5px;
- height:100%;
- top:0px;
- cursor:e-resize;
-}
-
-.ricoLG_HdrIcon {
- padding-left:2px;
- padding-right:2px;
-}
-
-.ricoLG_bottom div.ricoLG_cell, .ricoLG_top th, .ricoLG_top td {
- border-bottom: 1px solid silver;
-}
-
-div.ricoLG_cell {
- overflow:hidden;
- height:1.2em;
- padding-left: 3px;
- margin: 0px;
- font-size: 10pt;
- padding-top:3px;
- padding-bottom:3px;
-}
-
-div.ricoLG_messageDiv {
- position:absolute;
- z-index:200;
- border:1px solid green;
- background-color:white;
- font-weight:bold;
- font-size:larger;
- color:navy;
- text-align:center;
- padding:4px;
-}
-
-p.ricoBookmark {
- margin-bottom: 3px;
- font-size: 10pt;
-}
-
-div.alignleft {
- text-align: left;
-}
-
-div.aligncenter {
- text-align: center;
-}
-
-div.alignright {
- text-align: right;
-}
-
-span.ricoSessionTimer {
- background-color:black;
- color:white;
-}
-
+div.ricoLG_outerDiv {\r
+ position:relative;\r
+ /*border:thin solid blue; /* for debugging */\r
+}\r
+\r
+div.ricoLG_innerDiv, div.ricoLG_frozenTabsDiv {\r
+ overflow:hidden;\r
+ margin:0px;\r
+ padding:0px;\r
+ position:absolute;\r
+ top:0px;\r
+}\r
+\r
+div.ricoLG_scrollDiv {\r
+ overflow:scroll;\r
+ position:relative;\r
+}\r
+\r
+div.ricoLG_scrollTabsDiv {\r
+ position:absolute;\r
+ top:0px;\r
+}\r
+\r
+div.ricoLG_resizeDiv {\r
+ position:absolute;\r
+ top:0px;\r
+ width:1px;\r
+ z-index:2;\r
+ background-color:blue;\r
+}\r
+\r
+div.ricoLG_highlightDiv {\r
+ position:absolute;\r
+ border: 2px solid black;\r
+}\r
+\r
+.ricoLG_table {\r
+ margin: 0px;\r
+ padding: 0px;\r
+ border-right: 1px solid silver;\r
+ border-top: 1px solid silver;\r
+}\r
+\r
+.ricoLG_table th, .ricoLG_table td {\r
+ border-left: 1px solid silver;\r
+}\r
+\r
+table.ricoLG_bottom {\r
+ border-top-style: none;\r
+}\r
+\r
+.ricoLG_evenRow { }\r
+.ricoLG_oddRow { background-color: #EEE; }\r
+.ricoLG_selection { background-color: #cedebd; }\r
+\r
+div.ricoLG_col {\r
+ overflow:hidden;\r
+ width:100px;\r
+}\r
+\r
+.ricoLG_top div.ricoLG_col {\r
+ position:relative;\r
+}\r
+\r
+.ricoLG_top div.ricoLG_Resize {\r
+ position:absolute;\r
+ width:5px;\r
+ height:100%;\r
+ top:0px;\r
+ cursor:e-resize;\r
+}\r
+\r
+.ricoLG_HdrIcon {\r
+ padding-left:2px;\r
+ padding-right:2px;\r
+}\r
+\r
+.ricoLG_bottom div.ricoLG_cell, .ricoLG_top th, .ricoLG_top td {\r
+ border-bottom: 1px solid silver;\r
+}\r
+\r
+div.ricoLG_cell {\r
+ overflow:hidden;\r
+ height:1.2em;\r
+ padding-left: 3px;\r
+ margin: 0px;\r
+ font-size: 10pt;\r
+ padding-top:3px;\r
+ padding-bottom:3px;\r
+}\r
+\r
+div.ricoLG_messageDiv {\r
+ position:absolute;\r
+ z-index:200;\r
+ border:1px solid green;\r
+ background-color:white;\r
+ font-weight:bold;\r
+ font-size:larger;\r
+ color:navy;\r
+ text-align:center;\r
+ padding:4px;\r
+}\r
+\r
+p.ricoBookmark {\r
+ margin-bottom: 3px;\r
+ font-size: 10pt;\r
+}\r
+\r
+div.alignleft {\r
+ text-align: left;\r
+}\r
+\r
+div.aligncenter {\r
+ text-align: center;\r
+}\r
+\r
+div.alignright {\r
+ text-align: right;\r
+}\r
+\r
+span.ricoSessionTimer {\r
+ background-color:black;\r
+ color:white;\r
+}\r
+\r
-/* ricoLiveGridForms */
-
-span.ricoSaveMsg {
- background-color:yellow;
-}
-
-span.ricoSessionTimer {
- background-color:black;
- color:white;
-}
-
-div.ricoLG_editDiv, div.ricoLG_editResponseDiv {
- color:#000; background:#E8ECF3;
- overflow:auto;
- padding:8px;
- border: 1px solid navy;
- position:absolute;
- font-size: 10pt;
- z-index:300;
- top:0px;
- left:0px;
-}
-
-form .ricoEditLabel, form .ricoEditLabelWithHelp {
- font-weight: bold;
- text-align: left;
- padding-right: 1em;
-}
-
-form .ricoEditLabelWithHelp {
- color: navy;
-}
-
-form {
- margin:0px;
-}
-
-.tabHeader {
+/* ricoLiveGridForms */\r
+\r
+span.ricoSaveMsg {\r
+ background-color:yellow;\r
+}\r
+\r
+span.ricoSessionTimer {\r
+ background-color:black;\r
+ color:white;\r
+}\r
+\r
+div.ricoLG_editDiv, div.ricoLG_editResponseDiv {\r
+ color:#000; background:#E8ECF3;\r
+ overflow:auto;\r
+ padding:8px;\r
+ border: 1px solid navy;\r
+ position:absolute;\r
+ font-size: 10pt;\r
+ z-index:300;\r
+ top:0px;\r
+ left:0px;\r
+}\r
+\r
+form .ricoEditLabel, form .ricoEditLabelWithHelp {\r
+ font-weight: bold;\r
+ text-align: left;\r
+ padding-right: 1em;\r
+}\r
+\r
+form .ricoEditLabelWithHelp {\r
+ color: navy;\r
+}\r
+\r
+form {\r
+ margin:0px;\r
+}\r
+\r
+.tabHeader {\r
height: 1.8em;
- color : #AAA;
+ color : #AAA;\r
background: #D8E0F2;
font-weight : bold;
float: left;
display: inline;
margin-left: 2px;
- margin-right: 2px;
+ margin-right: 2px;\r
text-align: center;
white-space:nowrap;
overflow:hidden;
-}
-
+}\r
+\r
.tabHover {
color : #666;
cursor: pointer;
.tabContentContainer {
clear:both;
-}
-
-div.ricoLG_editDiv .tabContent, div.ricoLG_editDiv .noTabContent {
- color:#000; background:#CFD4E6;
- overflow: hidden;
- padding: 4px;
- white-space:nowrap;
-}
-
-div.ricoLG_editDiv .noTabContent {
- float:left; /* required by IE7 */
-}
-
-span.ricoLookup {
- display:none;
-}
-
+}\r
+\r
+div.ricoLG_editDiv .tabContent, div.ricoLG_editDiv .noTabContent {\r
+ color:#000; background:#CFD4E6;\r
+ overflow: hidden;\r
+ padding: 4px;\r
+ white-space:nowrap;\r
+}\r
+\r
+div.ricoLG_editDiv .noTabContent {\r
+ float:left; /* required by IE7 */\r
+}\r
+\r
+span.ricoLookup {\r
+ display:none;\r
+}\r
+\r
-/* ricoMenu */
-
-div.ricoMenu, div.ricoMenuSafari {
-position: absolute;
-z-index: 100;
-border:1px solid #666;
-padding:2px;
-cursor:default;
-visibility: hidden;
-}
-
-div.ricoMenu, div.ricoMenu div.ricoMenuHeading, div.ricoMenu a {
-background-color:menu;
-color: menutext;
-text-decoration: none;
-font-family:tahoma,arial,helvetica,sans-serif;
-font-size: 8pt;
-display:block;
-}
-
-div.ricoMenuSafari, div.ricoMenuSafari div.ricoMenuHeading, div.ricoMenuSafari a {
-background-color:#EDEDED;
-text-decoration: none;
-font-family:tahoma,arial,helvetica,sans-serif;
-font-size: 8pt;
-display:block;
-}
-
-div.ricoMenu div.ricoMenuHeading{
-padding: 1px 0px;
-font-weight:bold;
-}
-
-div.ricoMenuSafari div.ricoMenuHeading{
-padding: 1px 0px;
-color: black;
-display: block;
-font-weight:bold;
-}
-
-div.ricoMenu .enabled {
-position: relative;
-}
-
-div.ricoMenuSafari .enabled {
-color: black;
-}
-
-div.ricoMenu .enabled, div.ricoMenu .enabled-hover, div.ricoMenuSafari .enabled, div.ricoMenuSafari .enabled-hover, div.ricoMenu .disabled, div.ricoMenuSafari .disabled {
-padding-left: 1em;
-padding-top:0.1em;
-padding-bottom:0.1em;
-z-index: 101;
-}
-
-div.ricoMenu .disabled, div.ricoMenuSafari .disabled {
-color: #999;
-}
-
-div.ricoMenu hr{
-height:1px;
-margin:1px;
-border:0;
-color: menu;
-background-color: menu;
-}
-
-div.ricoMenu .enabled-hover, div.ricoMenu .ricoSubMenuOpen {
- background-color: Highlight;
- color: HighlightText;
-}
-
-div.ricoMenuSafari .enabled-hover, div.ricoMenuSafari .ricoSubMenuOpen {
- background-color: #1657B8;
- color: white;
-}
-
-div.ricoMenu .ricoSubMenu, div.ricoMenu .ricoSubMenuOpen, div.ricoMenuSafari .ricoSubMenu, div.ricoMenuSafari .ricoSubMenuOpen {
-padding: 1px 0px;
-display: block;
-font-weight:bold;
-z-index: 101;
-position: relative;
-}
-
-div.ricoMenu div.ricoMenuBreak, div.ricoMenuSafari div.ricoMenuBreak {
-height:1px;
-margin:3px 0 3px 0;
-padding:0;
-background-color: #AAA;
-width:100%;
-line-height:5px;
-overflow:hidden;
-}
-
+/* ricoMenu */\r
+\r
+div.ricoMenu, div.ricoMenuSafari {\r
+position: absolute;\r
+z-index: 100;\r
+border:1px solid #666;\r
+padding:2px;\r
+cursor:default;\r
+visibility: hidden;\r
+}\r
+\r
+div.ricoMenu, div.ricoMenu div.ricoMenuHeading, div.ricoMenu a {\r
+background-color:menu;\r
+color: menutext;\r
+text-decoration: none;\r
+font-family:tahoma,arial,helvetica,sans-serif;\r
+font-size: 8pt;\r
+display:block;\r
+}\r
+\r
+div.ricoMenuSafari, div.ricoMenuSafari div.ricoMenuHeading, div.ricoMenuSafari a {\r
+background-color:#EDEDED;\r
+text-decoration: none;\r
+font-family:tahoma,arial,helvetica,sans-serif;\r
+font-size: 8pt;\r
+display:block;\r
+}\r
+\r
+div.ricoMenu div.ricoMenuHeading{\r
+padding: 1px 0px;\r
+font-weight:bold;\r
+}\r
+\r
+div.ricoMenuSafari div.ricoMenuHeading{\r
+padding: 1px 0px;\r
+color: black;\r
+display: block;\r
+font-weight:bold;\r
+}\r
+\r
+div.ricoMenu .enabled {\r
+position: relative;\r
+}\r
+\r
+div.ricoMenuSafari .enabled {\r
+color: black;\r
+}\r
+\r
+div.ricoMenu .enabled, div.ricoMenu .enabled-hover, div.ricoMenuSafari .enabled, div.ricoMenuSafari .enabled-hover, div.ricoMenu .disabled, div.ricoMenuSafari .disabled {\r
+padding-left: 1em;\r
+padding-top:0.1em;\r
+padding-bottom:0.1em;\r
+z-index: 101;\r
+}\r
+\r
+div.ricoMenu .disabled, div.ricoMenuSafari .disabled {\r
+color: #999;\r
+}\r
+\r
+div.ricoMenu hr{\r
+height:1px;\r
+margin:1px;\r
+border:0;\r
+color: menu;\r
+background-color: menu;\r
+}\r
+\r
+div.ricoMenu .enabled-hover, div.ricoMenu .ricoSubMenuOpen {\r
+ background-color: Highlight;\r
+ color: HighlightText;\r
+}\r
+\r
+div.ricoMenuSafari .enabled-hover, div.ricoMenuSafari .ricoSubMenuOpen {\r
+ background-color: #1657B8;\r
+ color: white;\r
+}\r
+\r
+div.ricoMenu .ricoSubMenu, div.ricoMenu .ricoSubMenuOpen, div.ricoMenuSafari .ricoSubMenu, div.ricoMenuSafari .ricoSubMenuOpen {\r
+padding: 1px 0px;\r
+display: block;\r
+font-weight:bold;\r
+z-index: 101;\r
+position: relative;\r
+}\r
+\r
+div.ricoMenu div.ricoMenuBreak, div.ricoMenuSafari div.ricoMenuBreak {\r
+height:1px;\r
+margin:3px 0 3px 0;\r
+padding:0;\r
+background-color: #AAA;\r
+width:100%;\r
+line-height:5px;\r
+overflow:hidden;\r
+}\r
+\r
-/* ricoTree */
-
-div.ricoTreeContainer {
- background-color:#cedebd;
- padding:4px;
- border:1px solid black;
- top:0px;
- left:0px;
- position:absolute;
- z-index:9999;
-}
-
-div.ricoTree {
- border:thin inset;
- overflow:auto;
- background-color:#FFF;
-}
-
-div.ricoTree p, div.ricoTree a {
- margin:0px;
- padding-left:0.3em;
- white-space:nowrap;
-}
-
-div.ricoTree a {
- cursor:pointer;
- text-decoration:none;
-}
-
-div.ricoTree a:hover {
- background-color:#EEE;
-}
-
-div.ricoTree img {
- margin:0px;
- padding:0px;
- display:block;
-}
-
-div.ricoTree * {
- font-size:8pt;
-}
+/* ricoTree */\r
+\r
+div.ricoTreeContainer {\r
+ background-color:#cedebd;\r
+ padding:4px;\r
+ border:1px solid black;\r
+ top:0px;\r
+ left:0px;\r
+ position:absolute;\r
+ z-index:9999;\r
+}\r
+\r
+div.ricoTree {\r
+ border:thin inset;\r
+ overflow:auto;\r
+ background-color:#FFF;\r
+}\r
+\r
+div.ricoTree p, div.ricoTree a {\r
+ margin:0px;\r
+ padding-left:0.3em;\r
+ white-space:nowrap;\r
+}\r
+\r
+div.ricoTree a {\r
+ cursor:pointer;\r
+ text-decoration:none;\r
+}\r
+\r
+div.ricoTree a:hover {\r
+ background-color:#EEE;\r
+}\r
+\r
+div.ricoTree img {\r
+ margin:0px;\r
+ padding:0px;\r
+ display:block;\r
+}\r
+\r
+div.ricoTree * {\r
+ font-size:8pt;\r
+}\r
-tr.ricoLG_hdg .ricoLG_cell, tr.ricoLG_hdg th, tr.ricoLG_hdg td { /* td/th required for IE */
- background-color:#e0e0c0 !important;
- vertical-align:middle;
-}
-
-tr.ricoLG_hdg div.ricoLG_cell {
- border-top: 1px solid #F0F0E8;
-}
-
-.ricoLG_bottom div.ricoLG_cell, .ricoLG_top th, .ricoLG_top td {
- border-bottom: 1px solid #D8d0c0;;
-}
-
-.ricoLG_table th, .ricoLG_table td {
- border-left: 1px solid #F0F0E8;
- border-right: 1px solid #D8d0c0;
-}
-
-div.ricoMenu, div.ricoMenu div.ricoMenuHeading, div.ricoMenu .ricoSubMenu, div.ricoMenuSafari, div.ricoMenuSafari div.ricoMenuHeading, div.ricoMenuSafari .ricoSubMenu {
- background-color:#f0f0e0;
-}
-
-div.ricoMenu, div.ricoMenu div.ricoMenuHeading, div.ricoMenu .ricoSubMenu, div.ricoMenu .ricoSubMenuOpen, div.ricoMenuSafari, div.ricoMenuSafari div.ricoMenuHeading, div.ricoMenuSafari .ricoSubMenu, div.ricoMenuSafari .ricoSubMenuOpen {
- border-top: 1px solid #F0F0E8;
- border-left: 1px solid #F0F0E8;
- border-bottom: 1px solid #D8d0c0;;
- border-right: 1px solid #D8d0c0;
-}
-
-.ricoLG_table {
- border-style:none;
-}
-
-div.ricoLG_selection {
- background-color:#e0e0c0;
-}
+tr.ricoLG_hdg .ricoLG_cell, tr.ricoLG_hdg th, tr.ricoLG_hdg td { /* td/th required for IE */\r
+ background-color:#e0e0c0 !important;\r
+ vertical-align:middle;\r
+}\r
+\r
+tr.ricoLG_hdg div.ricoLG_cell {\r
+ border-top: 1px solid #F0F0E8;\r
+}\r
+\r
+.ricoLG_bottom div.ricoLG_cell, .ricoLG_top th, .ricoLG_top td {\r
+ border-bottom: 1px solid #D8d0c0;;\r
+}\r
+\r
+.ricoLG_table th, .ricoLG_table td {\r
+ border-left: 1px solid #F0F0E8;\r
+ border-right: 1px solid #D8d0c0;\r
+}\r
+\r
+div.ricoMenu, div.ricoMenu div.ricoMenuHeading, div.ricoMenu .ricoSubMenu, div.ricoMenuSafari, div.ricoMenuSafari div.ricoMenuHeading, div.ricoMenuSafari .ricoSubMenu {\r
+ background-color:#f0f0e0;\r
+}\r
+\r
+div.ricoMenu, div.ricoMenu div.ricoMenuHeading, div.ricoMenu .ricoSubMenu, div.ricoMenu .ricoSubMenuOpen, div.ricoMenuSafari, div.ricoMenuSafari div.ricoMenuHeading, div.ricoMenuSafari .ricoSubMenu, div.ricoMenuSafari .ricoSubMenuOpen {\r
+ border-top: 1px solid #F0F0E8;\r
+ border-left: 1px solid #F0F0E8;\r
+ border-bottom: 1px solid #D8d0c0;;\r
+ border-right: 1px solid #D8d0c0;\r
+}\r
+\r
+.ricoLG_table {\r
+ border-style:none;\r
+}\r
+\r
+div.ricoLG_selection {\r
+ background-color:#e0e0c0;\r
+}\r
-/* -------------------------------------------------------
-Based on warm fall table design
-Author: Mya Leigh
-Theme: A Warm, Fall Table - Easy to Read
-URL: http://www.myaleigh.com
- ------------------------------------------------------- */
-.ricoLG_table {
- border-top: 1px solid #84785e;
- border-right: 1px solid #84785e;
-}
-
-tr.ricoLG_hdg .ricoLG_cell, tr.ricoLG_hdg th, tr.ricoLG_hdg td { /* td/th required for IE */
- background-color: #a24116 !important;
- color: #ffffff !important;
-}
-
-.ricoLG_table th, .ricoLG_table td {
- border-left: 1px solid #84785e;
-}
-
-.ricoLG_bottom div.ricoLG_cell, .ricoLG_top th, .ricoLG_top td {
- border-bottom: 1px solid #84785e;
-}
-
-tr.ricoLG_hdg .ricoLG_cell {
- background-color: #a24116;
- border: 0;
- color: #ffffff;
- padding: .75em;
- font: "Verdana", Arial, Helvetica, sans-serif;
- font-weight: bold;
-}
-
-div.ricoLG_outerDiv a:visited, div.ricoLG_outerDiv a:link, div.ricoLG_outerDiv a:active {
- color: #101011;
- text-decoration: none;
-}
-
-div.ricoLG_outerDiv a:hover {
- text-decoration: underline;
-}
-
-div.ricoLG_outerDiv tbody a:visited {
- color:#444;
-}
-
-.ricoLG_oddRow {
- background-color: #fffce1;
- color: #101011;
-}
-
-.ricoLG_selection {
- background-color: #a24116;
- color: #ffffff;
-}
-
-caption {
- text-align: left;
- font-size: 100%;
- padding: .75em;
- color: #000;
-}
-
+/* -------------------------------------------------------\r
+Based on warm fall table design\r
+Author: Mya Leigh\r
+Theme: A Warm, Fall Table - Easy to Read\r
+URL: http://www.myaleigh.com \r
+ ------------------------------------------------------- */\r
+.ricoLG_table {\r
+ border-top: 1px solid #84785e;\r
+ border-right: 1px solid #84785e;\r
+}\r
+\r
+tr.ricoLG_hdg .ricoLG_cell, tr.ricoLG_hdg th, tr.ricoLG_hdg td { /* td/th required for IE */\r
+ background-color: #a24116 !important;\r
+ color: #ffffff !important; \r
+}\r
+\r
+.ricoLG_table th, .ricoLG_table td {\r
+ border-left: 1px solid #84785e;\r
+}\r
+\r
+.ricoLG_bottom div.ricoLG_cell, .ricoLG_top th, .ricoLG_top td {\r
+ border-bottom: 1px solid #84785e;\r
+}\r
+\r
+tr.ricoLG_hdg .ricoLG_cell {\r
+ background-color: #a24116;\r
+ border: 0;\r
+ color: #ffffff; \r
+ padding: .75em;\r
+ font: "Verdana", Arial, Helvetica, sans-serif;\r
+ font-weight: bold;\r
+}\r
+\r
+div.ricoLG_outerDiv a:visited, div.ricoLG_outerDiv a:link, div.ricoLG_outerDiv a:active {\r
+ color: #101011;\r
+ text-decoration: none;\r
+}\r
+\r
+div.ricoLG_outerDiv a:hover {\r
+ text-decoration: underline;\r
+}\r
+\r
+div.ricoLG_outerDiv tbody a:visited {\r
+ color:#444;\r
+}\r
+\r
+.ricoLG_oddRow {\r
+ background-color: #fffce1;\r
+ color: #101011;\r
+}\r
+\r
+.ricoLG_selection {\r
+ background-color: #a24116;\r
+ color: #ffffff;\r
+}\r
+ \r
+caption {\r
+ text-align: left;\r
+ font-size: 100%;\r
+ padding: .75em;\r
+ color: #000;\r
+}\r
+\r
-<html>
-<head>
-<title>Export</title>
-<SCRIPT TYPE="text/javascript">
-function getdata() {
- if (!window.opener || window.opener.closed) {
- alert('Error! Parent window is closed');
- return;
- }
- var divID=window.location.search;
- if (divID.length<2) {
- alert('Error! Invalid id');
- return;
- }
- divID=divID.substring(1);
- var oDiv=window.opener.document.getElementById(divID);
- if (!oDiv) {
- alert('Error! Can not find \"'+divID+'\"');
- return;
- }
- var oSS=document.getElementById('ss')
- if (!oSS) {
- alert('Error! Can not find spreadsheet');
- return;
- }
- oSS.HTMLData=oDiv.innerHTML;
-}
-window.onload=getdata;
-</SCRIPT>
-</head>
-<body>
-<object id="ss" classid="CLSID:0002E559-0000-0000-C000-000000000046" style="width:100%;height:100%"></object>
-</body>
-</html>
+<html>\r
+<head>\r
+<title>Export</title>\r
+<SCRIPT TYPE="text/javascript">\r
+function getdata() {\r
+ if (!window.opener || window.opener.closed) {\r
+ alert('Error! Parent window is closed');\r
+ return;\r
+ }\r
+ var divID=window.location.search;\r
+ if (divID.length<2) {\r
+ alert('Error! Invalid id');\r
+ return;\r
+ }\r
+ divID=divID.substring(1);\r
+ var oDiv=window.opener.document.getElementById(divID);\r
+ if (!oDiv) {\r
+ alert('Error! Can not find \"'+divID+'\"');\r
+ return;\r
+ }\r
+ var oSS=document.getElementById('ss')\r
+ if (!oSS) {\r
+ alert('Error! Can not find spreadsheet');\r
+ return;\r
+ }\r
+ oSS.HTMLData=oDiv.innerHTML;\r
+}\r
+window.onload=getdata;\r
+</SCRIPT>\r
+</head>\r
+<body>\r
+<object id="ss" classid="CLSID:0002E559-0000-0000-C000-000000000046" style="width:100%;height:100%"></object>\r
+</body>\r
+</html>\r
-<html>
-<head>
-<title>Export</title>
-<SCRIPT TYPE="text/javascript">
-function getdata() {
- if (!window.opener || window.opener.closed) {
- alert('Error! Parent window is closed');
- return;
- }
- var divID=window.location.search;
- if (divID.length<2) {
- alert('Error! Invalid id');
- return;
- }
- divID=divID.substring(1);
- var oDiv=window.opener.document.getElementById(divID);
- if (!oDiv) {
- alert('Error! Can not find \"'+divID+'\"');
- return;
- }
- document.body.innerHTML=oDiv.innerHTML;
-}
-window.onload=getdata;
-</SCRIPT>
-</head>
-<body>
-</body>
-</html>
+<html>\r
+<head>\r
+<title>Export</title>\r
+<SCRIPT TYPE="text/javascript">\r
+function getdata() {\r
+ if (!window.opener || window.opener.closed) {\r
+ alert('Error! Parent window is closed');\r
+ return;\r
+ }\r
+ var divID=window.location.search;\r
+ if (divID.length<2) {\r
+ alert('Error! Invalid id');\r
+ return;\r
+ }\r
+ divID=divID.substring(1);\r
+ var oDiv=window.opener.document.getElementById(divID);\r
+ if (!oDiv) {\r
+ alert('Error! Can not find \"'+divID+'\"');\r
+ return;\r
+ }\r
+ document.body.innerHTML=oDiv.innerHTML;\r
+}\r
+window.onload=getdata;\r
+</SCRIPT>\r
+</head>\r
+<body>\r
+</body>\r
+</html>\r
-// By Matt Brown
-// June-October 2006
-// email: dowdybrown@yahoo.com
-// Implements a pop-up Gregorian calendar.
-// Dates of adoption of the Gregorian calendar vary by country - accurate as a US & British calendar from 14 Sept 1752 to present.
-// Mark special dates with calls to addHoliday()
-// Inspired by code originally written by Tan Ling Wee on 2 Dec 2001
-
-// Requires prototype.js and ricoCommon.js
-
-Rico.CalendarControl = Class.create();
-
-Rico.CalendarControl.prototype = {
-
- initialize: function(id,options) {
- this.id=id;
- var today=new Date();
- Object.extend(this, new Rico.Popup({ignoreClicks:true}));
- Object.extend(this.options, {
- startAt : 0, // week starts with 0=sunday, 1=monday
- showWeekNumber : 0, // show week number in first column?
- showToday : 1, // show "Today is..." in footer?
- cursorColor: '#FDD', // color used to highlight dates as the user moves their mouse
- repeatInterval : 100, // when left/right arrow is pressed, repeat action every x milliseconds
- dateFmt : 'ISO8601', // default is ISO-8601, 'rico'=use format stored in ricoTranslate object
- selectedDateBorder : "#666666", // border to indicate currently selected date
- minDate : new Date(today.getFullYear()-50,0,1), // default to +-50 yrs from current date
- maxDate : new Date(today.getFullYear()+50,11,31)
- });
- Object.extend(this.options, options || {});
- this.close=this.closePopup;
- this.bPageLoaded=false;
- this.img=new Array();
- this.Holidays={};
- this.todayString=RicoTranslate.getPhrase("Today is ");
- this.weekString=RicoTranslate.getPhrase("Wk");
- if (this.options.dateFmt=='rico') this.options.dateFmt=RicoTranslate.dateFmt;
- this.dateParts=new Array();
- this.re=/^\s*(\w+)(\W)(\w+)(\W)(\w+)/i;
- if (this.re.exec(this.options.dateFmt)) {
- this.dateParts[RegExp.$1]=0;
- this.dateParts[RegExp.$3]=1;
- this.dateParts[RegExp.$5]=2;
- }
- },
-
-
- // y=0 implies a repeating holiday
- addHoliday : function(d, m, y, desc, bgColor, txtColor) {
- this.Holidays[this.holidayKey(y,m-1,d)]={desc:desc, txtColor:txtColor, bgColor:bgColor || '#DDF'};
- },
-
- holidayKey : function(y,m,d) {
- return 'h'+y.toPaddedString(4)+m.toPaddedString(2)+d.toPaddedString(2);
- },
-
- atLoad : function() {
- this.container=document.createElement("div");
- this.container.style.display="none"
- this.container.id=this.id;
- this.container.className='ricoCalContainer';
-
- this.maintab=document.createElement("table");
- this.maintab.cellSpacing=0;
- this.maintab.cellPadding=0;
- this.maintab.border=0;
- this.maintab.className='ricoCalTab';
-
- for (var i=0; i<7; i++) {
- var r=this.maintab.insertRow(-1);
- r.className='row'+i;
- for (var c=0; c<8; c++)
- r.insertCell(-1);
- }
- this.tbody=this.maintab.tBodies[0];
- var r=this.tbody.rows[0];
- r.className='ricoCalDayNames';
- if (this.options.showWeekNumber) {
- r.cells[0].innerHTML=this.weekString;
- for (var i=0; i<7; i++)
- this.tbody.rows[i].cells[0].className='ricoCalWeekNum';
- }
- this.styles=[];
- for (var i=0; i<7; i++) {
- var dow=(i+this.options.startAt) % 7;
- r.cells[i+1].innerHTML=RicoTranslate.dayNames[dow].substring(0,3);
- this.styles[i+1]='ricoCal'+dow;
- }
-
- // table header (navigation controls)
- this.thead=this.maintab.createTHead()
- var r=this.thead.insertRow(-1);
- var c=r.insertCell(-1);
- c.colSpan=8;
- var img=this.createNavArrow('decMonth','left');
- c.appendChild(document.createElement("a")).appendChild(img);
- this.titleMonth=document.createElement("a");
- c.appendChild(this.titleMonth);
- Event.observe(this.titleMonth,"click", this.popUpMonth.bindAsEventListener(this), false);
- var img=this.createNavArrow('incMonth','right');
- c.appendChild(document.createElement("a")).appendChild(img);
- var s=document.createElement("span");
- s.innerHTML=' ';
- s.style.paddingLeft='3em';
- c.appendChild(s);
-
- var img=this.createNavArrow('decYear','left');
- c.appendChild(document.createElement("a")).appendChild(img);
- this.titleYear=document.createElement("a");
- Event.observe(this.titleYear,"click", this.popUpYear.bindAsEventListener(this), false);
- c.appendChild(this.titleYear);
- var img=this.createNavArrow('incYear','right');
- c.appendChild(document.createElement("a")).appendChild(img);
-
- // table footer (today)
- if (this.options.showToday) {
- this.tfoot=this.maintab.createTFoot()
- var r=this.tfoot.insertRow(-1);
- this.todayCell=r.insertCell(-1);
- this.todayCell.colSpan=8;
- Event.observe(this.todayCell,"click", this.selectNow.bindAsEventListener(this), false);
- }
-
-
- this.container.appendChild(this.maintab);
-
- // close icon (upper right)
- var img=document.createElement("img");
- img.src=Rico.imgDir+'close.gif';
- img.onclick=this.close.bind(this);
- img.style.cursor='pointer';
- img.style.position='absolute';
- img.style.top='1px'; /* assumes a 1px border */
- img.style.right='1px';
- this.container.appendChild(img);
-
- // month selector
- this.monthSelect=document.createElement("table");
- this.monthSelect.className='ricoCalMenu';
- this.monthSelect.cellPadding=2;
- this.monthSelect.cellSpacing=0;
- this.monthSelect.border=0;
- for (var i=0; i<4; i++) {
- var r=this.monthSelect.insertRow(-1);
- for (var j=0; j<3; j++) {
- var c=r.insertCell(-1);
- var a=document.createElement("a");
- a.innerHTML=RicoTranslate.monthNames[i*3+j].substring(0,3);
- a.name=i*3+j;
- c.appendChild(a);
- Event.observe(a,"click", this.selectMonth.bindAsEventListener(this), false);
- }
- }
- this.monthSelect.style.display='none';
- this.container.appendChild(this.monthSelect);
-
- // fix anchors so they work in IE6
- var a=this.container.getElementsByTagName('a');
- for (var i=0; i<a.length; i++)
- a[i].href='#';
-
- Event.observe(this.tbody,"click", this.saveAndClose.bindAsEventListener(this));
+// By Matt Brown\r
+// June-October 2006\r
+// email: dowdybrown@yahoo.com\r
+// Implements a pop-up Gregorian calendar.\r
+// Dates of adoption of the Gregorian calendar vary by country - accurate as a US & British calendar from 14 Sept 1752 to present.\r
+// Mark special dates with calls to addHoliday()\r
+// Inspired by code originally written by Tan Ling Wee on 2 Dec 2001\r
+\r
+// Requires prototype.js and ricoCommon.js\r
+\r
+Rico.CalendarControl = Class.create();\r
+\r
+Rico.CalendarControl.prototype = {\r
+\r
+ initialize: function(id,options) {\r
+ this.id=id;\r
+ var today=new Date();\r
+ Object.extend(this, new Rico.Popup({ignoreClicks:true}));\r
+ Object.extend(this.options, {\r
+ startAt : 0, // week starts with 0=sunday, 1=monday\r
+ showWeekNumber : 0, // show week number in first column?\r
+ showToday : 1, // show "Today is..." in footer?\r
+ cursorColor: '#FDD', // color used to highlight dates as the user moves their mouse\r
+ repeatInterval : 100, // when left/right arrow is pressed, repeat action every x milliseconds\r
+ dateFmt : 'ISO8601', // default is ISO-8601, 'rico'=use format stored in ricoTranslate object\r
+ selectedDateBorder : "#666666", // border to indicate currently selected date\r
+ minDate : new Date(today.getFullYear()-50,0,1), // default to +-50 yrs from current date\r
+ maxDate : new Date(today.getFullYear()+50,11,31)\r
+ });\r
+ Object.extend(this.options, options || {});\r
+ this.close=this.closePopup;\r
+ this.bPageLoaded=false;\r
+ this.img=new Array();\r
+ this.Holidays={};\r
+ this.todayString=RicoTranslate.getPhrase("Today is ");\r
+ this.weekString=RicoTranslate.getPhrase("Wk");\r
+ if (this.options.dateFmt=='rico') this.options.dateFmt=RicoTranslate.dateFmt;\r
+ this.dateParts=new Array();\r
+ this.re=/^\s*(\w+)(\W)(\w+)(\W)(\w+)/i;\r
+ if (this.re.exec(this.options.dateFmt)) {\r
+ this.dateParts[RegExp.$1]=0;\r
+ this.dateParts[RegExp.$3]=1;\r
+ this.dateParts[RegExp.$5]=2;\r
+ }\r
+ },\r
+\r
+\r
+ // y=0 implies a repeating holiday\r
+ addHoliday : function(d, m, y, desc, bgColor, txtColor) {\r
+ this.Holidays[this.holidayKey(y,m-1,d)]={desc:desc, txtColor:txtColor, bgColor:bgColor || '#DDF'};\r
+ },\r
+ \r
+ holidayKey : function(y,m,d) {\r
+ return 'h'+y.toPaddedString(4)+m.toPaddedString(2)+d.toPaddedString(2);\r
+ },\r
+\r
+ atLoad : function() {\r
+ this.container=document.createElement("div");\r
+ this.container.style.display="none"\r
+ this.container.id=this.id;\r
+ this.container.className='ricoCalContainer';\r
+\r
+ this.maintab=document.createElement("table");\r
+ this.maintab.cellSpacing=0;\r
+ this.maintab.cellPadding=0;\r
+ this.maintab.border=0;\r
+ this.maintab.className='ricoCalTab';\r
+\r
+ for (var i=0; i<7; i++) {\r
+ var r=this.maintab.insertRow(-1);\r
+ r.className='row'+i;\r
+ for (var c=0; c<8; c++)\r
+ r.insertCell(-1);\r
+ }\r
+ this.tbody=this.maintab.tBodies[0];\r
+ var r=this.tbody.rows[0];\r
+ r.className='ricoCalDayNames';\r
+ if (this.options.showWeekNumber) {\r
+ r.cells[0].innerHTML=this.weekString;\r
+ for (var i=0; i<7; i++)\r
+ this.tbody.rows[i].cells[0].className='ricoCalWeekNum';\r
+ }\r
+ this.styles=[];\r
+ for (var i=0; i<7; i++) {\r
+ var dow=(i+this.options.startAt) % 7;\r
+ r.cells[i+1].innerHTML=RicoTranslate.dayNames[dow].substring(0,3);\r
+ this.styles[i+1]='ricoCal'+dow;\r
+ }\r
+ \r
+ // table header (navigation controls)\r
+ this.thead=this.maintab.createTHead()\r
+ var r=this.thead.insertRow(-1);\r
+ var c=r.insertCell(-1);\r
+ c.colSpan=8;\r
+ var img=this.createNavArrow('decMonth','left');\r
+ c.appendChild(document.createElement("a")).appendChild(img);\r
+ this.titleMonth=document.createElement("a");\r
+ c.appendChild(this.titleMonth);\r
+ Event.observe(this.titleMonth,"click", this.popUpMonth.bindAsEventListener(this), false);\r
+ var img=this.createNavArrow('incMonth','right');\r
+ c.appendChild(document.createElement("a")).appendChild(img);\r
+ var s=document.createElement("span");\r
+ s.innerHTML=' ';\r
+ s.style.paddingLeft='3em';\r
+ c.appendChild(s);\r
+\r
+ var img=this.createNavArrow('decYear','left');\r
+ c.appendChild(document.createElement("a")).appendChild(img);\r
+ this.titleYear=document.createElement("a");\r
+ Event.observe(this.titleYear,"click", this.popUpYear.bindAsEventListener(this), false);\r
+ c.appendChild(this.titleYear);\r
+ var img=this.createNavArrow('incYear','right');\r
+ c.appendChild(document.createElement("a")).appendChild(img);\r
+\r
+ // table footer (today)\r
+ if (this.options.showToday) {\r
+ this.tfoot=this.maintab.createTFoot()\r
+ var r=this.tfoot.insertRow(-1);\r
+ this.todayCell=r.insertCell(-1);\r
+ this.todayCell.colSpan=8;\r
+ Event.observe(this.todayCell,"click", this.selectNow.bindAsEventListener(this), false);\r
+ }\r
+ \r
+\r
+ this.container.appendChild(this.maintab);\r
+ \r
+ // close icon (upper right)\r
+ var img=document.createElement("img");\r
+ img.src=Rico.imgDir+'close.gif';\r
+ img.onclick=this.close.bind(this);\r
+ img.style.cursor='pointer';\r
+ img.style.position='absolute';\r
+ img.style.top='1px'; /* assumes a 1px border */\r
+ img.style.right='1px';\r
+ this.container.appendChild(img);\r
+ \r
+ // month selector\r
+ this.monthSelect=document.createElement("table");\r
+ this.monthSelect.className='ricoCalMenu';\r
+ this.monthSelect.cellPadding=2;\r
+ this.monthSelect.cellSpacing=0;\r
+ this.monthSelect.border=0;\r
+ for (var i=0; i<4; i++) {\r
+ var r=this.monthSelect.insertRow(-1);\r
+ for (var j=0; j<3; j++) {\r
+ var c=r.insertCell(-1);\r
+ var a=document.createElement("a");\r
+ a.innerHTML=RicoTranslate.monthNames[i*3+j].substring(0,3);\r
+ a.name=i*3+j;\r
+ c.appendChild(a);\r
+ Event.observe(a,"click", this.selectMonth.bindAsEventListener(this), false);\r
+ }\r
+ }\r
+ this.monthSelect.style.display='none';\r
+ this.container.appendChild(this.monthSelect);\r
+ \r
+ // fix anchors so they work in IE6\r
+ var a=this.container.getElementsByTagName('a');\r
+ for (var i=0; i<a.length; i++)\r
+ a[i].href='#';\r
+ \r
+ Event.observe(this.tbody,"click", this.saveAndClose.bindAsEventListener(this));\r
Event.observe(this.tbody,"mouseover", this.mouseOver.bindAsEventListener(this));
Event.observe(this.tbody,"mouseout", this.mouseOut.bindAsEventListener(this));
- document.getElementsByTagName("body")[0].appendChild(this.container);
- this.setDiv(this.container);
- this.close()
- this.bPageLoaded=true
- },
-
- selectNow : function() {
- this.monthSelected=this.monthNow;
- this.yearSelected=this.yearNow;
- this.constructCalendar();
- },
-
- createNavArrow: function(funcname,gifname) {
- var img=document.createElement("img");
- img.src=Rico.imgDir+gifname+'.gif';
- img.name=funcname;
- Event.observe(img,"click", this[funcname].bindAsEventListener(this), false);
- Event.observe(img,"mousedown", this.mouseDown.bindAsEventListener(this), false);
- Event.observe(img,"mouseup", this.mouseUp.bindAsEventListener(this), false);
- Event.observe(img,"mouseout", this.mouseUp.bindAsEventListener(this), false);
- return img
- },
-
- mouseOver: function(e) {
- var el=Event.element(e);
- if (this.lastHighlight==el) return;
- this.unhighlight();
- var s=el.innerHTML.replace(/ /g,'');
- if (s=='' || el.className=='ricoCalWeekNum') return;
- var day=parseInt(s);
- if (isNaN(day)) return;
- this.lastHighlight=el;
- this.tmpColor=el.style.backgroundColor;
- el.style.backgroundColor=this.options.cursorColor;
- },
-
- unhighlight: function() {
- if (!this.lastHighlight) return;
- this.lastHighlight.style.backgroundColor=this.tmpColor;
- this.lastHighlight=null;
- },
-
- mouseOut: function(e) {
- var el=Event.element(e);
- if (el==this.lastHighlight) this.unhighlight();
- },
-
- mouseDown: function(e) {
- var el=Event.element(e);
- this.repeatFunc=this[el.name].bind(this);
- this.timeoutID=setTimeout(this.repeatStart.bind(this),500);
- },
-
- mouseUp: function(e) {
- clearTimeout(this.timeoutID);
- clearInterval(this.intervalID)
- },
-
- repeatStart : function() {
- clearInterval(this.intervalID);
- this.intervalID=setInterval(this.repeatFunc,this.options.repeatInterval);
- },
-
- // is yr/mo within minDate/MaxDate?
- isValidMonth : function(yr,mo) {
- if (yr < this.options.minDate.getFullYear()) return false;
- if (yr == this.options.minDate.getFullYear() && mo < this.options.minDate.getMonth()) return false;
- if (yr > this.options.maxDate.getFullYear()) return false;
- if (yr == this.options.maxDate.getFullYear() && mo > this.options.maxDate.getMonth()) return false;
- return true;
- },
-
- incMonth : function() {
- var newMonth=this.monthSelected+1;
- var newYear=this.yearSelected;
- if (newMonth>11) {
- newMonth=0;
- newYear++;
- }
- if (!this.isValidMonth(newYear,newMonth)) return;
- this.monthSelected=newMonth;
- this.yearSelected=newYear;
- this.constructCalendar()
- },
-
- decMonth : function() {
- var newMonth=this.monthSelected-1;
- var newYear=this.yearSelected;
- if (newMonth<0) {
- newMonth=11;
- newYear--;
- }
- if (!this.isValidMonth(newYear,newMonth)) return;
- this.monthSelected=newMonth;
- this.yearSelected=newYear;
- this.constructCalendar()
- },
-
- selectMonth : function(e) {
- var el=Event.element(e);
- this.monthSelected=parseInt(el.name);
- this.constructCalendar();
- Event.stop(e);
- },
-
- popUpMonth : function() {
- this.monthSelect.style.display=this.monthSelect.style.display=='none' ? 'block' : 'none';
- },
-
- popDownMonth : function() {
- this.monthSelect.style.display='none';
- },
-
- /*** Year Pulldown ***/
-
- popUpYear : function() {
- var newYear=prompt(RicoTranslate.getPhrase("Year ("+this.options.minDate.getFullYear()+"-"+this.options.maxDate.getFullYear()+")"),this.yearSelected);
- if (newYear==null) return;
- newYear=parseInt(newYear);
- if (isNaN(newYear) || newYear<this.options.minDate.getFullYear() || newYear>this.options.maxDate.getFullYear()) {
- alert(RicoTranslate.getPhrase("Invalid year"));
- } else {
- this.yearSelected=newYear;
- this.constructCalendar();
- }
- },
-
- incYear : function() {
- if (this.yearSelected>=this.options.maxDate.getFullYear()) return;
- this.yearSelected++;
- this.constructCalendar();
- },
-
- decYear : function() {
- if (this.yearSelected<=this.options.minDate.getFullYear()) return;
- this.yearSelected--;
- this.constructCalendar();
- },
-
- // tried a number of different week number functions posted on the net
- // this is the only one that produced consistent results when comparing week numbers for December and the following January
- WeekNbr : function(year,month,day) {
- var when = new Date(year,month,day);
- var newYear = new Date(year,0,1);
- var offset = 7 + 1 - newYear.getDay();
- if (offset == 8) offset = 1;
- var daynum = ((Date.UTC(year,when.getMonth(),when.getDate(),0,0,0) - Date.UTC(year,0,1,0,0,0)) /1000/60/60/24) + 1;
- var weeknum = Math.floor((daynum-offset+7)/7);
- if (weeknum == 0) {
- year--;
- var prevNewYear = new Date(year,0,1);
- var prevOffset = 7 + 1 - prevNewYear.getDay();
- if (prevOffset == 2 || prevOffset == 8) weeknum = 53; else weeknum = 52;
- }
- return weeknum;
- },
-
- constructCalendar : function() {
- var aNumDays = Array (31,0,31,30,31,30,31,31,30,31,30,31)
- var startDate = new Date (this.yearSelected,this.monthSelected,1)
- var endDate,numDaysInMonth
-
- if (typeof this.monthSelected!='number' || this.monthSelected>=12 || this.monthSelected<0) {
- alert('ERROR in calendar: monthSelected='+this.monthSelected);
- return;
- }
- var today = new Date();
- this.dateNow = today.getDate();
- this.monthNow = today.getMonth();
- this.yearNow = today.getFullYear();
-
- if (this.monthSelected==1) {
- endDate = new Date (this.yearSelected,this.monthSelected+1,1);
- endDate = new Date (endDate - (24*60*60*1000));
- numDaysInMonth = endDate.getDate()
- } else {
- numDaysInMonth = aNumDays[this.monthSelected];
- }
- var dayPointer = startDate.getDay() - this.options.startAt
- if (dayPointer<0) dayPointer+=7;
- this.popDownMonth();
-
- this.bgcolor=Element.getStyle(this.tbody,'background-color');
- this.bgcolor=this.bgcolor.replace(/\"/g,'');
- if (this.options.showWeekNumber) {
- for (var i=1; i<7; i++)
- this.tbody.rows[i].cells[0].innerHTML=' ';
- }
- for ( var i=1; i<=dayPointer; i++ )
- this.resetCell(this.tbody.rows[1].cells[i]);
-
- for ( var datePointer=1,r=1; datePointer<=numDaysInMonth; datePointer++,dayPointer++ ) {
- var colnum=dayPointer % 7 + 1;
- if (this.options.showWeekNumber==1 && colnum==1)
- this.tbody.rows[r].cells[0].innerHTML=this.WeekNbr(this.yearSelected,this.monthSelected,datePointer);
- var dateClass=this.styles[colnum];
- if ((datePointer==this.dateNow)&&(this.monthSelected==this.monthNow)&&(this.yearSelected==this.yearNow))
- dateClass='ricoCalToday';
- var c=this.tbody.rows[r].cells[colnum];
- c.innerHTML=" " + datePointer + " ";
- c.className=dateClass;
- var bordercolor=(datePointer==this.odateSelected) && (this.monthSelected==this.omonthSelected) && (this.yearSelected==this.oyearSelected) ? this.options.selectedDateBorder : this.bgcolor;
- c.style.border='1px solid '+bordercolor;
- var h=this.Holidays[this.holidayKey(this.yearSelected,this.monthSelected,datePointer)];
- if (!h) h=this.Holidays[this.holidayKey(0,this.monthSelected,datePointer)];
- c.style.color=h ? h.txtColor : '';
- c.style.backgroundColor=h ? h.bgColor : '';
- c.title=h ? h.desc : '';
- if (colnum==7) r++;
- }
- while (dayPointer<42) {
- var colnum=dayPointer % 7 + 1;
- this.resetCell(this.tbody.rows[r].cells[colnum]);
- dayPointer++;
- if (colnum==7) r++;
- }
-
- this.titleMonth.innerHTML = RicoTranslate.monthNames[this.monthSelected].substring(0,3);
- this.titleYear.innerHTML = this.yearSelected;
- if (this.options.showToday)
- this.todayCell.innerHTML=this.todayString+'<span>'+this.dateNow + " " + RicoTranslate.monthNames[this.monthNow].substring(0,3) + " " + this.yearNow+'</span>';
- this.monthSelect.style.top=this.thead.offsetHeight+'px';
- this.monthSelect.style.left=this.titleMonth.offsetLeft+'px';
- },
-
- resetCell: function(c) {
- c.innerHTML=" ";
- c.className='ricoCalEmpty';
- c.style.border='1px solid '+this.bgcolor;
- c.style.color='';
- c.style.backgroundColor='';
- c.title='';
- },
-
- saveAndClose : function(e) {
- Event.stop(e);
- var el=Event.element(e);
- var s=el.innerHTML.replace(/ /g,'');
- if (s=='' || el.className=='ricoCalWeekNum') return;
- var day=parseInt(s);
- if (isNaN(day)) return;
- var d=new Date(this.yearSelected,this.monthSelected,day);
- var dateStr=d.formatDate(this.options.dateFmt=='ISO8601' ? 'yyyy-mm-dd' : this.options.dateFmt);
- if (this.returnValue) this.returnValue(dateStr);
- this.close();
- },
-
- open : function(curval) {
- if (!this.bPageLoaded) return;
- if (typeof curval=='object') {
- this.dateSelected = curval.getDate();
- this.monthSelected = curval.getMonth();
- this.yearSelected = curval.getFullYear();
- } else if (this.options.dateFmt=='ISO8601') {
- var d=new Date;
- d.setISO8601(curval);
- this.dateSelected = d.getDate();
- this.monthSelected = d.getMonth();
- this.yearSelected = d.getFullYear();
- } else if (this.re.exec(curval)) {
- var aDate=new Array(RegExp.$1,RegExp.$3,RegExp.$5);
- this.dateSelected = parseInt(aDate[this.dateParts['dd']], 10);
- this.monthSelected = parseInt(aDate[this.dateParts['mm']], 10) - 1;
- this.yearSelected = parseInt(aDate[this.dateParts['yyyy']], 10);
- } else {
- if (curval) alert('ERROR: invalid date passed to calendar ('+curval+')');
- this.dateSelected = this.dateNow
- this.monthSelected = this.monthNow
- this.yearSelected = this.yearNow
- }
- this.odateSelected=this.dateSelected
- this.omonthSelected=this.monthSelected
- this.oyearSelected=this.yearSelected
- this.constructCalendar();
- this.openPopup();
- }
-}
-
+ document.getElementsByTagName("body")[0].appendChild(this.container);\r
+ this.setDiv(this.container);\r
+ this.close()\r
+ this.bPageLoaded=true\r
+ },\r
+ \r
+ selectNow : function() {\r
+ this.monthSelected=this.monthNow;\r
+ this.yearSelected=this.yearNow;\r
+ this.constructCalendar();\r
+ },\r
+ \r
+ createNavArrow: function(funcname,gifname) {\r
+ var img=document.createElement("img");\r
+ img.src=Rico.imgDir+gifname+'.gif';\r
+ img.name=funcname;\r
+ Event.observe(img,"click", this[funcname].bindAsEventListener(this), false);\r
+ Event.observe(img,"mousedown", this.mouseDown.bindAsEventListener(this), false);\r
+ Event.observe(img,"mouseup", this.mouseUp.bindAsEventListener(this), false);\r
+ Event.observe(img,"mouseout", this.mouseUp.bindAsEventListener(this), false);\r
+ return img\r
+ },\r
+\r
+ mouseOver: function(e) {\r
+ var el=Event.element(e);\r
+ if (this.lastHighlight==el) return;\r
+ this.unhighlight();\r
+ var s=el.innerHTML.replace(/ /g,'');\r
+ if (s=='' || el.className=='ricoCalWeekNum') return;\r
+ var day=parseInt(s);\r
+ if (isNaN(day)) return;\r
+ this.lastHighlight=el;\r
+ this.tmpColor=el.style.backgroundColor;\r
+ el.style.backgroundColor=this.options.cursorColor;\r
+ },\r
+ \r
+ unhighlight: function() {\r
+ if (!this.lastHighlight) return;\r
+ this.lastHighlight.style.backgroundColor=this.tmpColor;\r
+ this.lastHighlight=null;\r
+ },\r
+ \r
+ mouseOut: function(e) {\r
+ var el=Event.element(e);\r
+ if (el==this.lastHighlight) this.unhighlight();\r
+ },\r
+ \r
+ mouseDown: function(e) {\r
+ var el=Event.element(e);\r
+ this.repeatFunc=this[el.name].bind(this);\r
+ this.timeoutID=setTimeout(this.repeatStart.bind(this),500);\r
+ },\r
+ \r
+ mouseUp: function(e) {\r
+ clearTimeout(this.timeoutID);\r
+ clearInterval(this.intervalID)\r
+ },\r
+ \r
+ repeatStart : function() {\r
+ clearInterval(this.intervalID);\r
+ this.intervalID=setInterval(this.repeatFunc,this.options.repeatInterval);\r
+ },\r
+ \r
+ // is yr/mo within minDate/MaxDate?\r
+ isValidMonth : function(yr,mo) {\r
+ if (yr < this.options.minDate.getFullYear()) return false;\r
+ if (yr == this.options.minDate.getFullYear() && mo < this.options.minDate.getMonth()) return false;\r
+ if (yr > this.options.maxDate.getFullYear()) return false;\r
+ if (yr == this.options.maxDate.getFullYear() && mo > this.options.maxDate.getMonth()) return false;\r
+ return true;\r
+ },\r
+\r
+ incMonth : function() {\r
+ var newMonth=this.monthSelected+1;\r
+ var newYear=this.yearSelected;\r
+ if (newMonth>11) {\r
+ newMonth=0;\r
+ newYear++;\r
+ }\r
+ if (!this.isValidMonth(newYear,newMonth)) return;\r
+ this.monthSelected=newMonth;\r
+ this.yearSelected=newYear;\r
+ this.constructCalendar()\r
+ },\r
+\r
+ decMonth : function() {\r
+ var newMonth=this.monthSelected-1;\r
+ var newYear=this.yearSelected;\r
+ if (newMonth<0) {\r
+ newMonth=11;\r
+ newYear--;\r
+ }\r
+ if (!this.isValidMonth(newYear,newMonth)) return;\r
+ this.monthSelected=newMonth;\r
+ this.yearSelected=newYear;\r
+ this.constructCalendar()\r
+ },\r
+ \r
+ selectMonth : function(e) {\r
+ var el=Event.element(e);\r
+ this.monthSelected=parseInt(el.name);\r
+ this.constructCalendar();\r
+ Event.stop(e);\r
+ },\r
+\r
+ popUpMonth : function() {\r
+ this.monthSelect.style.display=this.monthSelect.style.display=='none' ? 'block' : 'none';\r
+ },\r
+\r
+ popDownMonth : function() {\r
+ this.monthSelect.style.display='none';\r
+ },\r
+\r
+ /*** Year Pulldown ***/\r
+\r
+ popUpYear : function() {\r
+ var newYear=prompt(RicoTranslate.getPhrase("Year ("+this.options.minDate.getFullYear()+"-"+this.options.maxDate.getFullYear()+")"),this.yearSelected);\r
+ if (newYear==null) return;\r
+ newYear=parseInt(newYear);\r
+ if (isNaN(newYear) || newYear<this.options.minDate.getFullYear() || newYear>this.options.maxDate.getFullYear()) {\r
+ alert(RicoTranslate.getPhrase("Invalid year"));\r
+ } else {\r
+ this.yearSelected=newYear;\r
+ this.constructCalendar();\r
+ }\r
+ },\r
+ \r
+ incYear : function() {\r
+ if (this.yearSelected>=this.options.maxDate.getFullYear()) return;\r
+ this.yearSelected++;\r
+ this.constructCalendar();\r
+ },\r
+\r
+ decYear : function() {\r
+ if (this.yearSelected<=this.options.minDate.getFullYear()) return;\r
+ this.yearSelected--;\r
+ this.constructCalendar();\r
+ },\r
+\r
+ // tried a number of different week number functions posted on the net\r
+ // this is the only one that produced consistent results when comparing week numbers for December and the following January\r
+ WeekNbr : function(year,month,day) {\r
+ var when = new Date(year,month,day);\r
+ var newYear = new Date(year,0,1);\r
+ var offset = 7 + 1 - newYear.getDay();\r
+ if (offset == 8) offset = 1;\r
+ var daynum = ((Date.UTC(year,when.getMonth(),when.getDate(),0,0,0) - Date.UTC(year,0,1,0,0,0)) /1000/60/60/24) + 1;\r
+ var weeknum = Math.floor((daynum-offset+7)/7);\r
+ if (weeknum == 0) {\r
+ year--;\r
+ var prevNewYear = new Date(year,0,1);\r
+ var prevOffset = 7 + 1 - prevNewYear.getDay();\r
+ if (prevOffset == 2 || prevOffset == 8) weeknum = 53; else weeknum = 52;\r
+ }\r
+ return weeknum;\r
+ },\r
+\r
+ constructCalendar : function() {\r
+ var aNumDays = Array (31,0,31,30,31,30,31,31,30,31,30,31)\r
+ var startDate = new Date (this.yearSelected,this.monthSelected,1)\r
+ var endDate,numDaysInMonth\r
+\r
+ if (typeof this.monthSelected!='number' || this.monthSelected>=12 || this.monthSelected<0) {\r
+ alert('ERROR in calendar: monthSelected='+this.monthSelected);\r
+ return;\r
+ }\r
+ var today = new Date();\r
+ this.dateNow = today.getDate();\r
+ this.monthNow = today.getMonth();\r
+ this.yearNow = today.getFullYear();\r
+\r
+ if (this.monthSelected==1) {\r
+ endDate = new Date (this.yearSelected,this.monthSelected+1,1);\r
+ endDate = new Date (endDate - (24*60*60*1000));\r
+ numDaysInMonth = endDate.getDate()\r
+ } else {\r
+ numDaysInMonth = aNumDays[this.monthSelected];\r
+ }\r
+ var dayPointer = startDate.getDay() - this.options.startAt\r
+ if (dayPointer<0) dayPointer+=7;\r
+ this.popDownMonth();\r
+\r
+ this.bgcolor=Element.getStyle(this.tbody,'background-color');\r
+ this.bgcolor=this.bgcolor.replace(/\"/g,'');\r
+ if (this.options.showWeekNumber) {\r
+ for (var i=1; i<7; i++)\r
+ this.tbody.rows[i].cells[0].innerHTML=' ';\r
+ }\r
+ for ( var i=1; i<=dayPointer; i++ )\r
+ this.resetCell(this.tbody.rows[1].cells[i]);\r
+\r
+ for ( var datePointer=1,r=1; datePointer<=numDaysInMonth; datePointer++,dayPointer++ ) {\r
+ var colnum=dayPointer % 7 + 1;\r
+ if (this.options.showWeekNumber==1 && colnum==1)\r
+ this.tbody.rows[r].cells[0].innerHTML=this.WeekNbr(this.yearSelected,this.monthSelected,datePointer);\r
+ var dateClass=this.styles[colnum];\r
+ if ((datePointer==this.dateNow)&&(this.monthSelected==this.monthNow)&&(this.yearSelected==this.yearNow))\r
+ dateClass='ricoCalToday';\r
+ var c=this.tbody.rows[r].cells[colnum];\r
+ c.innerHTML=" " + datePointer + " ";\r
+ c.className=dateClass;\r
+ var bordercolor=(datePointer==this.odateSelected) && (this.monthSelected==this.omonthSelected) && (this.yearSelected==this.oyearSelected) ? this.options.selectedDateBorder : this.bgcolor;\r
+ c.style.border='1px solid '+bordercolor;\r
+ var h=this.Holidays[this.holidayKey(this.yearSelected,this.monthSelected,datePointer)];\r
+ if (!h) h=this.Holidays[this.holidayKey(0,this.monthSelected,datePointer)];\r
+ c.style.color=h ? h.txtColor : '';\r
+ c.style.backgroundColor=h ? h.bgColor : '';\r
+ c.title=h ? h.desc : '';\r
+ if (colnum==7) r++;\r
+ }\r
+ while (dayPointer<42) {\r
+ var colnum=dayPointer % 7 + 1;\r
+ this.resetCell(this.tbody.rows[r].cells[colnum]);\r
+ dayPointer++;\r
+ if (colnum==7) r++;\r
+ }\r
+\r
+ this.titleMonth.innerHTML = RicoTranslate.monthNames[this.monthSelected].substring(0,3);\r
+ this.titleYear.innerHTML = this.yearSelected;\r
+ if (this.options.showToday)\r
+ this.todayCell.innerHTML=this.todayString+'<span>'+this.dateNow + " " + RicoTranslate.monthNames[this.monthNow].substring(0,3) + " " + this.yearNow+'</span>';\r
+ this.monthSelect.style.top=this.thead.offsetHeight+'px';\r
+ this.monthSelect.style.left=this.titleMonth.offsetLeft+'px';\r
+ },\r
+ \r
+ resetCell: function(c) {\r
+ c.innerHTML=" ";\r
+ c.className='ricoCalEmpty';\r
+ c.style.border='1px solid '+this.bgcolor;\r
+ c.style.color='';\r
+ c.style.backgroundColor='';\r
+ c.title='';\r
+ },\r
+ \r
+ saveAndClose : function(e) {\r
+ Event.stop(e);\r
+ var el=Event.element(e);\r
+ var s=el.innerHTML.replace(/ /g,'');\r
+ if (s=='' || el.className=='ricoCalWeekNum') return;\r
+ var day=parseInt(s);\r
+ if (isNaN(day)) return;\r
+ var d=new Date(this.yearSelected,this.monthSelected,day);\r
+ var dateStr=d.formatDate(this.options.dateFmt=='ISO8601' ? 'yyyy-mm-dd' : this.options.dateFmt);\r
+ if (this.returnValue) this.returnValue(dateStr);\r
+ this.close();\r
+ },\r
+\r
+ open : function(curval) {\r
+ if (!this.bPageLoaded) return;\r
+ if (typeof curval=='object') {\r
+ this.dateSelected = curval.getDate();\r
+ this.monthSelected = curval.getMonth();\r
+ this.yearSelected = curval.getFullYear();\r
+ } else if (this.options.dateFmt=='ISO8601') {\r
+ var d=new Date;\r
+ d.setISO8601(curval);\r
+ this.dateSelected = d.getDate();\r
+ this.monthSelected = d.getMonth();\r
+ this.yearSelected = d.getFullYear();\r
+ } else if (this.re.exec(curval)) {\r
+ var aDate=new Array(RegExp.$1,RegExp.$3,RegExp.$5);\r
+ this.dateSelected = parseInt(aDate[this.dateParts['dd']], 10);\r
+ this.monthSelected = parseInt(aDate[this.dateParts['mm']], 10) - 1;\r
+ this.yearSelected = parseInt(aDate[this.dateParts['yyyy']], 10);\r
+ } else {\r
+ if (curval) alert('ERROR: invalid date passed to calendar ('+curval+')');\r
+ this.dateSelected = this.dateNow\r
+ this.monthSelected = this.monthNow\r
+ this.yearSelected = this.yearNow\r
+ }\r
+ this.odateSelected=this.dateSelected\r
+ this.omonthSelected=this.monthSelected\r
+ this.oyearSelected=this.yearSelected\r
+ this.constructCalendar();\r
+ this.openPopup();\r
+ }\r
+}\r
+\r
Rico.includeLoaded('ricoCalendar.js');
-// ===================================================================
-// Original author: Matt Kruse <matt@mattkruse.com>
-// WWW: http://www.mattkruse.com/
-//
-// Adapted to Rico by Matt Brown
-// ===================================================================
-
-
-Rico.ColorPicker = Class.create();
-
-Rico.ColorPicker.prototype = {
-
- initialize: function(id,options) {
- this.id=id;
- this.currentValue = "#FFFFFF";
+// ===================================================================\r
+// Original author: Matt Kruse <matt@mattkruse.com>\r
+// WWW: http://www.mattkruse.com/\r
+//\r
+// Adapted to Rico by Matt Brown\r
+// ===================================================================\r
+\r
+\r
+Rico.ColorPicker = Class.create();\r
+\r
+Rico.ColorPicker.prototype = {\r
+\r
+ initialize: function(id,options) {\r
+ this.id=id;\r
+ this.currentValue = "#FFFFFF";\r
Object.extend(this, new Rico.Popup());
- Object.extend(this.options, {
- showColorCode : false,
- cellsPerRow : 18,
- palette : []
+ Object.extend(this.options, {\r
+ showColorCode : false,\r
+ cellsPerRow : 18,\r
+ palette : []\r
});
- var hexvals=['00','33','66','99','CC','FF'];
- for (var g=0; g<hexvals.length; g++)
- for (var r=0; r<hexvals.length; r++)
- for (var b=0; b<hexvals.length; b++)
- this.options.palette.push(hexvals[r]+hexvals[g]+hexvals[b]);
- Object.extend(this.options, options || {});
- },
-
- atLoad : function() {
- this.container=document.createElement("div");
- this.container.style.display="none"
- this.container.className='ricoColorPicker';
- var width = this.options.cellsPerRow;
- var cp_contents = "<TABLE BORDER='1' CELLSPACING='1' CELLPADDING='0'>";
- for (var i=0; i<this.options.palette.length; i++) {
- if ((i % width) == 0) { cp_contents += "<TR>"; }
- cp_contents += '<TD BGCOLOR="'+this.options.palette[i]+'"> </TD>';
- if ( ((i+1)>=this.options.palette.length) || (((i+1) % width) == 0))
- cp_contents += "</TR>";
- }
- var halfwidth = Math.floor(width/2);
- if (this.options.showColorCode)
- cp_contents += "<TR><TD COLSPAN='"+halfwidth+"' ID='colorPickerSelectedColor'> </TD><TD COLSPAN='"+(width-halfwidth)+"' ALIGN='CENTER' ID='colorPickerSelectedColorValue'>#FFFFFF</TD></TR>";
- else
- cp_contents += "<TR><TD COLSPAN='"+width+"' ID='colorPickerSelectedColor'> </TD></TR>";
- cp_contents += "</TABLE>";
- this.container.innerHTML=cp_contents;
- document.body.appendChild(this.container);
- this.setDiv(this.container);
- this.open=this.openPopup;
- this.close=this.closePopup;
- Event.observe(this.container,"mouseover", this.highlightColor.bindAsEventListener(this), false);
- Event.observe(this.container,"click", this.selectColor.bindAsEventListener(this), false);
- this.close();
- },
-
- selectColor: function(e) {
- if (this.returnValue) this.returnValue(this.currentValue);
- this.close();
- },
-
- // This function runs when you move your mouse over a color block, if you have a newer browser
- highlightColor: function(e) {
- var elem = Event.element(e);
- if (!elem.tagName || elem.tagName.toLowerCase() != 'td') return;
- var c=Rico.Color.createColorFromBackground(elem).toString();
- this.currentValue = c;
- Element.setStyle('colorPickerSelectedColor',{'background-color':c});
- d = $("colorPickerSelectedColorValue");
- if (d) d.innerHTML = c;
- }
-}
-
+ var hexvals=['00','33','66','99','CC','FF'];\r
+ for (var g=0; g<hexvals.length; g++)\r
+ for (var r=0; r<hexvals.length; r++)\r
+ for (var b=0; b<hexvals.length; b++)\r
+ this.options.palette.push(hexvals[r]+hexvals[g]+hexvals[b]);\r
+ Object.extend(this.options, options || {});\r
+ },\r
+\r
+ atLoad : function() {\r
+ this.container=document.createElement("div");\r
+ this.container.style.display="none"\r
+ this.container.className='ricoColorPicker';\r
+ var width = this.options.cellsPerRow;\r
+ var cp_contents = "<TABLE BORDER='1' CELLSPACING='1' CELLPADDING='0'>";\r
+ for (var i=0; i<this.options.palette.length; i++) {\r
+ if ((i % width) == 0) { cp_contents += "<TR>"; }\r
+ cp_contents += '<TD BGCOLOR="'+this.options.palette[i]+'"> </TD>';\r
+ if ( ((i+1)>=this.options.palette.length) || (((i+1) % width) == 0))\r
+ cp_contents += "</TR>";\r
+ }\r
+ var halfwidth = Math.floor(width/2);\r
+ if (this.options.showColorCode)\r
+ cp_contents += "<TR><TD COLSPAN='"+halfwidth+"' ID='colorPickerSelectedColor'> </TD><TD COLSPAN='"+(width-halfwidth)+"' ALIGN='CENTER' ID='colorPickerSelectedColorValue'>#FFFFFF</TD></TR>";\r
+ else\r
+ cp_contents += "<TR><TD COLSPAN='"+width+"' ID='colorPickerSelectedColor'> </TD></TR>";\r
+ cp_contents += "</TABLE>";\r
+ this.container.innerHTML=cp_contents;\r
+ document.body.appendChild(this.container);\r
+ this.setDiv(this.container);\r
+ this.open=this.openPopup;\r
+ this.close=this.closePopup;\r
+ Event.observe(this.container,"mouseover", this.highlightColor.bindAsEventListener(this), false);\r
+ Event.observe(this.container,"click", this.selectColor.bindAsEventListener(this), false);\r
+ this.close();\r
+ },\r
+\r
+ selectColor: function(e) {\r
+ if (this.returnValue) this.returnValue(this.currentValue);\r
+ this.close();\r
+ },\r
+\r
+ // This function runs when you move your mouse over a color block, if you have a newer browser\r
+ highlightColor: function(e) {\r
+ var elem = Event.element(e);\r
+ if (!elem.tagName || elem.tagName.toLowerCase() != 'td') return;\r
+ var c=Rico.Color.createColorFromBackground(elem).toString();\r
+ this.currentValue = c;\r
+ Element.setStyle('colorPickerSelectedColor',{'background-color':c});\r
+ d = $("colorPickerSelectedColorValue");\r
+ if (d) d.innerHTML = c;\r
+ }\r
+}\r
+\r
Rico.includeLoaded('ricoColorPicker.js');
-if(typeof Rico=='undefined') throw("LiveGridForms requires the Rico JavaScript framework");
-if(typeof RicoUtil=='undefined') throw("LiveGridForms requires the RicoUtil object");
-if(typeof RicoTranslate=='undefined') throw("LiveGridForms requires the RicoTranslate object");
-
-
-Rico.TableEdit = Class.create();
-
-Rico.TableEdit.prototype = {
-
- initialize: function(liveGrid) {
- Rico.writeDebugMsg('Rico.TableEdit initialize: '+liveGrid.tableId);
- this.grid=liveGrid;
- this.options = {
- maxDisplayLen : 20, // max displayed text field length
- panelHeight : 200, // size of tabbed panels
- panelWidth : 500,
- hoverClass : 'tabHover',
- selectedClass : 'tabSelected',
- compact : false, // compact corners
- RecordName : 'record',
- readOnlyColor : '#AAA', // read-only fields displayed using this color
+if(typeof Rico=='undefined') throw("LiveGridForms requires the Rico JavaScript framework");\r
+if(typeof RicoUtil=='undefined') throw("LiveGridForms requires the RicoUtil object");\r
+if(typeof RicoTranslate=='undefined') throw("LiveGridForms requires the RicoTranslate object");\r
+\r
+\r
+Rico.TableEdit = Class.create();\r
+\r
+Rico.TableEdit.prototype = {\r
+\r
+ initialize: function(liveGrid) {\r
+ Rico.writeDebugMsg('Rico.TableEdit initialize: '+liveGrid.tableId);\r
+ this.grid=liveGrid;\r
+ this.options = {\r
+ maxDisplayLen : 20, // max displayed text field length\r
+ panelHeight : 200, // size of tabbed panels\r
+ panelWidth : 500,\r
+ hoverClass : 'tabHover',\r
+ selectedClass : 'tabSelected',\r
+ compact : false, // compact corners\r
+ RecordName : 'record',\r
+ readOnlyColor : '#AAA', // read-only fields displayed using this color\r
showSaveMsg : 'errors' // disposition of database update responses (full - show full response, errors - show full response for errors and short response otherwise)
}
Object.extend(this.options, liveGrid.options);
- this.menu=liveGrid.menu;
- this.menu.options.dataMenuHandler=this.editMenu.bind(this);
- this.menu.ignoreClicks();
- RicoEditControls.atLoad();
- this.createEditDiv();
- this.saveMsg=$(liveGrid.tableId+'_savemsg');
- Event.observe(document,"click", this.clearSaveMsg.bindAsEventListener(this), false);
- this.TEerror=false;
- this.extraMenuItems=new Array();
- this.responseHandler=this.processResponse.bind(this);
- },
-
- createEditDiv: function() {
-
- // create editDiv (form)
-
- this.requestCount=1;
- this.editDiv = this.grid.createDiv('edit',document.body);
- this.editDiv.style.display='none';
- if (this.options.canEdit || this.options.canAdd) {
- this.startForm();
- this.createForm(this.form);
- } else {
- var button=this.createButton("Close");
+ this.menu=liveGrid.menu;\r
+ this.menu.options.dataMenuHandler=this.editMenu.bind(this);\r
+ this.menu.ignoreClicks();\r
+ RicoEditControls.atLoad();\r
+ this.createEditDiv();\r
+ this.saveMsg=$(liveGrid.tableId+'_savemsg');\r
+ Event.observe(document,"click", this.clearSaveMsg.bindAsEventListener(this), false);\r
+ this.TEerror=false;\r
+ this.extraMenuItems=new Array();\r
+ this.responseHandler=this.processResponse.bind(this);\r
+ },\r
+ \r
+ createEditDiv: function() {\r
+\r
+ // create editDiv (form)\r
+ \r
+ this.requestCount=1;\r
+ this.editDiv = this.grid.createDiv('edit',document.body);\r
+ this.editDiv.style.display='none';\r
+ if (this.options.canEdit || this.options.canAdd) {\r
+ this.startForm();\r
+ this.createForm(this.form);\r
+ } else {\r
+ var button=this.createButton("Close");\r
Event.observe(button,"click", this.cancelEdit.bindAsEventListener(this), false);
- this.createForm(this.editDiv);
- }
- this.editDivCreated=true;
- this.formPopup=new Rico.Popup({ignoreClicks:true},this.editDiv);
-
- // create responseDialog
-
- this.responseDialog = this.grid.createDiv('editResponse',document.body);
- this.responseDialog.style.display='none';
-
- var button = document.createElement('button');
- button.appendChild(document.createTextNode('OK'));
+ this.createForm(this.editDiv);\r
+ }\r
+ this.editDivCreated=true;\r
+ this.formPopup=new Rico.Popup({ignoreClicks:true},this.editDiv);\r
+\r
+ // create responseDialog\r
+ \r
+ this.responseDialog = this.grid.createDiv('editResponse',document.body);\r
+ this.responseDialog.style.display='none';\r
+ \r
+ var button = document.createElement('button');\r
+ button.appendChild(document.createTextNode('OK'));\r
button.onclick=this.ackResponse.bindAsEventListener(this);
this.responseDialog.appendChild(button);
-
- this.responseDiv = this.grid.createDiv('editResponseText',this.responseDialog);
-
- if (this.panelGroup) {
+\r
+ this.responseDiv = this.grid.createDiv('editResponseText',this.responseDialog);\r
+\r
+ if (this.panelGroup) {\r
Rico.writeDebugMsg("createEditDiv complete, requestCount="+this.requestCount);
- setTimeout(this.initPanelGroup.bind(this),50);
- }
- },
-
- initPanelGroup: function() {
- this.requestCount--;
+ setTimeout(this.initPanelGroup.bind(this),50);\r
+ }\r
+ },\r
+ \r
+ initPanelGroup: function() {\r
+ this.requestCount--;\r
Rico.writeDebugMsg("initPanelGroup: "+this.requestCount);
- if (this.requestCount>0) return;
- var wi=parseInt(this.options.panelWidth);
+ if (this.requestCount>0) return;\r
+ var wi=parseInt(this.options.panelWidth);\r
this.form.style.width=(wi+10)+'px';
- if (Prototype.Browser.WebKit) this.editDiv.style.display='block'; // this causes display to flash briefly
- this.options.bgColor = Rico.Color.createColorFromBackground(this.form);
- this.editDiv.style.display='none';
- this.options.panelHdrWidth=(Math.floor(wi / this.options.panels.length)-4)+'px';
- this.Accordion=new Rico.TabbedPanel(this.panelHdr.findAll(this.notEmpty), this.panelContent.findAll(this.notEmpty), this.options);
- },
-
- notEmpty: function(v) {
- return typeof(v)!='undefined';
- },
-
- startForm: function() {
- this.form = document.createElement('form');
+ if (Prototype.Browser.WebKit) this.editDiv.style.display='block'; // this causes display to flash briefly\r
+ this.options.bgColor = Rico.Color.createColorFromBackground(this.form);\r
+ this.editDiv.style.display='none';\r
+ this.options.panelHdrWidth=(Math.floor(wi / this.options.panels.length)-4)+'px';\r
+ this.Accordion=new Rico.TabbedPanel(this.panelHdr.findAll(this.notEmpty), this.panelContent.findAll(this.notEmpty), this.options);\r
+ },\r
+ \r
+ notEmpty: function(v) {\r
+ return typeof(v)!='undefined';\r
+ },\r
+ \r
+ startForm: function() {\r
+ this.form = document.createElement('form');\r
this.form.onsubmit=function() {return false;};
- this.editDiv.appendChild(this.form);
-
- var tab = document.createElement('table');
+ this.editDiv.appendChild(this.form);\r
+\r
+ var tab = document.createElement('table');\r
var row = tab.insertRow(-1);
var cell = row.insertCell(-1);
- var button=cell.appendChild(this.createButton("Save \t"+this.options.RecordName));
+ var button=cell.appendChild(this.createButton("Save \t"+this.options.RecordName));\r
Event.observe(button,"click", this.TESubmit.bindAsEventListener(this), false);
var cell = row.insertCell(-1);
- var button=cell.appendChild(this.createButton("Cancel"));
+ var button=cell.appendChild(this.createButton("Cancel"));\r
Event.observe(button,"click", this.cancelEdit.bindAsEventListener(this), false);
this.form.appendChild(tab);
-
- // hidden fields
+\r
+ // hidden fields\r
this.hiddenFields = document.createElement('div');
- this.hiddenFields.style.display='none';
- this.action = this.appendHiddenField(this.grid.tableId+'__action','');
- for (var i=0; i<this.grid.columns.length; i++) {
- var fldSpec=this.grid.columns[i].format;
- if (fldSpec && fldSpec.FormView && fldSpec.FormView=="hidden")
- this.appendHiddenField(fldSpec.FieldName,fldSpec.ColData);
- }
+ this.hiddenFields.style.display='none';\r
+ this.action = this.appendHiddenField(this.grid.tableId+'__action','');\r
+ for (var i=0; i<this.grid.columns.length; i++) {\r
+ var fldSpec=this.grid.columns[i].format;\r
+ if (fldSpec && fldSpec.FormView && fldSpec.FormView=="hidden")\r
+ this.appendHiddenField(fldSpec.FieldName,fldSpec.ColData);\r
+ }\r
this.form.appendChild(this.hiddenFields);
- },
-
- createButton: function(buttonLabel) {
- var button = document.createElement('button');
- buttonLabel=RicoTranslate.getPhrase(buttonLabel);
- button.innerHTML="<span style='text-decoration:underline;'>"+buttonLabel.charAt(0)+"</span>"+buttonLabel.substr(1);
- button.accessKey=buttonLabel.charAt(0);
+ },\r
+ \r
+ createButton: function(buttonLabel) {\r
+ var button = document.createElement('button');\r
+ buttonLabel=RicoTranslate.getPhrase(buttonLabel);\r
+ button.innerHTML="<span style='text-decoration:underline;'>"+buttonLabel.charAt(0)+"</span>"+buttonLabel.substr(1);\r
+ button.accessKey=buttonLabel.charAt(0);\r
return button;
- },
-
- createPanel: function(i) {
- var hasFields=false;
- for (var j=0; j<this.grid.columns.length; j++) {
- var fldSpec=this.grid.columns[j].format;
- if (!fldSpec) continue;
- if (!fldSpec.EntryType) continue
- if (fldSpec.EntryType=='H') continue;
- var panelIdx=fldSpec.panelIdx || 0;
- if (panelIdx==i) {
- hasFields=true;
- break;
- }
- }
- if (!hasFields) return false;
- this.panelHdr[i] = document.createElement('div');
- this.panelHdr[i].className='tabHeader';
+ },\r
+ \r
+ createPanel: function(i) {\r
+ var hasFields=false;\r
+ for (var j=0; j<this.grid.columns.length; j++) {\r
+ var fldSpec=this.grid.columns[j].format;\r
+ if (!fldSpec) continue;\r
+ if (!fldSpec.EntryType) continue\r
+ if (fldSpec.EntryType=='H') continue;\r
+ var panelIdx=fldSpec.panelIdx || 0;\r
+ if (panelIdx==i) {\r
+ hasFields=true;\r
+ break;\r
+ }\r
+ }\r
+ if (!hasFields) return false;\r
+ this.panelHdr[i] = document.createElement('div');\r
+ this.panelHdr[i].className='tabHeader';\r
this.panelHdr[i].innerHTML=this.options.panels[i];
this.panelHdrs.appendChild(this.panelHdr[i]);
this.panelContent[i] = document.createElement('div');
- this.panelContent[i].className='tabContent';
- this.panelContents.appendChild(this.panelContent[i]);
- return true;
- },
-
- createForm: function(parentDiv) {
- var tables=[];
- this.panelHdr=[];
- this.panelContent=[];
- if (this.options.panels) {
- this.panelGroup = document.createElement('div');
+ this.panelContent[i].className='tabContent';\r
+ this.panelContents.appendChild(this.panelContent[i]);\r
+ return true;\r
+ },\r
+ \r
+ createForm: function(parentDiv) {\r
+ var tables=[];\r
+ this.panelHdr=[];\r
+ this.panelContent=[];\r
+ if (this.options.panels) {\r
+ this.panelGroup = document.createElement('div');\r
this.panelGroup.className='tabPanelGroup';
- this.panelHdrs = document.createElement('div');
- this.panelGroup.appendChild(this.panelHdrs);
- this.panelContents = document.createElement('div');
+ this.panelHdrs = document.createElement('div');\r
+ this.panelGroup.appendChild(this.panelHdrs);\r
+ this.panelContents = document.createElement('div');\r
this.panelContents.className='tabContentContainer';
- this.panelGroup.appendChild(this.panelContents);
- parentDiv.appendChild(this.panelGroup);
- if (this.grid.direction=='rtl') {
- for (var i=this.options.panels.length-1; i>=0; i--)
- if (this.createPanel(i))
- tables[i]=this.createFormTable(this.panelContent[i],'tabContent');
- } else {
- for (var i=0; i<this.options.panels.length; i++)
- if (this.createPanel(i))
- tables[i]=this.createFormTable(this.panelContent[i],'tabContent');
- }
- parentDiv.appendChild(this.panelGroup);
- } else {
+ this.panelGroup.appendChild(this.panelContents);\r
+ parentDiv.appendChild(this.panelGroup);\r
+ if (this.grid.direction=='rtl') {\r
+ for (var i=this.options.panels.length-1; i>=0; i--)\r
+ if (this.createPanel(i))\r
+ tables[i]=this.createFormTable(this.panelContent[i],'tabContent');\r
+ } else {\r
+ for (var i=0; i<this.options.panels.length; i++)\r
+ if (this.createPanel(i))\r
+ tables[i]=this.createFormTable(this.panelContent[i],'tabContent');\r
+ }\r
+ parentDiv.appendChild(this.panelGroup);\r
+ } else {\r
var div=document.createElement('div');
- div.className='noTabContent';
- tables[0]=this.createFormTable(div);
- parentDiv.appendChild(div);
- }
- for (var i=0; i<this.grid.columns.length; i++) {
- var fldSpec=this.grid.columns[i].format;
- if (!fldSpec) continue;
- var panelIdx=fldSpec.panelIdx || 0;
- if (tables[panelIdx]) this.appendFormField(this.grid.columns[i],tables[panelIdx]);
- }
- },
-
- createFormTable: function(div) {
- var tab=document.createElement('table');
+ div.className='noTabContent';\r
+ tables[0]=this.createFormTable(div);\r
+ parentDiv.appendChild(div);\r
+ }\r
+ for (var i=0; i<this.grid.columns.length; i++) {\r
+ var fldSpec=this.grid.columns[i].format;\r
+ if (!fldSpec) continue;\r
+ var panelIdx=fldSpec.panelIdx || 0;\r
+ if (tables[panelIdx]) this.appendFormField(this.grid.columns[i],tables[panelIdx]);\r
+ }\r
+ },\r
+ \r
+ createFormTable: function(div) {\r
+ var tab=document.createElement('table');\r
tab.border=0;
div.appendChild(tab);
return tab;
- },
-
- appendHiddenField: function(name,value) {
- var field=RicoUtil.createFormField(this.hiddenFields,'input','hidden',name,name);
+ },\r
+ \r
+ appendHiddenField: function(name,value) {\r
+ var field=RicoUtil.createFormField(this.hiddenFields,'input','hidden',name,name);\r
field.value=value;
return field;
- },
-
- appendFormField: function(column, table) {
- if (!column.format.EntryType) return;
- if (column.format.EntryType=="H") return;
- if (column.format.FormView) return;
- Rico.writeDebugMsg('appendFormField: '+column.format.Hdg+' - '+column.format.EntryType);
- var row = table.insertRow(-1);
+ },\r
+ \r
+ appendFormField: function(column, table) {\r
+ if (!column.format.EntryType) return;\r
+ if (column.format.EntryType=="H") return;\r
+ if (column.format.FormView) return;\r
+ Rico.writeDebugMsg('appendFormField: '+column.format.Hdg+' - '+column.format.EntryType);\r
+ var row = table.insertRow(-1);\r
var hdr = row.insertCell(-1);
column.formLabel=hdr;
if (hdr.noWrap) hdr.noWrap=true;
- var entry = row.insertCell(-1);
+ var entry = row.insertCell(-1);\r
if (entry.noWrap) entry.noWrap=true;
- hdr.innerHTML=column.format.Hdg;
- hdr.className='ricoEditLabel';
- if (column.format.Help) {
- hdr.title=column.format.Help;
- hdr.className='ricoEditLabelWithHelp';
- }
- var field, name=column.format.FieldName;
- switch (column.format.EntryType) {
- case 'TA','tinyMCE':
- field=RicoUtil.createFormField(entry,'textarea',null,name);
- field.cols=column.format.TxtAreaCols;
- field.rows=column.format.TxtAreaRows;
- field.innerHTML=column.format.ColData;
- hdr.style.verticalAlign='top';
- break;
- case 'R':
- case 'RL':
- field=RicoUtil.createFormField(entry,'div',null,name);
- if (column.format.isNullable)
- this.addSelectOption(field,this.options.TableSelectNone,"(none)");
- this.selectValuesRequest(field,column.format);
- break;
- case 'N':
- field=RicoUtil.createFormField(entry,'select',null,name);
- if (column.format.isNullable)
- this.addSelectOption(field,this.options.TableSelectNone,"(none)");
- field.onchange=this.checkSelectNew.bindAsEventListener(this);
- this.selectValuesRequest(field,column.format);
- field=document.createElement('span');
- field.className='ricoEditLabel';
- field.id='labelnew__'+column.format.FieldName;
- field.innerHTML=' New value:';
- entry.appendChild(field);
- name='textnew__'+column.format.FieldName;
- field=RicoUtil.createFormField(entry,'input','text',name,name);
- break;
- case 'S':
- case 'SL':
- field=RicoUtil.createFormField(entry,'select',null,name);
- if (column.format.isNullable)
- this.addSelectOption(field,this.options.TableSelectNone,"(none)");
- this.selectValuesRequest(field,column.format);
- break;
- default:
- field=RicoUtil.createFormField(entry,'input','text',name,name);
- if (column.format.Length) {
- field.maxLength=column.format.Length;
- field.size=Math.min(column.format.Length, this.options.maxDisplayLen);
- }
- field.value=column.format.ColData;
- break;
- }
- if (field) {
- if (column.format.SelectCtl)
- RicoEditControls.applyTo(column,field);
- }
- },
-
- checkSelectNew: function(e) {
- this.updateSelectNew(Event.element(e));
- },
-
- updateSelectNew: function(SelObj) {
- var vis=(SelObj.value==this.options.TableSelectNew) ? "" : "hidden";
- $("labelnew__" + SelObj.id).style.visibility=vis
- $("textnew__" + SelObj.id).style.visibility=vis
- },
-
- selectValuesRequest: function(elem,fldSpec) {
- if (fldSpec.SelectValues) {
- var valueList=fldSpec.SelectValues.split(',');
- for (var i=0; i<valueList.length; i++)
- this.addSelectOption(elem,valueList[i],valueList[i],i);
- } else {
- this.requestCount++;
- var options={};
- Object.extend(options, this.grid.buffer.ajaxOptions);
+ hdr.innerHTML=column.format.Hdg;\r
+ hdr.className='ricoEditLabel';\r
+ if (column.format.Help) {\r
+ hdr.title=column.format.Help;\r
+ hdr.className='ricoEditLabelWithHelp';\r
+ }\r
+ var field, name=column.format.FieldName;\r
+ switch (column.format.EntryType) {\r
+ case 'TA','tinyMCE':\r
+ field=RicoUtil.createFormField(entry,'textarea',null,name);\r
+ field.cols=column.format.TxtAreaCols;\r
+ field.rows=column.format.TxtAreaRows;\r
+ field.innerHTML=column.format.ColData;\r
+ hdr.style.verticalAlign='top';\r
+ break;\r
+ case 'R':\r
+ case 'RL':\r
+ field=RicoUtil.createFormField(entry,'div',null,name);\r
+ if (column.format.isNullable)\r
+ this.addSelectOption(field,this.options.TableSelectNone,"(none)");\r
+ this.selectValuesRequest(field,column.format);\r
+ break;\r
+ case 'N':\r
+ field=RicoUtil.createFormField(entry,'select',null,name);\r
+ if (column.format.isNullable)\r
+ this.addSelectOption(field,this.options.TableSelectNone,"(none)");\r
+ field.onchange=this.checkSelectNew.bindAsEventListener(this);\r
+ this.selectValuesRequest(field,column.format);\r
+ field=document.createElement('span');\r
+ field.className='ricoEditLabel';\r
+ field.id='labelnew__'+column.format.FieldName;\r
+ field.innerHTML=' New value:';\r
+ entry.appendChild(field);\r
+ name='textnew__'+column.format.FieldName;\r
+ field=RicoUtil.createFormField(entry,'input','text',name,name);\r
+ break;\r
+ case 'S':\r
+ case 'SL':\r
+ field=RicoUtil.createFormField(entry,'select',null,name);\r
+ if (column.format.isNullable)\r
+ this.addSelectOption(field,this.options.TableSelectNone,"(none)");\r
+ this.selectValuesRequest(field,column.format);\r
+ break;\r
+ default:\r
+ field=RicoUtil.createFormField(entry,'input','text',name,name);\r
+ if (column.format.Length) {\r
+ field.maxLength=column.format.Length;\r
+ field.size=Math.min(column.format.Length, this.options.maxDisplayLen);\r
+ }\r
+ field.value=column.format.ColData;\r
+ break;\r
+ }\r
+ if (field) {\r
+ if (column.format.SelectCtl)\r
+ RicoEditControls.applyTo(column,field);\r
+ }\r
+ },\r
+ \r
+ checkSelectNew: function(e) {\r
+ this.updateSelectNew(Event.element(e));\r
+ },\r
+ \r
+ updateSelectNew: function(SelObj) {\r
+ var vis=(SelObj.value==this.options.TableSelectNew) ? "" : "hidden";\r
+ $("labelnew__" + SelObj.id).style.visibility=vis\r
+ $("textnew__" + SelObj.id).style.visibility=vis\r
+ },\r
+\r
+ selectValuesRequest: function(elem,fldSpec) {\r
+ if (fldSpec.SelectValues) {\r
+ var valueList=fldSpec.SelectValues.split(',');\r
+ for (var i=0; i<valueList.length; i++)\r
+ this.addSelectOption(elem,valueList[i],valueList[i],i);\r
+ } else {\r
+ this.requestCount++;\r
+ var options={};\r
+ Object.extend(options, this.grid.buffer.ajaxOptions);\r
options.parameters = 'id='+fldSpec.FieldName+'&offset=0&page_size=-1';
options.onComplete = this.selectValuesUpdate.bind(this);
new Ajax.Request(this.grid.buffer.dataSource, options);
Rico.writeDebugMsg("selectValuesRequest: "+options.parameters);
- }
- },
-
- selectValuesUpdate: function(request) {
+ }\r
+ },\r
+ \r
+ selectValuesUpdate: function(request) {\r
var response = request.responseXML.getElementsByTagName("ajax-response");
Rico.writeDebugMsg("selectValuesUpdate: "+request.status);
if (response == null || response.length != 1) return;
Rico.writeDebugMsg("Data provider returned an error:\n"+RicoUtil.getContentAsString(error[0],this.grid.buffer.isEncoded));
alert(RicoTranslate.getPhrase("The request returned an error")+":\n"+RicoUtil.getContentAsString(error[0],this.grid.buffer.isEncoded));
return null;
- }
- response=response.getElementsByTagName('response')[0];
+ }\r
+ response=response.getElementsByTagName('response')[0];\r
var id = response.getAttribute("id").slice(0,-8);
- var rowsElement = response.getElementsByTagName('rows')[0];
- var rows = this.grid.buffer.dom2jstable(rowsElement);
- var elem=$(id);
+ var rowsElement = response.getElementsByTagName('rows')[0];\r
+ var rows = this.grid.buffer.dom2jstable(rowsElement);\r
+ var elem=$(id);\r
//alert('selectValuesUpdate:'+id+' '+elem.tagName);
Rico.writeDebugMsg("selectValuesUpdate: id="+id+' rows='+rows.length);
- for (var i=0; i<rows.length; i++) {
- if (rows[i].length>0) {
- var c0=rows[i][0].content;
- var c1=(rows[i].length>1) ? rows[i][1].content : c0;
- this.addSelectOption(elem,c0,c1,i);
- }
- }
- if ($('textnew__'+id))
- this.addSelectOption(elem,this.options.TableSelectNew,"(new value)");
- if (this.panelGroup)
- setTimeout(this.initPanelGroup.bind(this),50);
- },
-
- addSelectOption: function(elem,value,text,idx) {
- switch (elem.tagName.toLowerCase()) {
- case 'div':
- var opt=RicoUtil.createFormField(elem,'input','radio',elem.id+'_'+idx,elem.id);
- opt.value=value;
- var lbl=document.createElement('label');
- lbl.innerHTML=text;
- lbl.htmlFor=opt.id;
- elem.appendChild(lbl);
- break;
- case 'select':
- var opt=document.createElement('option');
- opt.value=value;
- opt.text=text;
- //elem.options.add(opt);
- if (Prototype.Browser.IE)
- elem.add(opt);
- else
- elem.add(opt,null);
- break;
- }
- },
-
- clearSaveMsg: function() {
- if (this.saveMsg) this.saveMsg.innerHTML="";
- },
-
- addMenuItem: function(menuText,menuAction,enabled) {
- this.extraMenuItems.push({menuText:menuText,menuAction:menuAction,enabled:enabled});
- },
-
- editMenu: function(grid,r,c,onBlankRow) {
- this.clearSaveMsg();
- if (this.grid.buffer.sessionExpired==true || this.grid.buffer.startPos<0) return;
- this.rowIdx=r;
- var elemTitle=$('pageTitle');
- var pageTitle=elemTitle ? elemTitle.innerHTML : document.title;
- this.menu.addMenuHeading(pageTitle);
- for (var i=0; i<this.extraMenuItems.length; i++) {
- this.menu.addMenuItem(this.extraMenuItems[i].menuText,this.extraMenuItems[i].menuAction,this.extraMenuItems[i].enabled);
- }
- if (onBlankRow==false) {
- this.menu.addMenuItem("Edit\t this "+this.options.RecordName,this.editRecord.bindAsEventListener(this),this.options.canEdit);
- this.menu.addMenuItem("Delete\t this "+this.options.RecordName,this.deleteRecord.bindAsEventListener(this),this.options.canDelete);
- }
- this.menu.addMenuItem("Add\t new "+this.options.RecordName,this.addRecord.bindAsEventListener(this),this.options.canAdd);
- return true;
- },
-
- cancelEdit: function(e) {
- Event.stop(e);
- for (var i=0; i<this.grid.columns.length; i++)
- if (this.grid.columns[i].format && this.grid.columns[i].format.SelectCtl)
- RicoEditControls.close(this.grid.columns[i].format.SelectCtl);
- this.makeFormInvisible();
- this.grid.highlightEnabled=true;
- this.menu.cancelmenu();
- return false;
- },
-
- setField: function(fldSpec,fldvalue) {
- var e=$(fldSpec.FieldName);
- if (!e) return;
- //alert('setField: '+fldSpec.FieldName+'='+fldvalue);
- switch (e.tagName.toUpperCase()) {
- case 'DIV':
- var elems=e.getElementsByTagName('INPUT');
- var fldcode=this.getLookupValue(fldvalue)[0];
- for (var i=0; i<elems.length; i++)
- elems[i].checked=(elems[i].value==fldcode);
- break;
- case 'INPUT':
- if (fldSpec.SelectCtl)
- fldvalue=this.getLookupValue(fldvalue)[0];
- switch (e.type.toUpperCase()) {
- case 'HIDDEN':
- case 'TEXT':
- e.value=fldvalue;
- break;
- }
- break;
- case 'SELECT':
- var opts=e.options;
- var fldcode=this.getLookupValue(fldvalue)[0];
- //alert('setField SELECT: id='+e.id+'\nvalue='+fldcode+'\nopt cnt='+opts.length)
- for (var i=0; i<opts.length; i++) {
- if (opts[i].value==fldcode) {
- e.selectedIndex=i;
- break;
- }
- }
- if (fldSpec.EntryType=='N') {
- var txt=$('textnew__'+e.id);
- if (!txt) alert('Warning: unable to find id "textnew__'+e.id+'"');
- txt.value=fldvalue;
- if (e.selectedIndex!=i) e.selectedIndex=opts.length-1;
- this.updateSelectNew(e);
- }
- return;
- case 'TEXTAREA':
- e.value=fldvalue;
- if (fldSpec.EntryType=='tinyMCE' && typeof(tinyMCE)!='undefined' && this.initialized)
- tinyMCE.updateContent(e.id);
- return;
- }
- },
-
- getLookupValue: function(value) {
- if (typeof value!='string')
- return ['',''];
- else if (value.match(/<span\s+class=(['"]?)ricolookup\1>(.*)<\/span>/i))
- return [RegExp.$2,RegExp.leftContext];
- else
- return [value,value];
- },
-
- // use with care: Prototype 1.5 does not include disabled fields in the post-back
- setReadOnly: function(addFlag) {
- for (var i=0; i<this.grid.columns.length; i++) {
- var fldSpec=this.grid.columns[i].format;
- if (!fldSpec) continue;
- var e=$(fldSpec.FieldName);
- if (!e) continue;
- var ro=!fldSpec.Writeable || fldSpec.ReadOnly || (fldSpec.InsertOnly && !addFlag) || (fldSpec.UpdateOnly && addFlag);
- var color=ro ? this.options.readOnlyColor : '';
- switch (e.tagName.toUpperCase()) {
- case 'DIV':
- var elems=e.getElementsByTagName('INPUT');
- for (var j=0; j<elems.length; j++)
- elems[j].disabled=ro;
- break;
- case 'SELECT':
- if (fldSpec.EntryType=='N') {
- var txt=$('textnew__'+e.id);
- txt.disabled=ro;
- }
- e.disabled=ro;
- break;
- case 'TEXTAREA':
- case 'INPUT':
- e.readOnly=ro;
- e.style.color=color;
- if (fldSpec.selectIcon) fldSpec.selectIcon.style.display=ro ? 'none' : '';
- break;
- }
- }
- },
-
- hideResponse: function(msg) {
- this.responseDiv.innerHTML=msg;
- this.responseDialog.style.display='none';
- },
-
- showResponse: function() {
- var offset=Position.page(this.grid.outerDiv);
- offset[1]+=RicoUtil.docScrollTop();
- this.responseDialog.style.top=offset[1]+"px";
- this.responseDialog.style.display='';
- },
-
- processResponse: function() {
- var ch=this.responseDiv.childNodes;
- for (var i=ch.length-1; i>=0; i--) {
- if (ch[i].nodeType==1 && ch[i].nodeName!='P' && ch[i].nodeName!='DIV' && ch[i].nodeName!='BR')
- this.responseDiv.removeChild(ch[i]);
- }
- var responseText=this.responseDiv.innerHTML;
- if (responseText.toLowerCase().indexOf('error')==-1 && this.options.showSaveMsg!='full') {
- this.hideResponse('');
- this.grid.resetContents();
- this.grid.buffer.foundRowCount = false;
- this.grid.buffer.fetch(this.grid.lastRowPos || 0);
- if (this.saveMsg) this.saveMsg.innerHTML=' '+responseText.stripTags()+' ';
- }
- this.processCallback(this.options.onSubmitResponse);
- },
-
- processCallback: function(callback) {
- switch (typeof callback) {
- case 'string': eval(callback); break;
- case 'function': callback(); break;
- }
- },
-
- // called when ok pressed on error response message
- ackResponse: function() {
- this.hideResponse('');
- this.grid.highlightEnabled=true;
- },
-
- editRecord: function(e) {
- this.grid.highlightEnabled=false;
- this.menu.hidemenu();
- this.hideResponse('Saving...');
- this.grid.outerDiv.style.cursor = 'auto';
- this.action.value="upd";
- for (var i=0; i<this.grid.columns.length; i++) {
- if (this.grid.columns[i].format) {
- var v=this.grid.columns[i].getValue(this.rowIdx);
- this.setField(this.grid.columns[i].format,v);
- if (this.grid.columns[i].format.selectDesc)
- this.grid.columns[i].format.selectDesc.innerHTML=this.grid.columns[i]._format(v);
- }
- }
- this.setReadOnly(false);
- this.key=this.getKey();
- this.makeFormVisible(this.rowIdx);
- },
-
- addRecord: function() {
- this.menu.hidemenu();
- this.hideResponse('Saving...');
- this.setReadOnly(true);
- this.form.reset();
- this.action.value="ins";
- for (var i=0; i<this.grid.columns.length; i++) {
- if (this.grid.columns[i].format) {
- this.setField(this.grid.columns[i].format,this.grid.columns[i].format.ColData);
- if (this.grid.columns[i].format.SelectCtl)
- RicoEditControls.resetValue(this.grid.columns[i]);
- }
- }
- this.key='';
- this.makeFormVisible(-1);
- if (this.Accordion) this.Accordion.selectionSet.selectIndex(0);
- },
-
- drillDown: function(e,masterColNum,detailColNum) {
- var cell=Event.element(e || window.event);
- cell=RicoUtil.getParentByTagName(cell,'div','ricoLG_cell');
- if (!cell) return;
- this.grid.unhighlight();
- var idx=this.grid.winCellIndex(cell);
- this.grid.menuIdx=idx; // ensures selection gets cleared when menu is displayed
- this.grid.highlight(idx);
- var drillValue=this.grid.columns[masterColNum].getValue(idx.row);
- for (var i=3; i<arguments.length; i++)
- arguments[i].setDetailFilter(detailColNum,drillValue);
- return idx.row;
- },
-
- // set filter on a detail grid that is in a master-detail relationship
- setDetailFilter: function(colNumber,filterValue) {
- var c=this.grid.columns[colNumber];
- c.format.ColData=filterValue;
- c.setSystemFilter('EQ',filterValue);
- },
-
- makeFormVisible: function(row) {
- this.editDiv.style.display='block';
-
- // set left position
- var editWi=this.editDiv.offsetWidth;
- var odOffset=Position.page(this.grid.outerDiv);
- var winWi=RicoUtil.windowWidth();
- if (editWi+odOffset[0] > winWi)
- this.editDiv.style.left=(winWi-editWi)+'px';
- else
- this.editDiv.style.left=(odOffset[0]+1)+'px';
-
- // set top position
- var scrTop=RicoUtil.docScrollTop();
- var editHt=this.editDiv.offsetHeight;
- var newTop=odOffset[1]+this.grid.hdrHt+scrTop;
- var bottom=RicoUtil.windowHeight()+scrTop;
- if (row >= 0) {
- newTop+=(row+1)*this.grid.rowHeight;
- if (newTop+editHt>bottom) newTop-=(editHt+this.grid.rowHeight);
- } else {
- if (newTop+editHt>bottom) newTop=bottom-editHt;
- }
- this.processCallback(this.options.formOpen);
- this.formPopup.openPopup(null,Math.max(newTop,scrTop));
- this.editDiv.style.visibility='visible';
- if (this.initialized) return;
- for (i = 0; i < this.grid.columns.length; i++) {
- spec=this.grid.columns[i].format;
- if (!spec || !spec.EntryType || !spec.FieldName) continue;
- switch (spec.EntryType) {
- case 'tinyMCE':
- if (typeof tinyMCE!='undefined') tinyMCE.execCommand('mceAddControl', true, spec.FieldName);
- break;
- }
- }
- this.formPopup.openPopup(); // tinyMCE may have changed the dimensions of the form
- this.initialized=true;
- },
-
- makeFormInvisible: function() {
- this.editDiv.style.visibility='hidden';
- this.formPopup.closePopup();
- this.processCallback(this.options.formClose);
- },
-
- getConfirmDesc: function(rowIdx) {
- var desc=this.grid.columns[this.options.ConfirmDeleteCol].cell(rowIdx).innerHTML;
- desc=this.getLookupValue(desc)[1];
- return desc.stripTags();
- },
-
- deleteRecord: function() {
- this.menu.hidemenu();
- var desc;
- if (this.options.ConfirmDeleteCol < 0) {
- desc=RicoTranslate.getPhrase("this "+this.options.RecordName);
- } else {
- desc=this.getConfirmDesc(this.rowIdx);
- if (desc.length>50) desc=desc.substring(0,50)+'...';
- desc='\"' + desc + '\"'
- }
- if (!this.options.ConfirmDelete.valueOf || confirm(RicoTranslate.getPhrase("Are you sure you want to delete ") + desc + " ?")) {
- this.hideResponse('Deleting...');
- this.showResponse();
- var parms=this.action.name+"=del"+this.getKey();
- //alert(parms);
- new Ajax.Updater(this.responseDiv, window.location.pathname, {parameters:parms,onComplete:this.processResponse.bind(this)});
- }
- this.menu.cancelmenu();
- },
-
- getKey: function() {
- var key='';
- for (var i=0; i<this.grid.columns.length; i++) {
- if (this.grid.columns[i].format && this.grid.columns[i].format.isKey) {
- var value=this.grid.columns[i].getValue(this.rowIdx);
- value=this.getLookupValue(value)[0];
- key+='&_k'+i+'='+value;
- }
- }
- return key;
- },
-
- TESubmit: function(e) {
- var i,lbl,spec,elem,entrytype;
-
- if (!e) e=window.event;
- Event.stop(e);
-
- // check fields that are supposed to be non-blank
-
- for (i = 0; i < this.grid.columns.length; i++) {
- spec=this.grid.columns[i].format;
- if (!spec || !spec.EntryType || !spec.FieldName) continue;
- entrytype=spec.EntryType.charAt(0).toLowerCase();
- if (!entrytype.match(/d|i|b/)) continue;
- if (spec.isNullable==true && entrytype!='b') continue;
- elem=$(spec.FieldName);
- if (!elem) continue;
- //alert("nonblank check: " + spec.FieldName);
- if (elem.tagName.toLowerCase()!='input') continue;
- if (elem.type.toLowerCase()!='text') continue;
- if (elem.value.length == 0) {
- alert(RicoTranslate.getPhrase("Please enter\t a value for")+" \"" + this.grid.columns[i].formLabel.innerHTML + "\"");
- //setTimeout("FocusField(document." + this.form.name + "." + this.options.NonBlanks[i] + ")",2000);
- return false;
- }
- }
-
- // recheck any elements on the form with an onchange event
-
- var InputFields = this.form.getElementsByTagName("input");
- this.TEerror=false;
- for (i=0; i < InputFields.length; i++) {
- if (InputFields[i].type=="text" && InputFields[i].onchange) {
- InputFields[i].onchange();
- if (this.TEerror) return false;
- }
- }
- if (typeof tinyMCE!='undefined') tinyMCE.triggerSave();
- this.makeFormInvisible();
- this.showResponse();
- var parms=Form.serialize(this.form)+this.key
- Rico.writeDebugMsg("TESubmit:"+parms);
- new Ajax.Updater(this.responseDiv, window.location.pathname, {parameters:parms,onComplete:this.responseHandler});
- this.menu.cancelmenu();
- return false;
- },
-
- FocusField: function(elem) {
- elem.focus();
- elem.select();
- },
-
- TableEditCheckInt: function(TxtObj) {
- var val=TxtObj.value;
- if (val=='') return;
- if (val!=parseInt(val)) {
- alert(RicoTranslate.getPhrase("Please enter\t an integer value for")+" \"" + $("lbl_"+TxtObj.id).innerHTML + "\"");
- setTimeout(this.FocusField.bind(this,TxtObj),0);
- this.TEerror=true;
- }
- },
-
- TableEditCheckPosInt: function(TxtObj) {
- var val=TxtObj.value;
- if (val=='') return;
- if (val!=parseInt(val) || val<0) {
- alert(RicoTranslate.getPhrase("Please enter\t a positive integer value for")+" \"" + $("lbl_"+TxtObj.id).innerHTML + "\"");
- setTimeout(this.FocusField.bind(this,TxtObj),0);
- this.TEerror=true;
- }
- }
-}
-
-
-// Registers custom popup widgets to fill in a text box (e.g. ricoCalendar and ricoTree)
-//
-// Custom widget must implement:
-// open() method (make control visible)
-// close() method (hide control)
-// container property (div element that contains the control)
-// id property (uniquely identifies the widget class)
-//
-// widget calls returnValue method to return a value to the caller
-//
-// this object handles clicks on the control's icon and positions the control appropriately.
-var RicoEditControls = {
- widgetList:$H(),
- elemList:$H(),
-
- register: function(widget, imgsrc) {
- var tmp={};
- tmp[widget.id]={imgsrc:imgsrc, widget:widget, currentEl:''};
- this.widgetList=this.widgetList.merge(tmp);
- widget.returnValue=this.setValue.bind(this,widget);
- Rico.writeDebugMsg("RicoEditControls.register:"+widget.id);
- },
-
- atLoad: function() {
- var k=this.widgetList.keys();
- for (var i=0; i<k.length; i++) {
- var w=this.widgetList[k[i]].widget;
- if (w.atLoad) w.atLoad();
- }
- },
-
- applyTo: function(column,inputCtl) {
- var wInfo=this.widgetList[column.format.SelectCtl];
- if (!wInfo) return null;
- Rico.writeDebugMsg('RicoEditControls.applyTo: '+column.displayName+' : '+column.format.SelectCtl);
+ for (var i=0; i<rows.length; i++) {\r
+ if (rows[i].length>0) {\r
+ var c0=rows[i][0].content;\r
+ var c1=(rows[i].length>1) ? rows[i][1].content : c0;\r
+ this.addSelectOption(elem,c0,c1,i);\r
+ }\r
+ }
+ if ($('textnew__'+id))\r
+ this.addSelectOption(elem,this.options.TableSelectNew,"(new value)");\r
+ if (this.panelGroup)\r
+ setTimeout(this.initPanelGroup.bind(this),50);\r
+ },\r
+ \r
+ addSelectOption: function(elem,value,text,idx) {\r
+ switch (elem.tagName.toLowerCase()) {\r
+ case 'div':\r
+ var opt=RicoUtil.createFormField(elem,'input','radio',elem.id+'_'+idx,elem.id);\r
+ opt.value=value;\r
+ var lbl=document.createElement('label');\r
+ lbl.innerHTML=text;\r
+ lbl.htmlFor=opt.id;\r
+ elem.appendChild(lbl);\r
+ break;\r
+ case 'select':\r
+ var opt=document.createElement('option');\r
+ opt.value=value;\r
+ opt.text=text;\r
+ //elem.options.add(opt);\r
+ if (Prototype.Browser.IE)\r
+ elem.add(opt);\r
+ else\r
+ elem.add(opt,null);\r
+ break;\r
+ }\r
+ },\r
+ \r
+ clearSaveMsg: function() {\r
+ if (this.saveMsg) this.saveMsg.innerHTML="";\r
+ },\r
+ \r
+ addMenuItem: function(menuText,menuAction,enabled) {\r
+ this.extraMenuItems.push({menuText:menuText,menuAction:menuAction,enabled:enabled});\r
+ },\r
+\r
+ editMenu: function(grid,r,c,onBlankRow) {\r
+ this.clearSaveMsg();\r
+ if (this.grid.buffer.sessionExpired==true || this.grid.buffer.startPos<0) return;\r
+ this.rowIdx=r;\r
+ var elemTitle=$('pageTitle');\r
+ var pageTitle=elemTitle ? elemTitle.innerHTML : document.title;\r
+ this.menu.addMenuHeading(pageTitle);\r
+ for (var i=0; i<this.extraMenuItems.length; i++) {\r
+ this.menu.addMenuItem(this.extraMenuItems[i].menuText,this.extraMenuItems[i].menuAction,this.extraMenuItems[i].enabled);\r
+ }\r
+ if (onBlankRow==false) {\r
+ this.menu.addMenuItem("Edit\t this "+this.options.RecordName,this.editRecord.bindAsEventListener(this),this.options.canEdit);\r
+ this.menu.addMenuItem("Delete\t this "+this.options.RecordName,this.deleteRecord.bindAsEventListener(this),this.options.canDelete);\r
+ }\r
+ this.menu.addMenuItem("Add\t new "+this.options.RecordName,this.addRecord.bindAsEventListener(this),this.options.canAdd);\r
+ return true;\r
+ },\r
+\r
+ cancelEdit: function(e) {\r
+ Event.stop(e);\r
+ for (var i=0; i<this.grid.columns.length; i++)\r
+ if (this.grid.columns[i].format && this.grid.columns[i].format.SelectCtl)\r
+ RicoEditControls.close(this.grid.columns[i].format.SelectCtl);\r
+ this.makeFormInvisible();\r
+ this.grid.highlightEnabled=true;\r
+ this.menu.cancelmenu();\r
+ return false;\r
+ },\r
+\r
+ setField: function(fldSpec,fldvalue) {\r
+ var e=$(fldSpec.FieldName);\r
+ if (!e) return;\r
+ //alert('setField: '+fldSpec.FieldName+'='+fldvalue);\r
+ switch (e.tagName.toUpperCase()) {\r
+ case 'DIV':\r
+ var elems=e.getElementsByTagName('INPUT');\r
+ var fldcode=this.getLookupValue(fldvalue)[0];\r
+ for (var i=0; i<elems.length; i++)\r
+ elems[i].checked=(elems[i].value==fldcode);\r
+ break;\r
+ case 'INPUT':\r
+ if (fldSpec.SelectCtl)\r
+ fldvalue=this.getLookupValue(fldvalue)[0];\r
+ switch (e.type.toUpperCase()) {\r
+ case 'HIDDEN':\r
+ case 'TEXT':\r
+ e.value=fldvalue;\r
+ break;\r
+ }\r
+ break;\r
+ case 'SELECT':\r
+ var opts=e.options;\r
+ var fldcode=this.getLookupValue(fldvalue)[0];\r
+ //alert('setField SELECT: id='+e.id+'\nvalue='+fldcode+'\nopt cnt='+opts.length)\r
+ for (var i=0; i<opts.length; i++) {\r
+ if (opts[i].value==fldcode) {\r
+ e.selectedIndex=i;\r
+ break;\r
+ }\r
+ }\r
+ if (fldSpec.EntryType=='N') {\r
+ var txt=$('textnew__'+e.id);\r
+ if (!txt) alert('Warning: unable to find id "textnew__'+e.id+'"');\r
+ txt.value=fldvalue;\r
+ if (e.selectedIndex!=i) e.selectedIndex=opts.length-1;\r
+ this.updateSelectNew(e);\r
+ }\r
+ return;\r
+ case 'TEXTAREA':\r
+ e.value=fldvalue;\r
+ if (fldSpec.EntryType=='tinyMCE' && typeof(tinyMCE)!='undefined' && this.initialized)\r
+ tinyMCE.updateContent(e.id);\r
+ return;\r
+ }\r
+ },\r
+ \r
+ getLookupValue: function(value) {\r
+ if (typeof value!='string')\r
+ return ['',''];\r
+ else if (value.match(/<span\s+class=(['"]?)ricolookup\1>(.*)<\/span>/i))\r
+ return [RegExp.$2,RegExp.leftContext];\r
+ else\r
+ return [value,value];\r
+ },\r
+ \r
+ // use with care: Prototype 1.5 does not include disabled fields in the post-back\r
+ setReadOnly: function(addFlag) {\r
+ for (var i=0; i<this.grid.columns.length; i++) {\r
+ var fldSpec=this.grid.columns[i].format;\r
+ if (!fldSpec) continue;\r
+ var e=$(fldSpec.FieldName);\r
+ if (!e) continue;\r
+ var ro=!fldSpec.Writeable || fldSpec.ReadOnly || (fldSpec.InsertOnly && !addFlag) || (fldSpec.UpdateOnly && addFlag);\r
+ var color=ro ? this.options.readOnlyColor : '';\r
+ switch (e.tagName.toUpperCase()) {\r
+ case 'DIV':\r
+ var elems=e.getElementsByTagName('INPUT');\r
+ for (var j=0; j<elems.length; j++)\r
+ elems[j].disabled=ro;\r
+ break;\r
+ case 'SELECT':\r
+ if (fldSpec.EntryType=='N') {\r
+ var txt=$('textnew__'+e.id);\r
+ txt.disabled=ro;\r
+ }\r
+ e.disabled=ro;\r
+ break;\r
+ case 'TEXTAREA':\r
+ case 'INPUT':\r
+ e.readOnly=ro;\r
+ e.style.color=color;\r
+ if (fldSpec.selectIcon) fldSpec.selectIcon.style.display=ro ? 'none' : '';\r
+ break;\r
+ }\r
+ }\r
+ },\r
+ \r
+ hideResponse: function(msg) {\r
+ this.responseDiv.innerHTML=msg;\r
+ this.responseDialog.style.display='none';\r
+ },\r
+ \r
+ showResponse: function() {\r
+ var offset=Position.page(this.grid.outerDiv);\r
+ offset[1]+=RicoUtil.docScrollTop();\r
+ this.responseDialog.style.top=offset[1]+"px";\r
+ this.responseDialog.style.display='';\r
+ },\r
+ \r
+ processResponse: function() {\r
+ var ch=this.responseDiv.childNodes;\r
+ for (var i=ch.length-1; i>=0; i--) {\r
+ if (ch[i].nodeType==1 && ch[i].nodeName!='P' && ch[i].nodeName!='DIV' && ch[i].nodeName!='BR')\r
+ this.responseDiv.removeChild(ch[i]);\r
+ }\r
+ var responseText=this.responseDiv.innerHTML;\r
+ if (responseText.toLowerCase().indexOf('error')==-1 && this.options.showSaveMsg!='full') {\r
+ this.hideResponse('');\r
+ this.grid.resetContents();\r
+ this.grid.buffer.foundRowCount = false;\r
+ this.grid.buffer.fetch(this.grid.lastRowPos || 0);\r
+ if (this.saveMsg) this.saveMsg.innerHTML=' '+responseText.stripTags()+' ';\r
+ }\r
+ this.processCallback(this.options.onSubmitResponse);\r
+ },\r
+ \r
+ processCallback: function(callback) {\r
+ switch (typeof callback) {\r
+ case 'string': eval(callback); break;\r
+ case 'function': callback(); break;\r
+ }\r
+ },\r
+ \r
+ // called when ok pressed on error response message\r
+ ackResponse: function() {\r
+ this.hideResponse('');\r
+ this.grid.highlightEnabled=true;\r
+ },\r
+\r
+ editRecord: function(e) {\r
+ this.grid.highlightEnabled=false;\r
+ this.menu.hidemenu();\r
+ this.hideResponse('Saving...');\r
+ this.grid.outerDiv.style.cursor = 'auto';\r
+ this.action.value="upd";\r
+ for (var i=0; i<this.grid.columns.length; i++) {\r
+ if (this.grid.columns[i].format) {\r
+ var v=this.grid.columns[i].getValue(this.rowIdx);\r
+ this.setField(this.grid.columns[i].format,v);\r
+ if (this.grid.columns[i].format.selectDesc)\r
+ this.grid.columns[i].format.selectDesc.innerHTML=this.grid.columns[i]._format(v);\r
+ }\r
+ }\r
+ this.setReadOnly(false);\r
+ this.key=this.getKey();\r
+ this.makeFormVisible(this.rowIdx);\r
+ },\r
+\r
+ addRecord: function() {\r
+ this.menu.hidemenu();\r
+ this.hideResponse('Saving...');\r
+ this.setReadOnly(true);\r
+ this.form.reset();\r
+ this.action.value="ins";\r
+ for (var i=0; i<this.grid.columns.length; i++) {\r
+ if (this.grid.columns[i].format) {\r
+ this.setField(this.grid.columns[i].format,this.grid.columns[i].format.ColData);\r
+ if (this.grid.columns[i].format.SelectCtl)\r
+ RicoEditControls.resetValue(this.grid.columns[i]);\r
+ }\r
+ }\r
+ this.key='';\r
+ this.makeFormVisible(-1);\r
+ if (this.Accordion) this.Accordion.selectionSet.selectIndex(0);\r
+ },\r
+ \r
+ drillDown: function(e,masterColNum,detailColNum) {\r
+ var cell=Event.element(e || window.event);\r
+ cell=RicoUtil.getParentByTagName(cell,'div','ricoLG_cell');\r
+ if (!cell) return;\r
+ this.grid.unhighlight();\r
+ var idx=this.grid.winCellIndex(cell);\r
+ this.grid.menuIdx=idx; // ensures selection gets cleared when menu is displayed\r
+ this.grid.highlight(idx);\r
+ var drillValue=this.grid.columns[masterColNum].getValue(idx.row);\r
+ for (var i=3; i<arguments.length; i++)\r
+ arguments[i].setDetailFilter(detailColNum,drillValue);\r
+ return idx.row;\r
+ },\r
+ \r
+ // set filter on a detail grid that is in a master-detail relationship\r
+ setDetailFilter: function(colNumber,filterValue) {\r
+ var c=this.grid.columns[colNumber];\r
+ c.format.ColData=filterValue;\r
+ c.setSystemFilter('EQ',filterValue);\r
+ },\r
+ \r
+ makeFormVisible: function(row) {\r
+ this.editDiv.style.display='block';\r
+\r
+ // set left position\r
+ var editWi=this.editDiv.offsetWidth;\r
+ var odOffset=Position.page(this.grid.outerDiv);\r
+ var winWi=RicoUtil.windowWidth();\r
+ if (editWi+odOffset[0] > winWi)\r
+ this.editDiv.style.left=(winWi-editWi)+'px';\r
+ else\r
+ this.editDiv.style.left=(odOffset[0]+1)+'px';\r
+\r
+ // set top position\r
+ var scrTop=RicoUtil.docScrollTop();\r
+ var editHt=this.editDiv.offsetHeight;\r
+ var newTop=odOffset[1]+this.grid.hdrHt+scrTop;\r
+ var bottom=RicoUtil.windowHeight()+scrTop;\r
+ if (row >= 0) {\r
+ newTop+=(row+1)*this.grid.rowHeight;\r
+ if (newTop+editHt>bottom) newTop-=(editHt+this.grid.rowHeight);\r
+ } else {\r
+ if (newTop+editHt>bottom) newTop=bottom-editHt;\r
+ }\r
+ this.processCallback(this.options.formOpen);\r
+ this.formPopup.openPopup(null,Math.max(newTop,scrTop));\r
+ this.editDiv.style.visibility='visible';\r
+ if (this.initialized) return;\r
+ for (i = 0; i < this.grid.columns.length; i++) {\r
+ spec=this.grid.columns[i].format;\r
+ if (!spec || !spec.EntryType || !spec.FieldName) continue;\r
+ switch (spec.EntryType) {\r
+ case 'tinyMCE':\r
+ if (typeof tinyMCE!='undefined') tinyMCE.execCommand('mceAddControl', true, spec.FieldName);\r
+ break;\r
+ }\r
+ }\r
+ this.formPopup.openPopup(); // tinyMCE may have changed the dimensions of the form\r
+ this.initialized=true;\r
+ },\r
+\r
+ makeFormInvisible: function() {\r
+ this.editDiv.style.visibility='hidden';\r
+ this.formPopup.closePopup();\r
+ this.processCallback(this.options.formClose);\r
+ },\r
+ \r
+ getConfirmDesc: function(rowIdx) {\r
+ var desc=this.grid.columns[this.options.ConfirmDeleteCol].cell(rowIdx).innerHTML;\r
+ desc=this.getLookupValue(desc)[1];\r
+ return desc.stripTags();\r
+ },\r
+\r
+ deleteRecord: function() {\r
+ this.menu.hidemenu();\r
+ var desc;\r
+ if (this.options.ConfirmDeleteCol < 0) {\r
+ desc=RicoTranslate.getPhrase("this "+this.options.RecordName);\r
+ } else {\r
+ desc=this.getConfirmDesc(this.rowIdx);\r
+ if (desc.length>50) desc=desc.substring(0,50)+'...';\r
+ desc='\"' + desc + '\"'\r
+ }\r
+ if (!this.options.ConfirmDelete.valueOf || confirm(RicoTranslate.getPhrase("Are you sure you want to delete ") + desc + " ?")) {\r
+ this.hideResponse('Deleting...');\r
+ this.showResponse();\r
+ var parms=this.action.name+"=del"+this.getKey();\r
+ //alert(parms);\r
+ new Ajax.Updater(this.responseDiv, window.location.pathname, {parameters:parms,onComplete:this.processResponse.bind(this)});\r
+ }\r
+ this.menu.cancelmenu();\r
+ },\r
+ \r
+ getKey: function() {\r
+ var key='';\r
+ for (var i=0; i<this.grid.columns.length; i++) {\r
+ if (this.grid.columns[i].format && this.grid.columns[i].format.isKey) {\r
+ var value=this.grid.columns[i].getValue(this.rowIdx);\r
+ value=this.getLookupValue(value)[0];\r
+ key+='&_k'+i+'='+value;\r
+ }\r
+ }\r
+ return key;\r
+ },\r
+\r
+ TESubmit: function(e) {\r
+ var i,lbl,spec,elem,entrytype;\r
+ \r
+ if (!e) e=window.event;\r
+ Event.stop(e);\r
+\r
+ // check fields that are supposed to be non-blank\r
+\r
+ for (i = 0; i < this.grid.columns.length; i++) {\r
+ spec=this.grid.columns[i].format;\r
+ if (!spec || !spec.EntryType || !spec.FieldName) continue;\r
+ entrytype=spec.EntryType.charAt(0).toLowerCase();\r
+ if (!entrytype.match(/d|i|b/)) continue;\r
+ if (spec.isNullable==true && entrytype!='b') continue;\r
+ elem=$(spec.FieldName);\r
+ if (!elem) continue;\r
+ //alert("nonblank check: " + spec.FieldName);\r
+ if (elem.tagName.toLowerCase()!='input') continue;\r
+ if (elem.type.toLowerCase()!='text') continue;\r
+ if (elem.value.length == 0) {\r
+ alert(RicoTranslate.getPhrase("Please enter\t a value for")+" \"" + this.grid.columns[i].formLabel.innerHTML + "\"");\r
+ //setTimeout("FocusField(document." + this.form.name + "." + this.options.NonBlanks[i] + ")",2000);\r
+ return false;\r
+ }\r
+ }\r
+\r
+ // recheck any elements on the form with an onchange event\r
+\r
+ var InputFields = this.form.getElementsByTagName("input");\r
+ this.TEerror=false;\r
+ for (i=0; i < InputFields.length; i++) {\r
+ if (InputFields[i].type=="text" && InputFields[i].onchange) {\r
+ InputFields[i].onchange();\r
+ if (this.TEerror) return false;\r
+ }\r
+ }\r
+ if (typeof tinyMCE!='undefined') tinyMCE.triggerSave();\r
+ this.makeFormInvisible();\r
+ this.showResponse();\r
+ var parms=Form.serialize(this.form)+this.key\r
+ Rico.writeDebugMsg("TESubmit:"+parms);\r
+ new Ajax.Updater(this.responseDiv, window.location.pathname, {parameters:parms,onComplete:this.responseHandler});\r
+ this.menu.cancelmenu();\r
+ return false;\r
+ },\r
+ \r
+ FocusField: function(elem) {\r
+ elem.focus();\r
+ elem.select();\r
+ },\r
+\r
+ TableEditCheckInt: function(TxtObj) {\r
+ var val=TxtObj.value;\r
+ if (val=='') return;\r
+ if (val!=parseInt(val)) {\r
+ alert(RicoTranslate.getPhrase("Please enter\t an integer value for")+" \"" + $("lbl_"+TxtObj.id).innerHTML + "\"");\r
+ setTimeout(this.FocusField.bind(this,TxtObj),0);\r
+ this.TEerror=true;\r
+ }\r
+ },\r
+\r
+ TableEditCheckPosInt: function(TxtObj) {\r
+ var val=TxtObj.value;\r
+ if (val=='') return;\r
+ if (val!=parseInt(val) || val<0) {\r
+ alert(RicoTranslate.getPhrase("Please enter\t a positive integer value for")+" \"" + $("lbl_"+TxtObj.id).innerHTML + "\"");\r
+ setTimeout(this.FocusField.bind(this,TxtObj),0);\r
+ this.TEerror=true;\r
+ }\r
+ }\r
+}\r
+\r
+\r
+// Registers custom popup widgets to fill in a text box (e.g. ricoCalendar and ricoTree)\r
+//\r
+// Custom widget must implement:\r
+// open() method (make control visible)\r
+// close() method (hide control)\r
+// container property (div element that contains the control)\r
+// id property (uniquely identifies the widget class)\r
+//\r
+// widget calls returnValue method to return a value to the caller\r
+//\r
+// this object handles clicks on the control's icon and positions the control appropriately.\r
+var RicoEditControls = {\r
+ widgetList:$H(),\r
+ elemList:$H(),\r
+ \r
+ register: function(widget, imgsrc) {\r
+ var tmp={};\r
+ tmp[widget.id]={imgsrc:imgsrc, widget:widget, currentEl:''};\r
+ this.widgetList=this.widgetList.merge(tmp);\r
+ widget.returnValue=this.setValue.bind(this,widget);\r
+ Rico.writeDebugMsg("RicoEditControls.register:"+widget.id);\r
+ },\r
+ \r
+ atLoad: function() {\r
+ var k=this.widgetList.keys();\r
+ for (var i=0; i<k.length; i++) {\r
+ var w=this.widgetList[k[i]].widget;\r
+ if (w.atLoad) w.atLoad();\r
+ }\r
+ },\r
+ \r
+ applyTo: function(column,inputCtl) {\r
+ var wInfo=this.widgetList[column.format.SelectCtl];\r
+ if (!wInfo) return null;\r
+ Rico.writeDebugMsg('RicoEditControls.applyTo: '+column.displayName+' : '+column.format.SelectCtl);\r
var descSpan = document.createElement('span');
var newimg = document.createElement('img');
newimg.style.paddingLeft='4px';
- newimg.style.cursor='pointer';
+ newimg.style.cursor='pointer';\r
newimg.align='top';
- newimg.src=wInfo.imgsrc;
- newimg.id=this.imgId(column.format.FieldName);
- newimg.onclick=this.processClick.bindAsEventListener(this);
+ newimg.src=wInfo.imgsrc;\r
+ newimg.id=this.imgId(column.format.FieldName);\r
+ newimg.onclick=this.processClick.bindAsEventListener(this);\r
inputCtl.parentNode.appendChild(descSpan);
inputCtl.parentNode.appendChild(newimg);
- inputCtl.style.display='none'; // comment out this line for debugging
- var tmp=new Object();
- tmp[newimg.id]={descSpan:descSpan, inputCtl:inputCtl, widget:wInfo.widget, listObj:wInfo, column:column};
- this.elemList=this.elemList.merge(tmp);
- column.format.selectIcon=newimg;
- column.format.selectDesc=descSpan;
- },
-
- processClick: function(e) {
- var elem=Event.element(e);
- var el=this.elemList[elem.id];
- if (!el) return;
- if (el.listObj.currentEl==elem.id && el.widget.container.style.display!='none') {
- el.widget.close();
- el.listObj.currentEl='';
- } else {
- el.listObj.currentEl=elem.id;
- Rico.writeDebugMsg('RicoEditControls.processClick: '+el.widget.id+' : '+el.inputCtl.value);
- RicoUtil.positionCtlOverIcon(el.widget.container,elem);
- el.widget.open(el.inputCtl.value);
- }
- },
-
- imgId: function(fieldname) {
- return 'icon_'+fieldname;
- },
-
- resetValue: function(column) {
- var el=this.elemList[this.imgId(column.format.FieldName)];
- if (!el) return;
- el.inputCtl.value=column.format.ColData;
- el.descSpan.innerHTML=column._format(column.format.ColData);
- },
-
- setValue: function(widget,newVal,newDesc) {
- var wInfo=this.widgetList[widget.id];
- if (!wInfo) return null;
- var id=wInfo.currentEl;
- if (!id) return null;
- var el=this.elemList[id];
- if (!el) return null;
- el.inputCtl.value=newVal;
- if (!newDesc) newDesc=el.column._format(newVal);
- el.descSpan.innerHTML=newDesc;
- //alert(widget.id+':'+id+':'+el.inputCtl.id+':'+el.inputCtl.value+':'+newDesc);
- },
-
- close: function(id) {
- var wInfo=this.widgetList[id];
- if (!wInfo) return;
- if (wInfo.widget.container.style.display!='none')
- wInfo.widget.close();
- }
-}
-
+ inputCtl.style.display='none'; // comment out this line for debugging\r
+ var tmp=new Object();\r
+ tmp[newimg.id]={descSpan:descSpan, inputCtl:inputCtl, widget:wInfo.widget, listObj:wInfo, column:column};\r
+ this.elemList=this.elemList.merge(tmp);\r
+ column.format.selectIcon=newimg;\r
+ column.format.selectDesc=descSpan;\r
+ },\r
+\r
+ processClick: function(e) {\r
+ var elem=Event.element(e);\r
+ var el=this.elemList[elem.id];\r
+ if (!el) return;\r
+ if (el.listObj.currentEl==elem.id && el.widget.container.style.display!='none') {\r
+ el.widget.close();\r
+ el.listObj.currentEl='';\r
+ } else {\r
+ el.listObj.currentEl=elem.id;\r
+ Rico.writeDebugMsg('RicoEditControls.processClick: '+el.widget.id+' : '+el.inputCtl.value);\r
+ RicoUtil.positionCtlOverIcon(el.widget.container,elem);\r
+ el.widget.open(el.inputCtl.value);\r
+ }\r
+ },\r
+ \r
+ imgId: function(fieldname) {\r
+ return 'icon_'+fieldname;\r
+ },\r
+ \r
+ resetValue: function(column) {\r
+ var el=this.elemList[this.imgId(column.format.FieldName)];\r
+ if (!el) return;\r
+ el.inputCtl.value=column.format.ColData;\r
+ el.descSpan.innerHTML=column._format(column.format.ColData);\r
+ },\r
+ \r
+ setValue: function(widget,newVal,newDesc) {\r
+ var wInfo=this.widgetList[widget.id];\r
+ if (!wInfo) return null;\r
+ var id=wInfo.currentEl;\r
+ if (!id) return null;\r
+ var el=this.elemList[id];\r
+ if (!el) return null;\r
+ el.inputCtl.value=newVal;\r
+ if (!newDesc) newDesc=el.column._format(newVal);\r
+ el.descSpan.innerHTML=newDesc;\r
+ //alert(widget.id+':'+id+':'+el.inputCtl.id+':'+el.inputCtl.value+':'+newDesc);\r
+ },\r
+ \r
+ close: function(id) {\r
+ var wInfo=this.widgetList[id];\r
+ if (!wInfo) return;\r
+ if (wInfo.widget.container.style.display!='none')\r
+ wInfo.widget.close();\r
+ }\r
+}\r
+\r
Rico.includeLoaded('ricoLiveGridForms.js');
-if(typeof Rico=='undefined')
- throw("GridMenu requires the Rico JavaScript framework");
-
-
-/**
- * Standard menu for LiveGrid
- */
+if(typeof Rico=='undefined')\r
+ throw("GridMenu requires the Rico JavaScript framework");\r
+\r
+\r
+/**\r
+ * Standard menu for LiveGrid\r
+ */\r
Rico.GridMenu = Class.create();
Rico.GridMenu.prototype = {
initialize: function(options) {
- this.options = {
- width : '20em',
- dataMenuHandler : null // put custom items on the menu
- };
- Object.extend(this.options, options || {});
- Object.extend(this, new Rico.Menu(this.options));
- this.sortmenu = new Rico.Menu(this.options);
- this.filtermenu = new Rico.Menu(this.options);
- this.exportmenu = new Rico.Menu(this.options);
- this.hideshowmenu = new Rico.Menu(this.options);
- this.createDiv();
- this.sortmenu.createDiv();
- this.filtermenu.createDiv();
- this.exportmenu.createDiv();
- this.hideshowmenu.createDiv();
-},
-
-// Build context menu for grid
-buildGridMenu: function(r,c) {
- this.clearMenu();
- var totrows=this.liveGrid.buffer.totalRows;
- var onBlankRow=r >= totrows;
- var column=this.liveGrid.columns[c];
- if (this.options.dataMenuHandler) {
- var showMenu=this.options.dataMenuHandler(this.liveGrid,r,c,onBlankRow);
- if (!showMenu) return false;
- }
-
- // menu items for sorting
- if (column.sortable && totrows>0) {
- this.sortmenu.clearMenu();
- this.addSubMenuItem(RicoTranslate.getPhrase("Sort by")+": "+column.displayName, this.sortmenu, false);
- this.sortmenu.addMenuItem("Ascending", column.sortAsc.bind(column), true);
- this.sortmenu.addMenuItem("Descending", column.sortDesc.bind(column), true);
- }
-
- // menu items for filtering
- if (column.canFilter() && (!onBlankRow || column.filterType == Rico.TableColumn.USERFILTER)) {
- this.filtermenu.clearMenu();
- this.addSubMenuItem(RicoTranslate.getPhrase("Filter by")+": "+column.displayName, this.filtermenu, false);
- column.userFilter=column.getValue(r);
- if (column.filterType == Rico.TableColumn.USERFILTER) {
- this.filtermenu.addMenuItem("Remove filter", column.setUnfiltered.bind(column), true);
- this.filtermenu.addMenuItem("Refresh", this.liveGrid.filterHandler.bind(this.liveGrid), true);
- if (column.filterOp=='LIKE')
- this.filtermenu.addMenuItem("Change keyword...", column.setFilterKW.bind(column), true);
- if (column.filterOp=='NE' && !onBlankRow)
- this.filtermenu.addMenuItem("Exclude this value also", column.addFilterNE.bind(column), true);
- } else if (!onBlankRow) {
- this.filtermenu.addMenuItem("Include only this value", column.setFilterEQ.bind(column), true);
- this.filtermenu.addMenuItem("Greater than or equal to this value", column.setFilterGE.bind(column), column.userFilter!='');
- this.filtermenu.addMenuItem("Less than or equal to this value", column.setFilterLE.bind(column), column.userFilter!='');
- if (column.isText)
- this.filtermenu.addMenuItem("Contains keyword...", column.setFilterKW.bind(column), true);
- this.filtermenu.addMenuItem("Exclude this value", column.setFilterNE.bind(column), true);
- }
- if (this.liveGrid.filterCount() > 0)
- this.filtermenu.addMenuItem("Remove all filters", this.liveGrid.clearFilters.bind(this.liveGrid), true);
- }
-
- // menu items for Print/Export
- if (this.liveGrid.options.maxPrint > 0 && totrows>0) {
- this.exportmenu.clearMenu();
- this.addSubMenuItem('Print\t/Export',this.exportmenu);
- this.exportmenu.addMenuItem("Visible rows to web page", this.liveGrid.printVisible.bind(this.liveGrid,'plain'), true);
- this.exportmenu.addMenuItem("All rows to web page", this.liveGrid.printAll.bind(this.liveGrid,'plain'), this.liveGrid.buffer.totalRows <= this.liveGrid.options.maxPrint);
- if (Prototype.Browser.IE) {
- this.exportmenu.addMenuBreak();
- this.exportmenu.addMenuItem("Visible rows to spreadsheet", this.liveGrid.printVisible.bind(this.liveGrid,'owc'), true);
- this.exportmenu.addMenuItem("All rows to spreadsheet", this.liveGrid.printAll.bind(this.liveGrid,'owc'), this.liveGrid.buffer.totalRows <= this.liveGrid.options.maxPrint);
- }
- }
-
- // menu items for hide/unhide
- var hiddenCols=this.liveGrid.listInvisible();
- for (var showableCnt=0,x=0; x<hiddenCols.length; x++)
- if (hiddenCols[x].canHideShow()) showableCnt++;
- if (showableCnt > 0 || column.canHideShow()) {
- this.hideshowmenu.clearMenu();
- this.addSubMenuItem('Hide\t/Show',this.hideshowmenu);
- var visibleCnt=this.liveGrid.columns.length-hiddenCols.length;
- var enabled=(visibleCnt>1 && column.visible && column.canHideShow());
- this.hideshowmenu.addMenuItem(RicoTranslate.getPhrase('Hide')+': '+column.displayName, column.hideColumn.bind(column), enabled);
- for (var cnt=0,x=0; x<hiddenCols.length; x++) {
- if (hiddenCols[x].canHideShow()) {
- if (cnt++==0) this.hideshowmenu.addMenuBreak();
- this.hideshowmenu.addMenuItem(RicoTranslate.getPhrase('Show')+': '+hiddenCols[x].displayName, hiddenCols[x].showColumn.bind(hiddenCols[x]));
- }
- }
- if (hiddenCols.length > 1)
- this.hideshowmenu.addMenuItem(RicoTranslate.getPhrase('Show All'), this.liveGrid.showAll.bind(this.liveGrid));
- }
- return true;
-}
-
-}
-
+ this.options = {\r
+ width : '20em',\r
+ dataMenuHandler : null // put custom items on the menu\r
+ };\r
+ Object.extend(this.options, options || {});\r
+ Object.extend(this, new Rico.Menu(this.options));\r
+ this.sortmenu = new Rico.Menu(this.options);\r
+ this.filtermenu = new Rico.Menu(this.options);\r
+ this.exportmenu = new Rico.Menu(this.options);\r
+ this.hideshowmenu = new Rico.Menu(this.options);\r
+ this.createDiv();\r
+ this.sortmenu.createDiv();\r
+ this.filtermenu.createDiv();\r
+ this.exportmenu.createDiv();\r
+ this.hideshowmenu.createDiv();\r
+},\r
+\r
+// Build context menu for grid\r
+buildGridMenu: function(r,c) {\r
+ this.clearMenu();\r
+ var totrows=this.liveGrid.buffer.totalRows;\r
+ var onBlankRow=r >= totrows;\r
+ var column=this.liveGrid.columns[c];\r
+ if (this.options.dataMenuHandler) {\r
+ var showMenu=this.options.dataMenuHandler(this.liveGrid,r,c,onBlankRow);\r
+ if (!showMenu) return false;\r
+ }\r
+\r
+ // menu items for sorting\r
+ if (column.sortable && totrows>0) {\r
+ this.sortmenu.clearMenu();\r
+ this.addSubMenuItem(RicoTranslate.getPhrase("Sort by")+": "+column.displayName, this.sortmenu, false);\r
+ this.sortmenu.addMenuItem("Ascending", column.sortAsc.bind(column), true);\r
+ this.sortmenu.addMenuItem("Descending", column.sortDesc.bind(column), true);\r
+ }\r
+\r
+ // menu items for filtering\r
+ if (column.canFilter() && (!onBlankRow || column.filterType == Rico.TableColumn.USERFILTER)) {\r
+ this.filtermenu.clearMenu();\r
+ this.addSubMenuItem(RicoTranslate.getPhrase("Filter by")+": "+column.displayName, this.filtermenu, false); \r
+ column.userFilter=column.getValue(r);\r
+ if (column.filterType == Rico.TableColumn.USERFILTER) {\r
+ this.filtermenu.addMenuItem("Remove filter", column.setUnfiltered.bind(column), true);\r
+ this.filtermenu.addMenuItem("Refresh", this.liveGrid.filterHandler.bind(this.liveGrid), true);\r
+ if (column.filterOp=='LIKE')\r
+ this.filtermenu.addMenuItem("Change keyword...", column.setFilterKW.bind(column), true);\r
+ if (column.filterOp=='NE' && !onBlankRow)\r
+ this.filtermenu.addMenuItem("Exclude this value also", column.addFilterNE.bind(column), true);\r
+ } else if (!onBlankRow) {\r
+ this.filtermenu.addMenuItem("Include only this value", column.setFilterEQ.bind(column), true);\r
+ this.filtermenu.addMenuItem("Greater than or equal to this value", column.setFilterGE.bind(column), column.userFilter!='');\r
+ this.filtermenu.addMenuItem("Less than or equal to this value", column.setFilterLE.bind(column), column.userFilter!='');\r
+ if (column.isText)\r
+ this.filtermenu.addMenuItem("Contains keyword...", column.setFilterKW.bind(column), true);\r
+ this.filtermenu.addMenuItem("Exclude this value", column.setFilterNE.bind(column), true);\r
+ }\r
+ if (this.liveGrid.filterCount() > 0)\r
+ this.filtermenu.addMenuItem("Remove all filters", this.liveGrid.clearFilters.bind(this.liveGrid), true);\r
+ }\r
+\r
+ // menu items for Print/Export\r
+ if (this.liveGrid.options.maxPrint > 0 && totrows>0) {\r
+ this.exportmenu.clearMenu();\r
+ this.addSubMenuItem('Print\t/Export',this.exportmenu);\r
+ this.exportmenu.addMenuItem("Visible rows to web page", this.liveGrid.printVisible.bind(this.liveGrid,'plain'), true);\r
+ this.exportmenu.addMenuItem("All rows to web page", this.liveGrid.printAll.bind(this.liveGrid,'plain'), this.liveGrid.buffer.totalRows <= this.liveGrid.options.maxPrint);\r
+ if (Prototype.Browser.IE) {\r
+ this.exportmenu.addMenuBreak();\r
+ this.exportmenu.addMenuItem("Visible rows to spreadsheet", this.liveGrid.printVisible.bind(this.liveGrid,'owc'), true);\r
+ this.exportmenu.addMenuItem("All rows to spreadsheet", this.liveGrid.printAll.bind(this.liveGrid,'owc'), this.liveGrid.buffer.totalRows <= this.liveGrid.options.maxPrint);\r
+ }\r
+ }\r
+\r
+ // menu items for hide/unhide\r
+ var hiddenCols=this.liveGrid.listInvisible();\r
+ for (var showableCnt=0,x=0; x<hiddenCols.length; x++)\r
+ if (hiddenCols[x].canHideShow()) showableCnt++;\r
+ if (showableCnt > 0 || column.canHideShow()) {\r
+ this.hideshowmenu.clearMenu();\r
+ this.addSubMenuItem('Hide\t/Show',this.hideshowmenu);\r
+ var visibleCnt=this.liveGrid.columns.length-hiddenCols.length;\r
+ var enabled=(visibleCnt>1 && column.visible && column.canHideShow());\r
+ this.hideshowmenu.addMenuItem(RicoTranslate.getPhrase('Hide')+': '+column.displayName, column.hideColumn.bind(column), enabled);\r
+ for (var cnt=0,x=0; x<hiddenCols.length; x++) {\r
+ if (hiddenCols[x].canHideShow()) {\r
+ if (cnt++==0) this.hideshowmenu.addMenuBreak();\r
+ this.hideshowmenu.addMenuItem(RicoTranslate.getPhrase('Show')+': '+hiddenCols[x].displayName, hiddenCols[x].showColumn.bind(hiddenCols[x]));\r
+ }\r
+ }\r
+ if (hiddenCols.length > 1)\r
+ this.hideshowmenu.addMenuItem(RicoTranslate.getPhrase('Show All'), this.liveGrid.showAll.bind(this.liveGrid));\r
+ }\r
+ return true;\r
+}\r
+\r
+}\r
+\r
Rico.includeLoaded('ricoLiveGridMenu.js');
}
},
-formatSelection: function(newFormat) {
+formatSelection: function(newFormat) {\r
var s=this.getSelection();
- if (!s) return;
+ if (!s) return;\r
for (var r=s.r1; r<=s.r2; r++) {
for (var c=s.c1; c<=s.c2; c++) {
var gridcell=this.cell(r,c);
gridcell.RicoFormat=newFormat;
this.formatCell(gridcell);
}
- }
-},
-
+ }\r
+},\r
+\r
handleCtrlKey: function(e) {
switch (e.keyCode) {
// Ctrl-C
-<?xml version="1.0"?>
-
-<xsl:stylesheet version="1.0"
- xmlns:xhtml="http://www.w3.org/1999/xhtml"
- xmlns="http://www.w3.org/1999/xhtml"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:xs="http://www.w3.org/2001/XMLSchema"
- xmlns:fn="http://www.w3.org/2005/02/xpath-functions"
- xmlns:xdt="http://www.w3.org/2005/02/xpath-datatypes"
-exclude-result-prefixes="xhtml xsl fn xs xdt">
-
-<xsl:output
-omit-xml-declaration="yes"
-method="html"
-doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
-doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
-
-<xsl:attribute-set name="ricoTable">
- <xsl:attribute name="cellspacing">0</xsl:attribute>
- <xsl:attribute name="cellpadding">0</xsl:attribute>
-</xsl:attribute-set>
-
-<!-- the identity template -->
-
-<xsl:template match="*">
- <xsl:copy>
- <xsl:copy-of select="@*"/>
- <xsl:apply-templates/>
- </xsl:copy>
-</xsl:template>
-
-
-<!-- Transform head section -->
-
-<xsl:template match="xhtml:head">
- <xsl:copy>
- <xsl:apply-templates mode="head"/>
-<script type="text/javascript">
-//<![CDATA[
-if (typeof ricoInit!='undefined') {
- if (window.addEventListener)
- window.addEventListener('load', ricoInit, false);
- else if (window.attachEvent)
- window.attachEvent('onload', ricoInit);
-}
-// ]]>
-</script>
- </xsl:copy>
-</xsl:template>
-
-<xsl:template match="*[name()!='script']" mode="head">
- <xsl:copy>
- <xsl:copy-of select="@*|node()"/>
- </xsl:copy>
-</xsl:template>
-
-<xsl:template match="xhtml:script" mode="head">
- <xsl:copy>
- <xsl:copy-of select="@*"/>
- <xsl:value-of select="." disable-output-escaping="yes"/>
- </xsl:copy>
-</xsl:template>
-
-
-<!-- Transform tables with class ricoSimpleGrid -->
-
-<xsl:template match="xhtml:table[@class='ricoSimpleGrid']">
-<xsl:choose>
-
-<xsl:when test="xhtml:thead">
-<xsl:call-template name="processTable">
-<xsl:with-param name="id" select="@id"/>
-<xsl:with-param name="headRows" select="xhtml:thead/xhtml:tr"/>
-<xsl:with-param name="bodyRows" select="xhtml:tbody/xhtml:tr"/>
-</xsl:call-template>
-</xsl:when>
-
-<xsl:when test="xhtml:tbody">
-<xsl:call-template name="processTable">
-<xsl:with-param name="id" select="@id"/>
-<xsl:with-param name="headRows" select="xhtml:tbody/xhtml:tr[1]"/>
-<xsl:with-param name="bodyRows" select="xhtml:tbody/xhtml:tr[position() > 1]"/>
-</xsl:call-template>
-</xsl:when>
-
-<xsl:otherwise>
-<xsl:call-template name="processTable">
-<xsl:with-param name="id" select="@id"/>
-<xsl:with-param name="headRows" select="xhtml:tr[1]"/>
-<xsl:with-param name="bodyRows" select="xhtml:tr[position() > 1]"/>
-</xsl:call-template>
-</xsl:otherwise>
-
-</xsl:choose>
-</xsl:template>
-
-
-<!-- Perform the actual table transformation -->
-
-<xsl:template name="processTable">
-<xsl:param name="id" />
-<xsl:param name="headRows" />
-<xsl:param name="bodyRows" />
-
-<xsl:variable name="headIdx">
-<xsl:choose>
-<xsl:when test="$headRows[@class='ricoHeading']">
-<xsl:value-of select="count($headRows[@class='ricoHeading']/preceding-sibling::*)+1"/>
-</xsl:when>
-<xsl:otherwise>
-<xsl:value-of select="count($headRows)"/>
-</xsl:otherwise>
-</xsl:choose>
-</xsl:variable>
-
-<xsl:variable name="headMain" select="$headRows[position()=$headIdx]"/>
-<xsl:variable name="headCols" select="$headMain/xhtml:th | $headMain/xhtml:td"/>
-
-<!--
-<p><xsl:value-of select="$id"/>
-<br />headRowCnt: <xsl:value-of select="count($headRows)"/>
-<br />headIdx: <xsl:value-of select="$headIdx"/>
-<br />bodyRowCnt: <xsl:value-of select="count($bodyRows)"/>
-</p>
--->
-
-<xsl:element name="div">
-<xsl:attribute name="id"><xsl:value-of select="concat($id,'_outerDiv')"/></xsl:attribute>
-<xsl:attribute name="class">ricoLG_outerDiv</xsl:attribute>
-<xsl:attribute name="onload"></xsl:attribute>
-
-<!-- Create frozen (left) pane -->
-
-<xsl:element name="div">
-<xsl:attribute name="id"><xsl:value-of select="concat($id,'_frozenTabsDiv')"/></xsl:attribute>
-<xsl:attribute name="class">ricoLG_frozenTabsDiv</xsl:attribute>
-
-<xsl:call-template name="convertTHead">
-<xsl:with-param name="rows" select="$headRows"/>
-<xsl:with-param name="headIdx" select="$headIdx"/>
-<xsl:with-param name="frozen" select="1"/>
-<xsl:with-param name="id" select="concat($id,'_tab0h')"/>
-</xsl:call-template>
-
-<xsl:call-template name="convertTBody">
-<xsl:with-param name="rows" select="$bodyRows"/>
-<xsl:with-param name="cols" select="$headCols"/>
-<xsl:with-param name="id" select="concat($id,'_tab0')"/>
-<xsl:with-param name="frozen" select="1"/>
-</xsl:call-template>
-
-</xsl:element>
-
-<xsl:element name="div">
-<xsl:attribute name="id"><xsl:value-of select="concat($id,'_innerDiv')"/></xsl:attribute>
-<xsl:attribute name="class">ricoLG_innerDiv</xsl:attribute>
-
-<xsl:element name="div">
-<xsl:attribute name="id"><xsl:value-of select="concat($id,'_scrollTabsDiv')"/></xsl:attribute>
-<xsl:attribute name="class">ricoLG_scrollTabsDiv</xsl:attribute>
-
-<xsl:call-template name="convertTHead">
-<xsl:with-param name="rows" select="$headRows"/>
-<xsl:with-param name="headIdx" select="$headIdx"/>
-<xsl:with-param name="frozen" select="0"/>
-<xsl:with-param name="id" select="concat($id,'_tab1h')"/>
-</xsl:call-template>
-
-</xsl:element>
-</xsl:element>
-
-<xsl:element name="div">
-<xsl:attribute name="id"><xsl:value-of select="concat($id,'_scrollDiv')"/></xsl:attribute>
-<xsl:attribute name="class">ricoLG_scrollDiv</xsl:attribute>
-
-<xsl:call-template name="convertTBody">
-<xsl:with-param name="rows" select="$bodyRows"/>
-<xsl:with-param name="cols" select="$headCols"/>
-<xsl:with-param name="id" select="concat($id,'_tab1')"/>
-<xsl:with-param name="frozen" select="0"/>
-</xsl:call-template>
-</xsl:element>
-
-</xsl:element>
-
-</xsl:template>
-
-
-<!-- Convert thead section -->
-
-<xsl:template name="convertTHead">
-<xsl:param name = "rows" />
-<xsl:param name = "headIdx" />
-<xsl:param name = "frozen" />
-<xsl:param name = "id" />
-<xsl:element name="table" use-attribute-sets="ricoTable">
-<xsl:attribute name="id"><xsl:value-of select="$id"/></xsl:attribute>
-<xsl:attribute name="class">ricoLG_table ricoLG_top
-<xsl:if test="$frozen">ricoLG_left</xsl:if>
-<xsl:if test="not($frozen)">ricoLG_right</xsl:if>
-</xsl:attribute>
-<xsl:element name="thead">
- <xsl:for-each select="$rows">
- <xsl:choose>
- <xsl:when test="position() = $headIdx">
- <xsl:apply-templates select="." mode="convertHeadRow">
- <xsl:with-param name="id" select="concat($id,'_main')"/>
- <xsl:with-param name="frozen" select="$frozen"/>
- </xsl:apply-templates>
- </xsl:when>
- <xsl:otherwise>
- <xsl:apply-templates select="." mode="convertHeadRow">
- <xsl:with-param name="id" select="concat($id,'_',position())"/>
- <xsl:with-param name="frozen" select="$frozen"/>
- </xsl:apply-templates>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:for-each>
-</xsl:element>
-<tbody />
-</xsl:element>
-</xsl:template>
-
-
-<xsl:template match="*" mode="convertHeadRow">
-<xsl:param name = "id" />
-<xsl:param name = "frozen" />
- <xsl:variable name="class" select="@class"/>
- <xsl:variable name="cells" select="xhtml:th | xhtml:td"/>
- <xsl:element name="tr">
- <xsl:if test="$id">
- <xsl:attribute name="id"><xsl:value-of select="$id"/></xsl:attribute>
- </xsl:if>
- <xsl:attribute name="class">ricoLG_hdg <xsl:value-of select="$class"/></xsl:attribute>
- <xsl:for-each select="$cells[@class='ricoFrozen' and $frozen or not(@class='ricoFrozen') and not($frozen)]">
- <xsl:copy>
- <xsl:copy-of select="@*"/>
- <div class='ricoLG_col' style='width:100px'>
- <xsl:element name="div">
- <xsl:attribute name="class">ricoLG_cell <xsl:value-of select="@class"/></xsl:attribute>
- <xsl:copy-of select="* | @*[name()!='class'] | text()"/>
- </xsl:element>
- </div>
- </xsl:copy>
- </xsl:for-each>
- </xsl:element>
-</xsl:template>
-
-
-<!-- Convert tbody section -->
-
-<xsl:template name="convertTBody">
-<xsl:param name = "rows" />
-<xsl:param name = "cols" />
-<xsl:param name = "id" />
-<xsl:param name = "frozen" />
-<xsl:element name="table" use-attribute-sets="ricoTable">
-<xsl:attribute name="id"><xsl:value-of select="$id"/></xsl:attribute>
-<xsl:attribute name="class">ricoLG_table ricoLG_bottom
-<xsl:if test="$frozen">ricoLG_left</xsl:if>
-<xsl:if test="not($frozen)">ricoLG_right</xsl:if>
-</xsl:attribute>
-<xsl:element name="tbody">
- <tr>
- <xsl:for-each select="$cols">
- <xsl:if test="@class='ricoFrozen' and $frozen or not(@class='ricoFrozen') and not($frozen)">
- <xsl:variable name="colpos" select="position()"/>
- <td>
- <div class='ricoLG_col' style='width:100px'>
- <xsl:for-each select="$rows">
- <xsl:element name="div">
- <xsl:attribute name="class">ricoLG_cell <xsl:value-of select="xhtml:td[$colpos]/@class"/></xsl:attribute>
- <xsl:copy-of select="xhtml:td[$colpos]/* | xhtml:td[$colpos]/@*[name()!='class'] | xhtml:td[$colpos]/text()"/>
- </xsl:element>
- </xsl:for-each>
- </div>
- </td>
- </xsl:if>
- </xsl:for-each>
- </tr>
-</xsl:element>
-</xsl:element>
-</xsl:template>
-
-</xsl:stylesheet>
+<?xml version="1.0"?>\r
+\r
+<xsl:stylesheet version="1.0"\r
+ xmlns:xhtml="http://www.w3.org/1999/xhtml"\r
+ xmlns="http://www.w3.org/1999/xhtml"\r
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"\r
+ xmlns:fn="http://www.w3.org/2005/02/xpath-functions"\r
+ xmlns:xdt="http://www.w3.org/2005/02/xpath-datatypes"\r
+exclude-result-prefixes="xhtml xsl fn xs xdt">\r
+\r
+<xsl:output\r
+omit-xml-declaration="yes"\r
+method="html"\r
+doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>\r
+\r
+<xsl:attribute-set name="ricoTable"> \r
+ <xsl:attribute name="cellspacing">0</xsl:attribute> \r
+ <xsl:attribute name="cellpadding">0</xsl:attribute> \r
+</xsl:attribute-set> \r
+\r
+<!-- the identity template -->\r
+\r
+<xsl:template match="*">\r
+ <xsl:copy>\r
+ <xsl:copy-of select="@*"/>\r
+ <xsl:apply-templates/>\r
+ </xsl:copy>\r
+</xsl:template>\r
+\r
+\r
+<!-- Transform head section -->\r
+\r
+<xsl:template match="xhtml:head">\r
+ <xsl:copy>\r
+ <xsl:apply-templates mode="head"/>\r
+<script type="text/javascript">\r
+//<![CDATA[\r
+if (typeof ricoInit!='undefined') {\r
+ if (window.addEventListener)\r
+ window.addEventListener('load', ricoInit, false);\r
+ else if (window.attachEvent)\r
+ window.attachEvent('onload', ricoInit);\r
+}\r
+// ]]>\r
+</script>\r
+ </xsl:copy>\r
+</xsl:template>\r
+\r
+<xsl:template match="*[name()!='script']" mode="head">\r
+ <xsl:copy>\r
+ <xsl:copy-of select="@*|node()"/>\r
+ </xsl:copy>\r
+</xsl:template>\r
+\r
+<xsl:template match="xhtml:script" mode="head">\r
+ <xsl:copy>\r
+ <xsl:copy-of select="@*"/>\r
+ <xsl:value-of select="." disable-output-escaping="yes"/>\r
+ </xsl:copy>\r
+</xsl:template>\r
+\r
+\r
+<!-- Transform tables with class ricoSimpleGrid -->\r
+ \r
+<xsl:template match="xhtml:table[@class='ricoSimpleGrid']">\r
+<xsl:choose>\r
+\r
+<xsl:when test="xhtml:thead">\r
+<xsl:call-template name="processTable">\r
+<xsl:with-param name="id" select="@id"/>\r
+<xsl:with-param name="headRows" select="xhtml:thead/xhtml:tr"/>\r
+<xsl:with-param name="bodyRows" select="xhtml:tbody/xhtml:tr"/>\r
+</xsl:call-template>\r
+</xsl:when>\r
+\r
+<xsl:when test="xhtml:tbody">\r
+<xsl:call-template name="processTable">\r
+<xsl:with-param name="id" select="@id"/>\r
+<xsl:with-param name="headRows" select="xhtml:tbody/xhtml:tr[1]"/>\r
+<xsl:with-param name="bodyRows" select="xhtml:tbody/xhtml:tr[position() > 1]"/>\r
+</xsl:call-template>\r
+</xsl:when>\r
+\r
+<xsl:otherwise>\r
+<xsl:call-template name="processTable">\r
+<xsl:with-param name="id" select="@id"/>\r
+<xsl:with-param name="headRows" select="xhtml:tr[1]"/>\r
+<xsl:with-param name="bodyRows" select="xhtml:tr[position() > 1]"/>\r
+</xsl:call-template>\r
+</xsl:otherwise>\r
+\r
+</xsl:choose>\r
+</xsl:template>\r
+\r
+\r
+<!-- Perform the actual table transformation -->\r
+ \r
+<xsl:template name="processTable">\r
+<xsl:param name="id" />\r
+<xsl:param name="headRows" />\r
+<xsl:param name="bodyRows" />\r
+\r
+<xsl:variable name="headIdx">\r
+<xsl:choose>\r
+<xsl:when test="$headRows[@class='ricoHeading']">\r
+<xsl:value-of select="count($headRows[@class='ricoHeading']/preceding-sibling::*)+1"/>\r
+</xsl:when>\r
+<xsl:otherwise>\r
+<xsl:value-of select="count($headRows)"/>\r
+</xsl:otherwise>\r
+</xsl:choose>\r
+</xsl:variable>\r
+\r
+<xsl:variable name="headMain" select="$headRows[position()=$headIdx]"/>\r
+<xsl:variable name="headCols" select="$headMain/xhtml:th | $headMain/xhtml:td"/>\r
+\r
+<!--\r
+<p><xsl:value-of select="$id"/>\r
+<br />headRowCnt: <xsl:value-of select="count($headRows)"/>\r
+<br />headIdx: <xsl:value-of select="$headIdx"/>\r
+<br />bodyRowCnt: <xsl:value-of select="count($bodyRows)"/>\r
+</p>\r
+-->\r
+\r
+<xsl:element name="div">\r
+<xsl:attribute name="id"><xsl:value-of select="concat($id,'_outerDiv')"/></xsl:attribute>\r
+<xsl:attribute name="class">ricoLG_outerDiv</xsl:attribute>\r
+<xsl:attribute name="onload"></xsl:attribute>\r
+\r
+<!-- Create frozen (left) pane -->\r
+\r
+<xsl:element name="div">\r
+<xsl:attribute name="id"><xsl:value-of select="concat($id,'_frozenTabsDiv')"/></xsl:attribute>\r
+<xsl:attribute name="class">ricoLG_frozenTabsDiv</xsl:attribute>\r
+\r
+<xsl:call-template name="convertTHead">\r
+<xsl:with-param name="rows" select="$headRows"/>\r
+<xsl:with-param name="headIdx" select="$headIdx"/>\r
+<xsl:with-param name="frozen" select="1"/>\r
+<xsl:with-param name="id" select="concat($id,'_tab0h')"/>\r
+</xsl:call-template>\r
+\r
+<xsl:call-template name="convertTBody">\r
+<xsl:with-param name="rows" select="$bodyRows"/>\r
+<xsl:with-param name="cols" select="$headCols"/>\r
+<xsl:with-param name="id" select="concat($id,'_tab0')"/>\r
+<xsl:with-param name="frozen" select="1"/>\r
+</xsl:call-template>\r
+\r
+</xsl:element>\r
+\r
+<xsl:element name="div">\r
+<xsl:attribute name="id"><xsl:value-of select="concat($id,'_innerDiv')"/></xsl:attribute>\r
+<xsl:attribute name="class">ricoLG_innerDiv</xsl:attribute>\r
+\r
+<xsl:element name="div">\r
+<xsl:attribute name="id"><xsl:value-of select="concat($id,'_scrollTabsDiv')"/></xsl:attribute>\r
+<xsl:attribute name="class">ricoLG_scrollTabsDiv</xsl:attribute>\r
+\r
+<xsl:call-template name="convertTHead">\r
+<xsl:with-param name="rows" select="$headRows"/>\r
+<xsl:with-param name="headIdx" select="$headIdx"/>\r
+<xsl:with-param name="frozen" select="0"/>\r
+<xsl:with-param name="id" select="concat($id,'_tab1h')"/>\r
+</xsl:call-template>\r
+\r
+</xsl:element>\r
+</xsl:element>\r
+\r
+<xsl:element name="div">\r
+<xsl:attribute name="id"><xsl:value-of select="concat($id,'_scrollDiv')"/></xsl:attribute>\r
+<xsl:attribute name="class">ricoLG_scrollDiv</xsl:attribute>\r
+\r
+<xsl:call-template name="convertTBody">\r
+<xsl:with-param name="rows" select="$bodyRows"/>\r
+<xsl:with-param name="cols" select="$headCols"/>\r
+<xsl:with-param name="id" select="concat($id,'_tab1')"/>\r
+<xsl:with-param name="frozen" select="0"/>\r
+</xsl:call-template>\r
+</xsl:element>\r
+\r
+</xsl:element>\r
+\r
+</xsl:template>\r
+\r
+\r
+<!-- Convert thead section -->\r
+\r
+<xsl:template name="convertTHead">\r
+<xsl:param name = "rows" />\r
+<xsl:param name = "headIdx" />\r
+<xsl:param name = "frozen" />\r
+<xsl:param name = "id" />\r
+<xsl:element name="table" use-attribute-sets="ricoTable">\r
+<xsl:attribute name="id"><xsl:value-of select="$id"/></xsl:attribute>\r
+<xsl:attribute name="class">ricoLG_table ricoLG_top\r
+<xsl:if test="$frozen">ricoLG_left</xsl:if>\r
+<xsl:if test="not($frozen)">ricoLG_right</xsl:if>\r
+</xsl:attribute>\r
+<xsl:element name="thead">\r
+ <xsl:for-each select="$rows">\r
+ <xsl:choose>\r
+ <xsl:when test="position() = $headIdx">\r
+ <xsl:apply-templates select="." mode="convertHeadRow">\r
+ <xsl:with-param name="id" select="concat($id,'_main')"/>\r
+ <xsl:with-param name="frozen" select="$frozen"/>\r
+ </xsl:apply-templates>\r
+ </xsl:when>\r
+ <xsl:otherwise>\r
+ <xsl:apply-templates select="." mode="convertHeadRow">\r
+ <xsl:with-param name="id" select="concat($id,'_',position())"/>\r
+ <xsl:with-param name="frozen" select="$frozen"/>\r
+ </xsl:apply-templates>\r
+ </xsl:otherwise>\r
+ </xsl:choose>\r
+ </xsl:for-each>\r
+</xsl:element>\r
+<tbody />\r
+</xsl:element>\r
+</xsl:template>\r
+\r
+\r
+<xsl:template match="*" mode="convertHeadRow">\r
+<xsl:param name = "id" />\r
+<xsl:param name = "frozen" />\r
+ <xsl:variable name="class" select="@class"/>\r
+ <xsl:variable name="cells" select="xhtml:th | xhtml:td"/>\r
+ <xsl:element name="tr">\r
+ <xsl:if test="$id">\r
+ <xsl:attribute name="id"><xsl:value-of select="$id"/></xsl:attribute>\r
+ </xsl:if>\r
+ <xsl:attribute name="class">ricoLG_hdg <xsl:value-of select="$class"/></xsl:attribute>\r
+ <xsl:for-each select="$cells[@class='ricoFrozen' and $frozen or not(@class='ricoFrozen') and not($frozen)]">\r
+ <xsl:copy>\r
+ <xsl:copy-of select="@*"/>\r
+ <div class='ricoLG_col' style='width:100px'>\r
+ <xsl:element name="div">\r
+ <xsl:attribute name="class">ricoLG_cell <xsl:value-of select="@class"/></xsl:attribute>\r
+ <xsl:copy-of select="* | @*[name()!='class'] | text()"/>\r
+ </xsl:element>\r
+ </div>\r
+ </xsl:copy>\r
+ </xsl:for-each>\r
+ </xsl:element>\r
+</xsl:template>\r
+\r
+\r
+<!-- Convert tbody section -->\r
+\r
+<xsl:template name="convertTBody">\r
+<xsl:param name = "rows" />\r
+<xsl:param name = "cols" />\r
+<xsl:param name = "id" />\r
+<xsl:param name = "frozen" />\r
+<xsl:element name="table" use-attribute-sets="ricoTable">\r
+<xsl:attribute name="id"><xsl:value-of select="$id"/></xsl:attribute>\r
+<xsl:attribute name="class">ricoLG_table ricoLG_bottom\r
+<xsl:if test="$frozen">ricoLG_left</xsl:if>\r
+<xsl:if test="not($frozen)">ricoLG_right</xsl:if>\r
+</xsl:attribute> \r
+<xsl:element name="tbody">\r
+ <tr>\r
+ <xsl:for-each select="$cols">\r
+ <xsl:if test="@class='ricoFrozen' and $frozen or not(@class='ricoFrozen') and not($frozen)">\r
+ <xsl:variable name="colpos" select="position()"/>\r
+ <td>\r
+ <div class='ricoLG_col' style='width:100px'>\r
+ <xsl:for-each select="$rows">\r
+ <xsl:element name="div">\r
+ <xsl:attribute name="class">ricoLG_cell <xsl:value-of select="xhtml:td[$colpos]/@class"/></xsl:attribute>\r
+ <xsl:copy-of select="xhtml:td[$colpos]/* | xhtml:td[$colpos]/@*[name()!='class'] | xhtml:td[$colpos]/text()"/>\r
+ </xsl:element>\r
+ </xsl:for-each>\r
+ </div>\r
+ </td>\r
+ </xsl:if>\r
+ </xsl:for-each>\r
+ </tr>\r
+</xsl:element>\r
+</xsl:element>\r
+</xsl:template>\r
+\r
+</xsl:stylesheet> \r
-<xsl:stylesheet version="1.0"
- xmlns="urn:schemas-microsoft-com:office:spreadsheet"
- xmlns:xhtml="http://www.w3.org/1999/xhtml"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:msxsl="urn:schemas-microsoft-com:xslt"
- xmlns:o="urn:schemas-microsoft-com:office:office"
- xmlns:x="urn:schemas-microsoft-com:office:excel"
- xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
-
-<xsl:output method="xml" indent="yes" omit-xml-declaration="no" media-type="application/xml"/>
-
-<xsl:template match="/">
- <xsl:processing-instruction name="mso-application">
- <xsl:text>progid="Excel.Sheet"</xsl:text>
- </xsl:processing-instruction>
-
- <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
- xmlns:o="urn:schemas-microsoft-com:office:office"
- xmlns:x="urn:schemas-microsoft-com:office:excel"
- xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
- xmlns:html="http://www.w3.org/TR/REC-html40">
-
- <Styles>
- <Style ss:ID="Default" ss:Name="Normal">
- <Alignment ss:Vertical="Bottom"/>
- <Borders/>
- <Font/>
- <Interior/>
- <NumberFormat/>
- <Protection/>
- </Style>
- <Style ss:ID="s21">
- <Font ss:Bold="1"/>
- <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
- </Style>
- <Style ss:ID="s22">
- <Alignment ss:Horizontal="Left" ss:Vertical="Bottom"/>
- <Font ss:Bold="1"/>
- <Interior ss:Color="#99CCFF" ss:Pattern="Solid"/>
- </Style>
- <Style ss:ID="s23" ss:Name="Currency">
- <NumberFormat
- ss:Format="_("$"* #,##0.00_);_("$"* \(#,##0.00\);_("$"* "-"??_);_(@_)"/>
- </Style>
- <Style ss:ID="s24">
- <NumberFormat ss:Format="_(* #,##0.00_);_(* \(#,##0.00\);_(* "-"??_);_(@_)"/>
- </Style>
- <Style ss:ID="s25">
- <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
- </Style>
- </Styles>
-
- <xsl:apply-templates mode="top"/>
-
- </Workbook>
-</xsl:template>
-
-
-<xsl:template match="*" mode="top">
- <xsl:choose>
-
- <xsl:when test="xhtml:table[@class='ricoSimpleGrid']">
- <xsl:apply-templates mode="grid"/>
- </xsl:when>
-
- <xsl:otherwise>
- <xsl:apply-templates select="*" mode="top"/>
- </xsl:otherwise>
-
- </xsl:choose>
-</xsl:template>
-
-
-<xsl:template match="*" mode="grid">
-
- <xsl:choose>
-
- <xsl:when test="xhtml:thead">
- <xsl:call-template name="processTable">
- <xsl:with-param name="id" select="@id"/>
- <xsl:with-param name="headRows" select="xhtml:thead/xhtml:tr"/>
- <xsl:with-param name="bodyRows" select="xhtml:tbody/xhtml:tr"/>
- </xsl:call-template>
- </xsl:when>
-
- <xsl:when test="xhtml:tbody">
- <xsl:call-template name="processTable">
- <xsl:with-param name="id" select="@id"/>
- <xsl:with-param name="headRows" select="xhtml:tbody/xhtml:tr[1]"/>
- <xsl:with-param name="bodyRows" select="xhtml:tbody/xhtml:tr[position() > 1]"/>
- </xsl:call-template>
- </xsl:when>
-
- <xsl:otherwise>
- <xsl:call-template name="processTable">
- <xsl:with-param name="id" select="@id"/>
- <xsl:with-param name="headRows" select="xhtml:tr[1]"/>
- <xsl:with-param name="bodyRows" select="xhtml:tr[position() > 1]"/>
- </xsl:call-template>
- </xsl:otherwise>
-
- </xsl:choose>
-
-</xsl:template>
-
-
-<!-- Perform the actual table transformation -->
-
-<xsl:template name="processTable">
-<xsl:param name="id" />
-<xsl:param name="headRows" />
-<xsl:param name="bodyRows" />
-
- <Worksheet>
- <xsl:attribute name="ss:Name">
- <xsl:value-of select='$id'/>
- </xsl:attribute>
- <Table>
-
- <xsl:apply-templates select="$headRows" mode="convertHeadRow"/>
- <xsl:apply-templates select="$bodyRows" mode="convertBodyRow"/>
-
- </Table>
- </Worksheet>
-
-</xsl:template>
-
-
-<xsl:template match="*" mode="convertHeadRow">
- <Row>
- <xsl:apply-templates select="xhtml:td | xhtml:th" mode="convertHeadCell"/>
- </Row>
-</xsl:template>
-
-
-<xsl:template match="*" mode="convertHeadCell">
- <xsl:element name="Cell">
- <xsl:attribute name="ss:StyleID">s22</xsl:attribute>
- <xsl:if test="@colspan">
- <xsl:attribute name="ss:MergeAcross"><xsl:value-of select="number(@colspan)-1"/></xsl:attribute>
- </xsl:if>
- <Data ss:Type="String">
- <xsl:value-of select="."/>
- </Data>
- </xsl:element>
-</xsl:template>
-
-
-<xsl:template match="*" mode="convertBodyRow">
- <Row>
- <xsl:apply-templates select="xhtml:td | xhtml:th" mode="convertBodyCell"/>
- </Row>
-</xsl:template>
-
-
-<xsl:template match="*" mode="convertBodyCell">
- <Cell><Data ss:Type="String"><xsl:value-of select="."/></Data></Cell>
-</xsl:template>
-
+<xsl:stylesheet version="1.0"\r
+ xmlns="urn:schemas-microsoft-com:office:spreadsheet"\r
+ xmlns:xhtml="http://www.w3.org/1999/xhtml"\r
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform" \r
+ xmlns:msxsl="urn:schemas-microsoft-com:xslt"\r
+ xmlns:o="urn:schemas-microsoft-com:office:office"\r
+ xmlns:x="urn:schemas-microsoft-com:office:excel"\r
+ xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">\r
+\r
+<xsl:output method="xml" indent="yes" omit-xml-declaration="no" media-type="application/xml"/>\r
+\r
+<xsl:template match="/">\r
+ <xsl:processing-instruction name="mso-application">\r
+ <xsl:text>progid="Excel.Sheet"</xsl:text> \r
+ </xsl:processing-instruction>\r
+\r
+ <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"\r
+ xmlns:o="urn:schemas-microsoft-com:office:office"\r
+ xmlns:x="urn:schemas-microsoft-com:office:excel"\r
+ xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"\r
+ xmlns:html="http://www.w3.org/TR/REC-html40">\r
+\r
+ <Styles>\r
+ <Style ss:ID="Default" ss:Name="Normal">\r
+ <Alignment ss:Vertical="Bottom"/>\r
+ <Borders/>\r
+ <Font/>\r
+ <Interior/>\r
+ <NumberFormat/>\r
+ <Protection/>\r
+ </Style>\r
+ <Style ss:ID="s21">\r
+ <Font ss:Bold="1"/>\r
+ <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>\r
+ </Style>\r
+ <Style ss:ID="s22">\r
+ <Alignment ss:Horizontal="Left" ss:Vertical="Bottom"/>\r
+ <Font ss:Bold="1"/>\r
+ <Interior ss:Color="#99CCFF" ss:Pattern="Solid"/>\r
+ </Style>\r
+ <Style ss:ID="s23" ss:Name="Currency">\r
+ <NumberFormat\r
+ ss:Format="_("$"* #,##0.00_);_("$"* \(#,##0.00\);_("$"* "-"??_);_(@_)"/>\r
+ </Style>\r
+ <Style ss:ID="s24">\r
+ <NumberFormat ss:Format="_(* #,##0.00_);_(* \(#,##0.00\);_(* "-"??_);_(@_)"/>\r
+ </Style>\r
+ <Style ss:ID="s25">\r
+ <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>\r
+ </Style>\r
+ </Styles>\r
+\r
+ <xsl:apply-templates mode="top"/> \r
+\r
+ </Workbook>\r
+</xsl:template>\r
+\r
+\r
+<xsl:template match="*" mode="top">\r
+ <xsl:choose>\r
+\r
+ <xsl:when test="xhtml:table[@class='ricoSimpleGrid']">\r
+ <xsl:apply-templates mode="grid"/> \r
+ </xsl:when>\r
+\r
+ <xsl:otherwise>\r
+ <xsl:apply-templates select="*" mode="top"/> \r
+ </xsl:otherwise>\r
+ \r
+ </xsl:choose>\r
+</xsl:template>\r
+\r
+\r
+<xsl:template match="*" mode="grid">\r
+\r
+ <xsl:choose>\r
+ \r
+ <xsl:when test="xhtml:thead">\r
+ <xsl:call-template name="processTable">\r
+ <xsl:with-param name="id" select="@id"/>\r
+ <xsl:with-param name="headRows" select="xhtml:thead/xhtml:tr"/>\r
+ <xsl:with-param name="bodyRows" select="xhtml:tbody/xhtml:tr"/>\r
+ </xsl:call-template>\r
+ </xsl:when>\r
+ \r
+ <xsl:when test="xhtml:tbody">\r
+ <xsl:call-template name="processTable">\r
+ <xsl:with-param name="id" select="@id"/>\r
+ <xsl:with-param name="headRows" select="xhtml:tbody/xhtml:tr[1]"/>\r
+ <xsl:with-param name="bodyRows" select="xhtml:tbody/xhtml:tr[position() > 1]"/>\r
+ </xsl:call-template>\r
+ </xsl:when>\r
+ \r
+ <xsl:otherwise>\r
+ <xsl:call-template name="processTable">\r
+ <xsl:with-param name="id" select="@id"/>\r
+ <xsl:with-param name="headRows" select="xhtml:tr[1]"/>\r
+ <xsl:with-param name="bodyRows" select="xhtml:tr[position() > 1]"/>\r
+ </xsl:call-template>\r
+ </xsl:otherwise>\r
+ \r
+ </xsl:choose>\r
+\r
+</xsl:template>\r
+\r
+\r
+<!-- Perform the actual table transformation -->\r
+ \r
+<xsl:template name="processTable">\r
+<xsl:param name="id" />\r
+<xsl:param name="headRows" />\r
+<xsl:param name="bodyRows" />\r
+\r
+ <Worksheet>\r
+ <xsl:attribute name="ss:Name">\r
+ <xsl:value-of select='$id'/>\r
+ </xsl:attribute>\r
+ <Table>\r
+\r
+ <xsl:apply-templates select="$headRows" mode="convertHeadRow"/>\r
+ <xsl:apply-templates select="$bodyRows" mode="convertBodyRow"/>\r
+\r
+ </Table>\r
+ </Worksheet>\r
+\r
+</xsl:template>\r
+\r
+\r
+<xsl:template match="*" mode="convertHeadRow">\r
+ <Row>\r
+ <xsl:apply-templates select="xhtml:td | xhtml:th" mode="convertHeadCell"/>\r
+ </Row>\r
+</xsl:template>\r
+\r
+\r
+<xsl:template match="*" mode="convertHeadCell">\r
+ <xsl:element name="Cell">\r
+ <xsl:attribute name="ss:StyleID">s22</xsl:attribute>\r
+ <xsl:if test="@colspan">\r
+ <xsl:attribute name="ss:MergeAcross"><xsl:value-of select="number(@colspan)-1"/></xsl:attribute>\r
+ </xsl:if>\r
+ <Data ss:Type="String">\r
+ <xsl:value-of select="."/>\r
+ </Data>\r
+ </xsl:element>\r
+</xsl:template>\r
+\r
+\r
+<xsl:template match="*" mode="convertBodyRow">\r
+ <Row>\r
+ <xsl:apply-templates select="xhtml:td | xhtml:th" mode="convertBodyCell"/>\r
+ </Row>\r
+</xsl:template>\r
+\r
+\r
+<xsl:template match="*" mode="convertBodyCell">\r
+ <Cell><Data ss:Type="String"><xsl:value-of select="."/></Data></Cell>\r
+</xsl:template>\r
+\r
</xsl:stylesheet>
\ No newline at end of file
-// Rico Tree Control
-// by Matt Brown
-// Oct 2006
-// email: dowdybrown@yahoo.com
-
-// Requires prototype.js and ricoCommon.js
-
-// each node in nodeIndex is an Array with 6+n positions
-// node[0] is 0/1 when the node is closed/open
-// node[1] is 0/1 when the folder is closed/open
-// node[2] is 1 if the node is a leaf node
-// node[3] is the node id
-// node[4] is the node description
-// node[5] is 1 when the node is selectable, 0 otherwise
-// node[6]...node[6+n] are the child nodes
-
-Rico.TreeControl = Class.create();
-
-Rico.TreeControl.prototype = {
-
- initialize: function(id,url,options) {
- Object.extend(this, new Rico.Popup({ignoreClicks:true}));
- Object.extend(this.options, {
- nodeIdDisplay:'none', // first, last, tooltip, or none
- showCheckBox: false,
- showFolders: false,
- showPlusMinus: true,
- defaultAction: this.nodeClick.bindAsEventListener(this),
- height: '300px',
- width: '300px',
- leafIcon: Rico.imgDir+'doc.gif'
- });
- Object.extend(this.options, options || {});
- this.img=[];
- this.FirstChildNode=6;
- this.nodeIndex={};
- this.nodeCount=0;
- this.foldersTree=0;
- this.timeOutId=0;
- this.id=id;
- this.dataSource=url;
- this.close=this.closePopup;
- },
-
- atLoad : function() {
- var imgsrc = new Array("node.gif","nodelast.gif","folderopen.gif","folderclosed.gif");
- for (i=0;i<imgsrc.length;i++) {
- this.img[i] = new Image
- this.img[i].src = Rico.imgDir+imgsrc[i]
- //this.img[i].src = Rico.imgDir + imgsrc[i]
- }
- this.treeDiv=document.createElement("div");
- this.treeDiv.id=this.id;
- this.treeDiv.className='ricoTree';
- this.treeDiv.style.height=this.options.height;
- this.treeDiv.style.width=this.options.width;
- this.container=document.createElement("div");
- this.container.style.display="none"
- this.container.className='ricoTreeContainer';
- this.container.appendChild(this.treeDiv);
- document.body.appendChild(this.container);
- this.setDiv(this.container);
- this.close();
- },
-
- // Building the data in the tree
- open: function() {
- this.openPopup();
- if (this.nodeCount==0) this.loadXMLDoc();
- },
-
- loadXMLDoc: function(branchPin) {
- var parms="id="+this.id;
- if (branchPin) parms+="&Parent="+branchPin;
- Rico.writeDebugMsg('Tree loadXMLDoc:\n'+parms+'\n'+this.dataSource);
- new Ajax.Request(this.dataSource, {parameters:parms,method:'get',onComplete:this.processResponse.bind(this)});
- },
-
- processResponse: function(request) {
- var response = request.responseXML.getElementsByTagName("ajax-response");
- if (response == null || response.length != 1) return;
- var rowsElement = response[0].getElementsByTagName('rows')[0];
- var trs = rowsElement.getElementsByTagName("tr");
- //alert('processResponse: '+trs.length);
- for ( var i=0 ; i < trs.length; i++ ) {
- var cells = trs[i].getElementsByTagName("td");
- if (cells.length != 5) continue;
- // cells[0]=parent node id
- // cells[1]=node id
- // cells[2]=description
- // cells[3]=L/zero (leaf), C/non-zero (container)
- // cells[4]= 0->not selectable, 1->selectable (use default action), otherwise the node is selectable and cells[4] contains the action
- var content=[];
- for (var j=0; j<cells.length; j++)
- content[j]=this.getContent(cells[j]);
- //content[j]=RicoUtil.getContentAsString(cells[j]);
- var node=this.addNode(content[3],content[1],content[2],content[4]);
- if (this.foldersTree==0) {
- this.foldersTree = node;
- node[0]=1;
- node[1]=1;
- } else {
- var parentNode=this.nodeIndex[content[0]]
- if (typeof parentNode=='undefined')
- alert('ERROR!\nReceived invalid response from server - could not find parent in existing tree:\n'+content[0]);
- else
- parentNode.push(node);
- }
- }
- if (this.nodeCount==1 && node[2])
- this.loadXMLDoc(node[3]);
- else
- this.redrawTree();
- },
-
- getContent: function(cell) {
- if (cell.innerHTML) return cell.innerHTML;
- switch (cell.childNodes.length) {
- case 0: return "";
- case 1: return cell.firstChild.nodeValue;
- default: return cell.childNodes[1].nodeValue;
- }
- },
-
- // create new node
- // NodeType is "C" or non-zero (container), or "L" or zero (leaf)
- // id is the unique identifier for the node
- // desc is the text displayed to the user
- addNode: function(NodeType,id,desc,selectable) {
- var arrayAux
- //alert("addNode: " + desc + " (" + selectable + ")")
- arrayAux = new Array
- arrayAux[0] = 0
- arrayAux[1] = 0
- arrayAux[2] = (NodeType=='0' || NodeType.toUpperCase()=='L' ? 0 : 1)
- arrayAux[3] = id
- arrayAux[4] = desc
- arrayAux[5] = parseInt(selectable);
- this.nodeIndex[id]=arrayAux
- this.nodeCount++;
-
- return arrayAux
- },
-
- RemoveAllChildren: function(obj) {
- while (obj.hasChildNodes()) {
- this.RemoveAllChildren(obj.childNodes[0])
- obj.removeChild(obj.childNodes[0])
- }
- },
-
- redrawTree: function() {
- //alert('redrawTree');
- this.RemoveAllChildren(this.treeDiv)
- this.redrawNode(this.foldersTree, 0, 1, [])
- },
-
- DisplayImages: function(row,arNames) {
- var i,img,td
- for(i=0;i<arNames.length;i++) {
- img = document.createElement("img")
- img.src=Rico.imgDir+arNames[i] + ".gif"
- td=row.insertCell(-1)
- td.appendChild(img)
- }
- },
-
- redrawNode: function(foldersNode, level, lastNode, leftSide) {
- var tab,row
- //alert("redrawNode at level " + level + " (" + foldersNode[3] + ")")
-
- tab = document.createElement("table")
- tab.border=0
- tab.cellSpacing=0
- tab.cellPadding=0
- row=tab.insertRow(0)
- this.DisplayImages(row,leftSide)
- var newLeft=leftSide.slice(0);
- if (level>0) {
- var suffix=lastNode ? 'last' : '';
- if (this.options.showPlusMinus && foldersNode[2])
- this.showPlusMinus(row.insertCell(-1),foldersNode,suffix);
- else
- this.NodeImage(row.insertCell(-1),suffix)
- newLeft.push(lastNode ? "nodeblank" : "nodeline")
- }
- if (this.options.showFolders)
- this.showFolders(row.insertCell(-1),foldersNode);
- if (this.options.showCheckBox && foldersNode[5])
- this.showCheckBox(row.insertCell(-1),foldersNode);
- this.displayLabel(row,foldersNode)
- this.treeDiv.appendChild(tab)
-
- if (foldersNode.length > this.FirstChildNode && foldersNode[0]) {
- //there are sub-nodes and the folder is open
- for (var i=this.FirstChildNode; i<foldersNode.length;i++)
- this.redrawNode(foldersNode[i], level+1, (i==foldersNode.length-1 ? 1 : 0), newLeft)
- }
- },
-
- NodeImage: function(td, suffix) {
- var img
- img = document.createElement("img")
- img.src=Rico.imgDir+"node"+suffix+".gif"
- td.appendChild(img)
- },
-
-
- showPlusMinus: function(td,foldersNode,suffix) {
- var img = document.createElement("img")
- img.name=foldersNode[3];
- img.style.cursor='pointer';
- if (foldersNode.length > this.FirstChildNode)
- img.onclick=this.openBranch.bindAsEventListener(this);
- else
- img.onclick=this.getChildren.bindAsEventListener(this);
- var prefix=foldersNode[1] ? "nodem" : "nodep"
- img.src=Rico.imgDir+prefix+suffix+".gif";
- td.appendChild(img)
- },
-
- showFolders: function(td,foldersNode) {
- var img = document.createElement("img")
- if (!foldersNode[2]) {
- img.src=this.options.leafIcon;
- } else {
- img.name=foldersNode[3];
- img.style.cursor='pointer';
- if (foldersNode.length > this.FirstChildNode)
- img.onclick=this.openBranch.bindAsEventListener(this);
- else
- img.onclick=this.getChildren.bindAsEventListener(this);
- img.src=Rico.imgDir+(foldersNode[1] ? "folderopen.gif" : "folderclosed.gif");
- }
- td.appendChild(img)
- },
-
- showCheckBox: function(td,foldersNode) {
- var inp=document.createElement("input")
- inp.type="checkbox"
- inp.name=foldersNode[3]
- td.appendChild(inp)
- },
-
- displayLabel: function(row,foldersNode) {
- if (foldersNode[5]) {
- var span=document.createElement('a');
- span.href='#';
- span.onclick=this.options.defaultAction;
- } else {
- var span=document.createElement('p');
- }
- span.id=this.id+"__"+foldersNode[3];
- var desc=foldersNode[4];
- switch (this.options.nodeIdDisplay) {
- case 'last': desc+=' ('+foldersNode[3]+')'; break;
- case 'first': desc=foldersNode[3]+' - '+desc; break;
- case 'tooltip': span.title=foldersNode[3]; break;
- }
- span.appendChild(document.createTextNode(desc))
- var td=row.insertCell(-1)
- td.appendChild(span)
- },
-
- //when a parent is closed all children also are
- closeFolders: function(foldersNode) {
- var i=0
- if (foldersNode[2]) {
- for (i=this.FirstChildNode; i< foldersNode.length; i++)
- this.closeFolders(foldersNode[i])
- }
- foldersNode[0] = 0
- foldersNode[1] = 0
- },
-
- nodeClick: function(e) {
- var node=Event.element(e);
- if (this.returnValue) {
- var v=node.id;
- var i=v.indexOf('__');
- if (i>=0) v=v.substr(i+2);
- this.returnValue(v,node.innerHTML);
- }
- this.close();
- },
-
- //recurse over the tree structure
- //called by openbranch
- clickOnFolderRec: function(foldersNode, folderName) {
- var i=0
- if (foldersNode[3] == folderName) {
- if (foldersNode[0]) {
- this.closeFolders(foldersNode)
- } else {
- foldersNode[0] = 1
- foldersNode[1] = 1
- }
- } else if (foldersNode[2]) {
- for (i=this.FirstChildNode; i< foldersNode.length; i++)
- this.clickOnFolderRec(foldersNode[i], folderName)
- }
- },
-
- openBranch: function(e) {
- var node=Event.element(e);
- this.clickOnFolderRec(this.foldersTree, node.name)
- this.timeOutId = setTimeout(this.redrawTree.bind(this),100)
- },
-
- getChildren: function(e) {
- var node=Event.element(e);
- this.loadXMLDoc(node.name)
- this.openBranch(e)
- }
-
-}
-
+// Rico Tree Control\r
+// by Matt Brown\r
+// Oct 2006\r
+// email: dowdybrown@yahoo.com\r
+\r
+// Requires prototype.js and ricoCommon.js\r
+\r
+// each node in nodeIndex is an Array with 6+n positions\r
+// node[0] is 0/1 when the node is closed/open\r
+// node[1] is 0/1 when the folder is closed/open\r
+// node[2] is 1 if the node is a leaf node\r
+// node[3] is the node id\r
+// node[4] is the node description\r
+// node[5] is 1 when the node is selectable, 0 otherwise\r
+// node[6]...node[6+n] are the child nodes\r
+\r
+Rico.TreeControl = Class.create();\r
+\r
+Rico.TreeControl.prototype = {\r
+\r
+ initialize: function(id,url,options) {\r
+ Object.extend(this, new Rico.Popup({ignoreClicks:true}));\r
+ Object.extend(this.options, {\r
+ nodeIdDisplay:'none', // first, last, tooltip, or none\r
+ showCheckBox: false,\r
+ showFolders: false,\r
+ showPlusMinus: true,\r
+ defaultAction: this.nodeClick.bindAsEventListener(this),\r
+ height: '300px',\r
+ width: '300px',\r
+ leafIcon: Rico.imgDir+'doc.gif'\r
+ });\r
+ Object.extend(this.options, options || {});\r
+ this.img=[];\r
+ this.FirstChildNode=6;\r
+ this.nodeIndex={};\r
+ this.nodeCount=0;\r
+ this.foldersTree=0;\r
+ this.timeOutId=0;\r
+ this.id=id;\r
+ this.dataSource=url;\r
+ this.close=this.closePopup;\r
+ },\r
+\r
+ atLoad : function() {\r
+ var imgsrc = new Array("node.gif","nodelast.gif","folderopen.gif","folderclosed.gif");\r
+ for (i=0;i<imgsrc.length;i++) {\r
+ this.img[i] = new Image\r
+ this.img[i].src = Rico.imgDir+imgsrc[i]\r
+ //this.img[i].src = Rico.imgDir + imgsrc[i]\r
+ }\r
+ this.treeDiv=document.createElement("div");\r
+ this.treeDiv.id=this.id;\r
+ this.treeDiv.className='ricoTree';\r
+ this.treeDiv.style.height=this.options.height;\r
+ this.treeDiv.style.width=this.options.width;\r
+ this.container=document.createElement("div");\r
+ this.container.style.display="none"\r
+ this.container.className='ricoTreeContainer';\r
+ this.container.appendChild(this.treeDiv);\r
+ document.body.appendChild(this.container);\r
+ this.setDiv(this.container);\r
+ this.close();\r
+ },\r
+\r
+ // Building the data in the tree\r
+ open: function() {\r
+ this.openPopup();\r
+ if (this.nodeCount==0) this.loadXMLDoc();\r
+ },\r
+\r
+ loadXMLDoc: function(branchPin) {\r
+ var parms="id="+this.id;\r
+ if (branchPin) parms+="&Parent="+branchPin;\r
+ Rico.writeDebugMsg('Tree loadXMLDoc:\n'+parms+'\n'+this.dataSource);\r
+ new Ajax.Request(this.dataSource, {parameters:parms,method:'get',onComplete:this.processResponse.bind(this)});\r
+ },\r
+\r
+ processResponse: function(request) {\r
+ var response = request.responseXML.getElementsByTagName("ajax-response");\r
+ if (response == null || response.length != 1) return;\r
+ var rowsElement = response[0].getElementsByTagName('rows')[0];\r
+ var trs = rowsElement.getElementsByTagName("tr");\r
+ //alert('processResponse: '+trs.length);\r
+ for ( var i=0 ; i < trs.length; i++ ) {\r
+ var cells = trs[i].getElementsByTagName("td");\r
+ if (cells.length != 5) continue;\r
+ // cells[0]=parent node id\r
+ // cells[1]=node id\r
+ // cells[2]=description\r
+ // cells[3]=L/zero (leaf), C/non-zero (container)\r
+ // cells[4]= 0->not selectable, 1->selectable (use default action), otherwise the node is selectable and cells[4] contains the action\r
+ var content=[];\r
+ for (var j=0; j<cells.length; j++)\r
+ content[j]=this.getContent(cells[j]);\r
+ //content[j]=RicoUtil.getContentAsString(cells[j]);\r
+ var node=this.addNode(content[3],content[1],content[2],content[4]);\r
+ if (this.foldersTree==0) {\r
+ this.foldersTree = node;\r
+ node[0]=1;\r
+ node[1]=1;\r
+ } else {\r
+ var parentNode=this.nodeIndex[content[0]]\r
+ if (typeof parentNode=='undefined')\r
+ alert('ERROR!\nReceived invalid response from server - could not find parent in existing tree:\n'+content[0]);\r
+ else\r
+ parentNode.push(node);\r
+ }\r
+ }\r
+ if (this.nodeCount==1 && node[2])\r
+ this.loadXMLDoc(node[3]);\r
+ else\r
+ this.redrawTree();\r
+ },\r
+\r
+ getContent: function(cell) {\r
+ if (cell.innerHTML) return cell.innerHTML;\r
+ switch (cell.childNodes.length) {\r
+ case 0: return "";\r
+ case 1: return cell.firstChild.nodeValue;\r
+ default: return cell.childNodes[1].nodeValue;\r
+ }\r
+ },\r
+\r
+ // create new node\r
+ // NodeType is "C" or non-zero (container), or "L" or zero (leaf)\r
+ // id is the unique identifier for the node\r
+ // desc is the text displayed to the user\r
+ addNode: function(NodeType,id,desc,selectable) {\r
+ var arrayAux\r
+ //alert("addNode: " + desc + " (" + selectable + ")")\r
+ arrayAux = new Array\r
+ arrayAux[0] = 0\r
+ arrayAux[1] = 0\r
+ arrayAux[2] = (NodeType=='0' || NodeType.toUpperCase()=='L' ? 0 : 1)\r
+ arrayAux[3] = id\r
+ arrayAux[4] = desc\r
+ arrayAux[5] = parseInt(selectable);\r
+ this.nodeIndex[id]=arrayAux\r
+ this.nodeCount++;\r
+ \r
+ return arrayAux\r
+ },\r
+\r
+ RemoveAllChildren: function(obj) {\r
+ while (obj.hasChildNodes()) {\r
+ this.RemoveAllChildren(obj.childNodes[0])\r
+ obj.removeChild(obj.childNodes[0])\r
+ }\r
+ },\r
+\r
+ redrawTree: function() {\r
+ //alert('redrawTree');\r
+ this.RemoveAllChildren(this.treeDiv)\r
+ this.redrawNode(this.foldersTree, 0, 1, [])\r
+ },\r
+\r
+ DisplayImages: function(row,arNames) {\r
+ var i,img,td\r
+ for(i=0;i<arNames.length;i++) {\r
+ img = document.createElement("img")\r
+ img.src=Rico.imgDir+arNames[i] + ".gif"\r
+ td=row.insertCell(-1)\r
+ td.appendChild(img)\r
+ }\r
+ },\r
+\r
+ redrawNode: function(foldersNode, level, lastNode, leftSide) {\r
+ var tab,row\r
+ //alert("redrawNode at level " + level + " (" + foldersNode[3] + ")")\r
+ \r
+ tab = document.createElement("table")\r
+ tab.border=0\r
+ tab.cellSpacing=0\r
+ tab.cellPadding=0\r
+ row=tab.insertRow(0)\r
+ this.DisplayImages(row,leftSide)\r
+ var newLeft=leftSide.slice(0);\r
+ if (level>0) {\r
+ var suffix=lastNode ? 'last' : '';\r
+ if (this.options.showPlusMinus && foldersNode[2])\r
+ this.showPlusMinus(row.insertCell(-1),foldersNode,suffix);\r
+ else\r
+ this.NodeImage(row.insertCell(-1),suffix)\r
+ newLeft.push(lastNode ? "nodeblank" : "nodeline")\r
+ }\r
+ if (this.options.showFolders)\r
+ this.showFolders(row.insertCell(-1),foldersNode);\r
+ if (this.options.showCheckBox && foldersNode[5])\r
+ this.showCheckBox(row.insertCell(-1),foldersNode);\r
+ this.displayLabel(row,foldersNode)\r
+ this.treeDiv.appendChild(tab)\r
+ \r
+ if (foldersNode.length > this.FirstChildNode && foldersNode[0]) {\r
+ //there are sub-nodes and the folder is open\r
+ for (var i=this.FirstChildNode; i<foldersNode.length;i++)\r
+ this.redrawNode(foldersNode[i], level+1, (i==foldersNode.length-1 ? 1 : 0), newLeft)\r
+ }\r
+ },\r
+\r
+ NodeImage: function(td, suffix) {\r
+ var img\r
+ img = document.createElement("img")\r
+ img.src=Rico.imgDir+"node"+suffix+".gif"\r
+ td.appendChild(img)\r
+ },\r
+\r
+\r
+ showPlusMinus: function(td,foldersNode,suffix) {\r
+ var img = document.createElement("img")\r
+ img.name=foldersNode[3];\r
+ img.style.cursor='pointer';\r
+ if (foldersNode.length > this.FirstChildNode)\r
+ img.onclick=this.openBranch.bindAsEventListener(this);\r
+ else\r
+ img.onclick=this.getChildren.bindAsEventListener(this);\r
+ var prefix=foldersNode[1] ? "nodem" : "nodep"\r
+ img.src=Rico.imgDir+prefix+suffix+".gif";\r
+ td.appendChild(img)\r
+ },\r
+\r
+ showFolders: function(td,foldersNode) {\r
+ var img = document.createElement("img")\r
+ if (!foldersNode[2]) {\r
+ img.src=this.options.leafIcon;\r
+ } else {\r
+ img.name=foldersNode[3];\r
+ img.style.cursor='pointer';\r
+ if (foldersNode.length > this.FirstChildNode)\r
+ img.onclick=this.openBranch.bindAsEventListener(this);\r
+ else\r
+ img.onclick=this.getChildren.bindAsEventListener(this);\r
+ img.src=Rico.imgDir+(foldersNode[1] ? "folderopen.gif" : "folderclosed.gif");\r
+ }\r
+ td.appendChild(img)\r
+ },\r
+\r
+ showCheckBox: function(td,foldersNode) {\r
+ var inp=document.createElement("input")\r
+ inp.type="checkbox"\r
+ inp.name=foldersNode[3]\r
+ td.appendChild(inp)\r
+ },\r
+\r
+ displayLabel: function(row,foldersNode) {\r
+ if (foldersNode[5]) {\r
+ var span=document.createElement('a');\r
+ span.href='#';\r
+ span.onclick=this.options.defaultAction;\r
+ } else {\r
+ var span=document.createElement('p');\r
+ }\r
+ span.id=this.id+"__"+foldersNode[3];\r
+ var desc=foldersNode[4];\r
+ switch (this.options.nodeIdDisplay) {\r
+ case 'last': desc+=' ('+foldersNode[3]+')'; break;\r
+ case 'first': desc=foldersNode[3]+' - '+desc; break;\r
+ case 'tooltip': span.title=foldersNode[3]; break;\r
+ }\r
+ span.appendChild(document.createTextNode(desc))\r
+ var td=row.insertCell(-1)\r
+ td.appendChild(span)\r
+ },\r
+\r
+ //when a parent is closed all children also are\r
+ closeFolders: function(foldersNode) {\r
+ var i=0\r
+ if (foldersNode[2]) {\r
+ for (i=this.FirstChildNode; i< foldersNode.length; i++)\r
+ this.closeFolders(foldersNode[i])\r
+ }\r
+ foldersNode[0] = 0\r
+ foldersNode[1] = 0\r
+ },\r
+ \r
+ nodeClick: function(e) {\r
+ var node=Event.element(e);\r
+ if (this.returnValue) {\r
+ var v=node.id;\r
+ var i=v.indexOf('__');\r
+ if (i>=0) v=v.substr(i+2);\r
+ this.returnValue(v,node.innerHTML);\r
+ }\r
+ this.close();\r
+ },\r
+\r
+ //recurse over the tree structure\r
+ //called by openbranch\r
+ clickOnFolderRec: function(foldersNode, folderName) {\r
+ var i=0\r
+ if (foldersNode[3] == folderName) {\r
+ if (foldersNode[0]) {\r
+ this.closeFolders(foldersNode)\r
+ } else {\r
+ foldersNode[0] = 1\r
+ foldersNode[1] = 1\r
+ }\r
+ } else if (foldersNode[2]) {\r
+ for (i=this.FirstChildNode; i< foldersNode.length; i++)\r
+ this.clickOnFolderRec(foldersNode[i], folderName)\r
+ }\r
+ },\r
+\r
+ openBranch: function(e) {\r
+ var node=Event.element(e);\r
+ this.clickOnFolderRec(this.foldersTree, node.name)\r
+ this.timeOutId = setTimeout(this.redrawTree.bind(this),100)\r
+ },\r
+\r
+ getChildren: function(e) {\r
+ var node=Event.element(e);\r
+ this.loadXMLDoc(node.name)\r
+ this.openBranch(e)\r
+ }\r
+\r
+}\r
+\r
Rico.includeLoaded('ricoTree.js');
-/*****************************************************************
- Page : livegrid_DE.js
- Description : LiveGrid text for German menus
- Translator: rainer@langheiter@.com
- Version 0.1 - please send corrections to dowdybrown@yahoo.com
-******************************************************************/
-// 2007-02-09, made some improvements - debach@gmx.de
-
-RicoTranslate.addPhrase("Sort by","Sortiert nach")
-RicoTranslate.addPhrase("Filter by","Gefiltert nach")
-RicoTranslate.addPhrase("Hide","Verbergen")
-RicoTranslate.addPhrase("Show","Zeige")
-RicoTranslate.addPhrase("Show All","Alle zeigen")
-RicoTranslate.addPhrase("Ascending","Aufsteigend")
-RicoTranslate.addPhrase("Descending","Absteigend")
-
-RicoTranslate.addPhrase("Include only this value","Nur diesen Wert einbeziehen")
-RicoTranslate.addPhrase("Exclude this value","Diesen Wert ausschließen")
-RicoTranslate.addPhrase("Exclude this value also","Diesen Wert ebenfalls ausschließen")
-RicoTranslate.addPhrase("Greater than or equal to this value","Größer oder gleich diesem Wert")
-RicoTranslate.addPhrase("Less than or equal to this value","Kleiner oder gleich diesem wert")
-RicoTranslate.addPhrase("Contains keyword","Enthält Schlüsselwort")
-RicoTranslate.addPhrase("Change keyword","Schlüsselwort ändern ")
-RicoTranslate.addPhrase("Enter keyword to search for","Schlüsselwort eintragen, nach dem gesucht werden soll")
-RicoTranslate.addPhrase("use * as a wildcard","verwende * als Wildcard")
-RicoTranslate.addPhrase("Remove filter","Entferne Filter")
-
-RicoTranslate.addPhrase("Waiting for data","Warte auf Daten")
-RicoTranslate.addPhrase("Request for data timed out","Zeitüberschreitung")
-
-RicoTranslate.addPhrase("No matching records","Keine übereinstimmenden Einträge")
-RicoTranslate.addPhrase("Listing records","Zeige Einträge")
-RicoTranslate.addPhrase("of","von")
-RicoTranslate.addPhrase("of about","von ungefähr")
-
-RicoTranslate.monthNames=["Januar", "Februar", "März", "April", "Mai","Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]
-RicoTranslate.dayNames=["Sonntag", "Montag","Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]
-
-RicoTranslate.thouSep="."
-RicoTranslate.decPoint=","
-RicoTranslate.dateFmt="dd.mm.yyyy"
-
-// added for 22 August release
-
-RicoTranslate.addPhrase("Print","Druck")
-RicoTranslate.addPhrase("Export","Exportiert")
-RicoTranslate.addPhrase("Visible rows","Sichtbare Zeilen")
-RicoTranslate.addPhrase("All rows","Alle Zeilen")
-
-// added for Feb 2007 release
-
-RicoTranslate.addPhrase("Loading","Lade")
-RicoTranslate.addPhrase("minutes before your session expires","Minuten, bevor Ihre Sitzung abläuft") // formal
-//RicoTranslate.addPhrase("minutes before your session expires","Minuten, bevor deine Sitzung abläuft") // informal
-//RicoTranslate.addPhrase("minutes before your session expires","Minuten, bevor die Sitzung abläuft") // indirect
-RicoTranslate.addPhrase("EXPIRED","ABGELAUFEN")
-RicoTranslate.addPhrase("Close","Schließen")
-RicoTranslate.addPhrase("Cancel","Abbrechen")
-RicoTranslate.addPhrase("Save","Speichere")
-RicoTranslate.addPhrase("Add","Erstelle")
-RicoTranslate.addPhrase("Edit","Bearbeite")
-RicoTranslate.addPhrase("Delete","Lösche")
-RicoTranslate.addPhrase("Are you sure you want to delete","Möchten Sie dies wirklich löschen:") // formal
-//RicoTranslate.addPhrase("Are you sure you want to delete","Möchtest du das wirklich löschen:") // informal
-//RicoTranslate.addPhrase("Are you sure you want to delete","Wirklich löschen:") // indirect
-RicoTranslate.addPhrase("record","Eintrag")
-RicoTranslate.addPhrase("this record","diesen Eintrag") // "dieser"?
-RicoTranslate.addPhrase("new record","neuen Eintrag") // "neuer"?
-RicoTranslate.addPhrase("Please enter","Bitte eingeben")
-RicoTranslate.addPhrase("a value for","einen Wert für")
-RicoTranslate.addPhrase("an integer value for","einen ganzzahligen Wert für")
-RicoTranslate.addPhrase("a positive integer value for","einen positiven ganzzahligen Wert für")
-RicoTranslate.addPhrase("The request returned an error","Die Anfrage ergab einen Fehler")
-
-// for demo only:
-
-RicoTranslate.addPhrase("Show orders for","Zeige Bestellungen für")
-RicoTranslate.addPhrase("Show order detail","Zeige Bestelldetails")
-RicoTranslate.addPhrase("order","Bestellung")
-RicoTranslate.addPhrase("this order","diese Bestellung")
-RicoTranslate.addPhrase("new order","neue Bestellung")
-
-// add your own here:
-
-RicoTranslate.addPhrase("Visible rows to web page","Sichtbare Zeilen auf eine Webseite")
+/*****************************************************************\r
+ Page : livegrid_DE.js\r
+ Description : LiveGrid text for German menus\r
+ Translator: rainer@langheiter@.com\r
+ Version 0.1 - please send corrections to dowdybrown@yahoo.com\r
+******************************************************************/\r
+// 2007-02-09, made some improvements - debach@gmx.de\r
+\r
+RicoTranslate.addPhrase("Sort by","Sortiert nach")\r
+RicoTranslate.addPhrase("Filter by","Gefiltert nach")\r
+RicoTranslate.addPhrase("Hide","Verbergen")\r
+RicoTranslate.addPhrase("Show","Zeige")\r
+RicoTranslate.addPhrase("Show All","Alle zeigen")\r
+RicoTranslate.addPhrase("Ascending","Aufsteigend")\r
+RicoTranslate.addPhrase("Descending","Absteigend")\r
+\r
+RicoTranslate.addPhrase("Include only this value","Nur diesen Wert einbeziehen")\r
+RicoTranslate.addPhrase("Exclude this value","Diesen Wert ausschließen")\r
+RicoTranslate.addPhrase("Exclude this value also","Diesen Wert ebenfalls ausschließen")\r
+RicoTranslate.addPhrase("Greater than or equal to this value","Größer oder gleich diesem Wert")\r
+RicoTranslate.addPhrase("Less than or equal to this value","Kleiner oder gleich diesem wert")\r
+RicoTranslate.addPhrase("Contains keyword","Enthält Schlüsselwort")\r
+RicoTranslate.addPhrase("Change keyword","Schlüsselwort ändern ")\r
+RicoTranslate.addPhrase("Enter keyword to search for","Schlüsselwort eintragen, nach dem gesucht werden soll")\r
+RicoTranslate.addPhrase("use * as a wildcard","verwende * als Wildcard")\r
+RicoTranslate.addPhrase("Remove filter","Entferne Filter")\r
+\r
+RicoTranslate.addPhrase("Waiting for data","Warte auf Daten")\r
+RicoTranslate.addPhrase("Request for data timed out","Zeitüberschreitung")\r
+\r
+RicoTranslate.addPhrase("No matching records","Keine übereinstimmenden Einträge")\r
+RicoTranslate.addPhrase("Listing records","Zeige Einträge")\r
+RicoTranslate.addPhrase("of","von")\r
+RicoTranslate.addPhrase("of about","von ungefähr")\r
+\r
+RicoTranslate.monthNames=["Januar", "Februar", "März", "April", "Mai","Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]\r
+RicoTranslate.dayNames=["Sonntag", "Montag","Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]\r
+\r
+RicoTranslate.thouSep="."\r
+RicoTranslate.decPoint=","\r
+RicoTranslate.dateFmt="dd.mm.yyyy"\r
+\r
+// added for 22 August release\r
+\r
+RicoTranslate.addPhrase("Print","Druck")\r
+RicoTranslate.addPhrase("Export","Exportiert")\r
+RicoTranslate.addPhrase("Visible rows","Sichtbare Zeilen")\r
+RicoTranslate.addPhrase("All rows","Alle Zeilen")\r
+\r
+// added for Feb 2007 release\r
+\r
+RicoTranslate.addPhrase("Loading","Lade")\r
+RicoTranslate.addPhrase("minutes before your session expires","Minuten, bevor Ihre Sitzung abläuft") // formal\r
+//RicoTranslate.addPhrase("minutes before your session expires","Minuten, bevor deine Sitzung abläuft") // informal\r
+//RicoTranslate.addPhrase("minutes before your session expires","Minuten, bevor die Sitzung abläuft") // indirect\r
+RicoTranslate.addPhrase("EXPIRED","ABGELAUFEN")\r
+RicoTranslate.addPhrase("Close","Schließen")\r
+RicoTranslate.addPhrase("Cancel","Abbrechen")\r
+RicoTranslate.addPhrase("Save","Speichere")\r
+RicoTranslate.addPhrase("Add","Erstelle")\r
+RicoTranslate.addPhrase("Edit","Bearbeite")\r
+RicoTranslate.addPhrase("Delete","Lösche")\r
+RicoTranslate.addPhrase("Are you sure you want to delete","Möchten Sie dies wirklich löschen:") // formal\r
+//RicoTranslate.addPhrase("Are you sure you want to delete","Möchtest du das wirklich löschen:") // informal\r
+//RicoTranslate.addPhrase("Are you sure you want to delete","Wirklich löschen:") // indirect\r
+RicoTranslate.addPhrase("record","Eintrag")\r
+RicoTranslate.addPhrase("this record","diesen Eintrag") // "dieser"?\r
+RicoTranslate.addPhrase("new record","neuen Eintrag") // "neuer"?\r
+RicoTranslate.addPhrase("Please enter","Bitte eingeben")\r
+RicoTranslate.addPhrase("a value for","einen Wert für")\r
+RicoTranslate.addPhrase("an integer value for","einen ganzzahligen Wert für")\r
+RicoTranslate.addPhrase("a positive integer value for","einen positiven ganzzahligen Wert für")\r
+RicoTranslate.addPhrase("The request returned an error","Die Anfrage ergab einen Fehler")\r
+\r
+// for demo only:\r
+\r
+RicoTranslate.addPhrase("Show orders for","Zeige Bestellungen für")\r
+RicoTranslate.addPhrase("Show order detail","Zeige Bestelldetails")\r
+RicoTranslate.addPhrase("order","Bestellung")\r
+RicoTranslate.addPhrase("this order","diese Bestellung")\r
+RicoTranslate.addPhrase("new order","neue Bestellung")\r
+\r
+// add your own here:\r
+\r
+RicoTranslate.addPhrase("Visible rows to web page","Sichtbare Zeilen auf eine Webseite")\r
RicoTranslate.addPhrase("All rows to web page","Alle Zeilen auf eine Webseite")
\ No newline at end of file
-/*****************************************************************
- Page : livegrid_es.js
- Description : LiveGrid text for Spanish menus
- Version 0.2 (by Marco Scarnatto)
- If you have better translations, or would like to include
- translations for another language, please send them to dowdybrown@yahoo.com
-******************************************************************/
-
-RicoTranslate.addPhrase("Sort by","Ordenar por")
-RicoTranslate.addPhrase("Filter by","Filtrar por")
-RicoTranslate.addPhrase("Hide","Ocultar")
-RicoTranslate.addPhrase("Show","Mostrar")
-RicoTranslate.addPhrase("Show All","Mostrar todo")
-RicoTranslate.addPhrase("Ascending","Ascendente")
-RicoTranslate.addPhrase("Descending","Descendente")
-
-RicoTranslate.addPhrase("Include only this value","Incluir solo este valor")
-RicoTranslate.addPhrase("Exclude this value","Excluir este valor")
-RicoTranslate.addPhrase("Exclude this value also","Excluir este valor también")
-RicoTranslate.addPhrase("Greater than or equal to this value","Mayor o igual a este valor")
-RicoTranslate.addPhrase("Less than or equal to this value","Menor o igual a este valor")
-RicoTranslate.addPhrase("Contains keyword","Contiene el texto")
-RicoTranslate.addPhrase("Change keyword","Cambiar texto")
-RicoTranslate.addPhrase("Enter keyword to search for","Ingrese texto a buscar")
-RicoTranslate.addPhrase("use * as a wildcard","use * como un comodín")
-RicoTranslate.addPhrase("Remove filter","Quitar filtro")
-
-RicoTranslate.addPhrase("Waiting for data","Esperando datos")
-RicoTranslate.addPhrase("Request for data timed out","Tiempo excedido en recibir datos ")
-
-RicoTranslate.addPhrase("No matching records","No hay datos coincidentes")
-RicoTranslate.addPhrase("Listing records","Mostrando datos")
-RicoTranslate.addPhrase("of","de")
-RicoTranslate.addPhrase("of about","de alrededor de")
-
-RicoTranslate.thouSep=","
-RicoTranslate.decPoint="."
-RicoTranslate.dateFmt="dd/mm/yyyy"
-
-RicoTranslate.monthNames=['Enero','Febrero', 'Marzo', 'Abril', 'Mayo','Junio', 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre']
-RicoTranslate.dayNames=['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado']
-
-// added for Aug 2006 release
-
-RicoTranslate.addPhrase("Print","Imprimir")
-RicoTranslate.addPhrase("Export","Exportar")
-RicoTranslate.addPhrase("Visible rows","Filas visibles")
-RicoTranslate.addPhrase("All rows","Todas las filas")
-
+/*****************************************************************\r
+ Page : livegrid_es.js\r
+ Description : LiveGrid text for Spanish menus\r
+ Version 0.2 (by Marco Scarnatto)\r
+ If you have better translations, or would like to include\r
+ translations for another language, please send them to dowdybrown@yahoo.com\r
+******************************************************************/\r
+\r
+RicoTranslate.addPhrase("Sort by","Ordenar por")\r
+RicoTranslate.addPhrase("Filter by","Filtrar por")\r
+RicoTranslate.addPhrase("Hide","Ocultar")\r
+RicoTranslate.addPhrase("Show","Mostrar")\r
+RicoTranslate.addPhrase("Show All","Mostrar todo")\r
+RicoTranslate.addPhrase("Ascending","Ascendente")\r
+RicoTranslate.addPhrase("Descending","Descendente")\r
+\r
+RicoTranslate.addPhrase("Include only this value","Incluir solo este valor")\r
+RicoTranslate.addPhrase("Exclude this value","Excluir este valor")\r
+RicoTranslate.addPhrase("Exclude this value also","Excluir este valor también")\r
+RicoTranslate.addPhrase("Greater than or equal to this value","Mayor o igual a este valor")\r
+RicoTranslate.addPhrase("Less than or equal to this value","Menor o igual a este valor")\r
+RicoTranslate.addPhrase("Contains keyword","Contiene el texto")\r
+RicoTranslate.addPhrase("Change keyword","Cambiar texto")\r
+RicoTranslate.addPhrase("Enter keyword to search for","Ingrese texto a buscar")\r
+RicoTranslate.addPhrase("use * as a wildcard","use * como un comodín")\r
+RicoTranslate.addPhrase("Remove filter","Quitar filtro")\r
+\r
+RicoTranslate.addPhrase("Waiting for data","Esperando datos")\r
+RicoTranslate.addPhrase("Request for data timed out","Tiempo excedido en recibir datos ")\r
+\r
+RicoTranslate.addPhrase("No matching records","No hay datos coincidentes")\r
+RicoTranslate.addPhrase("Listing records","Mostrando datos")\r
+RicoTranslate.addPhrase("of","de")\r
+RicoTranslate.addPhrase("of about","de alrededor de")\r
+\r
+RicoTranslate.thouSep=","\r
+RicoTranslate.decPoint="."\r
+RicoTranslate.dateFmt="dd/mm/yyyy"\r
+\r
+RicoTranslate.monthNames=['Enero','Febrero', 'Marzo', 'Abril', 'Mayo','Junio', 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre']\r
+RicoTranslate.dayNames=['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado']\r
+\r
+// added for Aug 2006 release\r
+\r
+RicoTranslate.addPhrase("Print","Imprimir")\r
+RicoTranslate.addPhrase("Export","Exportar")\r
+RicoTranslate.addPhrase("Visible rows","Filas visibles")\r
+RicoTranslate.addPhrase("All rows","Todas las filas")\r
+\r
// added for Feb 2007 release
RicoTranslate.addPhrase("Loading","Cargar")
RicoTranslate.addPhrase("minutes before your session expires","minutos antes de su sesión expiran")
-RicoTranslate.addPhrase("EXPIRED","EXPIRADO")
+RicoTranslate.addPhrase("EXPIRED","EXPIRADO")\r
RicoTranslate.addPhrase("Close","Cerrar")
RicoTranslate.addPhrase("Cancel","Cancelar")
RicoTranslate.addPhrase("Save","Guardar")
RicoTranslate.addPhrase("Add","Añadir")
RicoTranslate.addPhrase("Edit","Editar")
RicoTranslate.addPhrase("Delete","Borrar")
-RicoTranslate.addPhrase("Are you sure you want to delete","¿Está seguro de que quiere borrar")
+RicoTranslate.addPhrase("Are you sure you want to delete","¿Está seguro de que quiere borrar")\r
RicoTranslate.addPhrase("record","expediente")
RicoTranslate.addPhrase("this record","este expediente")
RicoTranslate.addPhrase("new record","expediente nuevo")
RicoTranslate.addPhrase("a positive integer value for","un valor positivo del número entero para")
RicoTranslate.addPhrase("The request returned an error","Un error ocurrió mientras que recibía datos")
-// for demo only:
-
-RicoTranslate.addPhrase("Show orders for","Mostrar las ordenes de")
-RicoTranslate.addPhrase("Show order detail","Mostrar detalle de la orden")
-RicoTranslate.addPhrase("order","la orden")
-RicoTranslate.addPhrase("this order","esta orden")
-RicoTranslate.addPhrase("new order","nueva orden")
-
-// add your own here:
+// for demo only:\r
+\r
+RicoTranslate.addPhrase("Show orders for","Mostrar las ordenes de")\r
+RicoTranslate.addPhrase("Show order detail","Mostrar detalle de la orden")\r
+RicoTranslate.addPhrase("order","la orden")\r
+RicoTranslate.addPhrase("this order","esta orden")\r
+RicoTranslate.addPhrase("new order","nueva orden")\r
+\r
+// add your own here:\r
RicoTranslate.addPhrase("Show orders for","Montrer les commandes pour")
RicoTranslate.addPhrase("Show order detail","Montrer les détails de la commande")
-RicoTranslate.addPhrase("order","la commande")
-RicoTranslate.addPhrase("this order","cette commande")
-RicoTranslate.addPhrase("new order","nouvelle commande")
+RicoTranslate.addPhrase("order","la commande")\r
+RicoTranslate.addPhrase("this order","cette commande")\r
+RicoTranslate.addPhrase("new order","nouvelle commande")\r
// add your own here:
RicoTranslate.addPhrase("Show orders for","Mostra gli ordini per")
RicoTranslate.addPhrase("Show order detail","Mostra i dettagli dell'ordine")
-RicoTranslate.addPhrase("order","ordine")
-RicoTranslate.addPhrase("this order","questo ordine")
-RicoTranslate.addPhrase("new order","nuovo ordine")
+RicoTranslate.addPhrase("order","ordine")\r
+RicoTranslate.addPhrase("this order","questo ordine")\r
+RicoTranslate.addPhrase("new order","nuovo ordine")\r
// added for 22 August release
-/*****************************************************************
- Page : livegrid_ja.js
- Description : LiveGrid text for Japanese menus
- Translator: hsur
-******************************************************************/
-
-RicoTranslate.addPhrase("Sort by","ソート")
-RicoTranslate.addPhrase("Filter by","絞込み")
-RicoTranslate.addPhrase("Hide","隠す")
-RicoTranslate.addPhrase("Show","表示")
-RicoTranslate.addPhrase("Ascending","昇順")
-RicoTranslate.addPhrase("Descending","降順")
-
-RicoTranslate.addPhrase("Include only this value","この値を含む")
-RicoTranslate.addPhrase("Exclude this value","この値を除く")
-RicoTranslate.addPhrase("Greater than or equal to this value","これ以上の値")
-RicoTranslate.addPhrase("Less than or equal to this value","これ以下の値")
-RicoTranslate.addPhrase("Contains keyword","このキーワードを含む")
-RicoTranslate.addPhrase("Change keyword","キーワードを変更")
-RicoTranslate.addPhrase("Enter keyword to search for","キーワードを入力してください")
-RicoTranslate.addPhrase("use * as a wildcard","ワイルドカードとして*を使います")
-RicoTranslate.addPhrase("also","も")
-RicoTranslate.addPhrase("Remove filter","絞込みを削除")
-
-RicoTranslate.addPhrase("Waiting for data","データ取得中")
-RicoTranslate.addPhrase("Request for data timed out","タイムアウトしました")
-
-RicoTranslate.addPhrase("No matching records","一致するレコードはありません")
-RicoTranslate.addPhrase("Listing records","")
-RicoTranslate.addPhrase("of","of")
-RicoTranslate.addPhrase("of about","of about")
-
-RicoTranslate.monthNames=["1月", "2月", "3月", "4月", "5月","6月", "7月", "8月", "9月", "10月", "11月", "12月"]
-RicoTranslate.dayNames=["月","火", "水","木", "金", "土", "日"]
-
-RicoTranslate.thouSep="."
-RicoTranslate.decPoint=","
-RicoTranslate.dateFmt="yyyy/mm/dd"
-RicoTranslate.timeFmt="HH:nn:ss"
-
-// added for 22 August release
-
-RicoTranslate.addPhrase("Print","印刷")
-RicoTranslate.addPhrase("Export","抽出")
-RicoTranslate.addPhrase("Visible rows","Visible rows")
-RicoTranslate.addPhrase("All rows","全ての行")
-
-// add your own here:
-
+/*****************************************************************\r
+ Page : livegrid_ja.js\r
+ Description : LiveGrid text for Japanese menus\r
+ Translator: hsur\r
+******************************************************************/\r
+\r
+RicoTranslate.addPhrase("Sort by","ソート")\r
+RicoTranslate.addPhrase("Filter by","絞込み")\r
+RicoTranslate.addPhrase("Hide","隠す")\r
+RicoTranslate.addPhrase("Show","表示")\r
+RicoTranslate.addPhrase("Ascending","昇順")\r
+RicoTranslate.addPhrase("Descending","降順")\r
+\r
+RicoTranslate.addPhrase("Include only this value","この値を含む")\r
+RicoTranslate.addPhrase("Exclude this value","この値を除く")\r
+RicoTranslate.addPhrase("Greater than or equal to this value","これ以上の値")\r
+RicoTranslate.addPhrase("Less than or equal to this value","これ以下の値")\r
+RicoTranslate.addPhrase("Contains keyword","このキーワードを含む")\r
+RicoTranslate.addPhrase("Change keyword","キーワードを変更")\r
+RicoTranslate.addPhrase("Enter keyword to search for","キーワードを入力してください")\r
+RicoTranslate.addPhrase("use * as a wildcard","ワイルドカードとして*を使います")\r
+RicoTranslate.addPhrase("also","も")\r
+RicoTranslate.addPhrase("Remove filter","絞込みを削除")\r
+\r
+RicoTranslate.addPhrase("Waiting for data","データ取得中")\r
+RicoTranslate.addPhrase("Request for data timed out","タイムアウトしました")\r
+\r
+RicoTranslate.addPhrase("No matching records","一致するレコードはありません")\r
+RicoTranslate.addPhrase("Listing records","")\r
+RicoTranslate.addPhrase("of","of")\r
+RicoTranslate.addPhrase("of about","of about")\r
+\r
+RicoTranslate.monthNames=["1月", "2月", "3月", "4月", "5月","6月", "7月", "8月", "9月", "10月", "11月", "12月"]\r
+RicoTranslate.dayNames=["月","火", "水","木", "金", "土", "日"]\r
+\r
+RicoTranslate.thouSep="."\r
+RicoTranslate.decPoint=","\r
+RicoTranslate.dateFmt="yyyy/mm/dd"\r
+RicoTranslate.timeFmt="HH:nn:ss"\r
+\r
+// added for 22 August release\r
+\r
+RicoTranslate.addPhrase("Print","印刷")\r
+RicoTranslate.addPhrase("Export","抽出")\r
+RicoTranslate.addPhrase("Visible rows","Visible rows")\r
+RicoTranslate.addPhrase("All rows","全ての行")\r
+\r
+// add your own here:\r
+\r
-/*****************************************************************
- Page : livegrid_pt.js (brazilian)
- Description : LiveGrid text for Brazilian Portuguese menus
- Version 0.1 (by Adriano Accorsi - adriano@token.com.br)
- If you have better translations, or would like to include
- translations for another language, please send them to dowdybrown@yahoo.com
-******************************************************************/
-
-RicoTranslate.addPhrase("Sort by","Ordenar por")
-RicoTranslate.addPhrase("Filter by","Filtrar por")
-RicoTranslate.addPhrase("Hide","Ocultar")
-RicoTranslate.addPhrase("Show","Exibir")
-RicoTranslate.addPhrase("Show All","Exibir tudo")
-RicoTranslate.addPhrase("Ascending","Ascendente")
-RicoTranslate.addPhrase("Descending","Descendente")
-
-RicoTranslate.addPhrase("Include only this value","Incluir apenas este valor")
-RicoTranslate.addPhrase("Exclude this value","Excluir este valor")
-RicoTranslate.addPhrase("Greater than or equal to this value","Maior ou igual a este valor")
-RicoTranslate.addPhrase("Less than or equal to this value","Menor ou igual a este valor")
-RicoTranslate.addPhrase("Contains keyword","Contém texto")
-RicoTranslate.addPhrase("Change keyword","Alterar texto")
-RicoTranslate.addPhrase("Enter keyword to search for","Informe texto a ser pesquisado")
-RicoTranslate.addPhrase("use * as a wildcard","use * como 'coringa'")
-RicoTranslate.addPhrase("also","também")
-RicoTranslate.addPhrase("Remove filter","Remover filtro")
-
-RicoTranslate.addPhrase("Waiting for data","Aguardando dados")
-RicoTranslate.addPhrase("Request for data timed out","Tempo esgotado para espera de dados")
-
-RicoTranslate.addPhrase("No matching records","Nenhum registro encontrado.")
-RicoTranslate.addPhrase("Listing records","Listar registros")
-RicoTranslate.addPhrase("of","de")
-RicoTranslate.addPhrase("of about","de aproximadamente")
-
-RicoTranslate.thouSep="."
-RicoTranslate.decPoint=","
-RicoTranslate.dateFmt="dd/mm/yyyy"
-
-RicoTranslate.monthNames=["Janeiro", "Fevereiro", "Março", "Abril", "Maio","Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"]
-RicoTranslate.dayNames=["Domingo", "Segunda","Terça", "Quarta", "Quinta", "Sexta", "Sábado"]
-
-// added for 22 August release
-
-RicoTranslate.addPhrase("Print","Imprimir")
-RicoTranslate.addPhrase("Export","Exportar")
-RicoTranslate.addPhrase("Visible rows","Fileiras visíveis")
-RicoTranslate.addPhrase("All rows","Todas as fileiras")
-
-// for demo only:
-
-RicoTranslate.addPhrase("Show orders for","Exibir pedidos de")
-RicoTranslate.addPhrase("Show order detail","Exibir detalhes do pedido")
-
-// add your own here:
+/*****************************************************************\r
+ Page : livegrid_pt.js (brazilian)\r
+ Description : LiveGrid text for Brazilian Portuguese menus\r
+ Version 0.1 (by Adriano Accorsi - adriano@token.com.br)\r
+ If you have better translations, or would like to include\r
+ translations for another language, please send them to dowdybrown@yahoo.com\r
+******************************************************************/\r
+ \r
+RicoTranslate.addPhrase("Sort by","Ordenar por")\r
+RicoTranslate.addPhrase("Filter by","Filtrar por")\r
+RicoTranslate.addPhrase("Hide","Ocultar")\r
+RicoTranslate.addPhrase("Show","Exibir")\r
+RicoTranslate.addPhrase("Show All","Exibir tudo")\r
+RicoTranslate.addPhrase("Ascending","Ascendente")\r
+RicoTranslate.addPhrase("Descending","Descendente")\r
+ \r
+RicoTranslate.addPhrase("Include only this value","Incluir apenas este valor")\r
+RicoTranslate.addPhrase("Exclude this value","Excluir este valor")\r
+RicoTranslate.addPhrase("Greater than or equal to this value","Maior ou igual a este valor")\r
+RicoTranslate.addPhrase("Less than or equal to this value","Menor ou igual a este valor")\r
+RicoTranslate.addPhrase("Contains keyword","Contém texto")\r
+RicoTranslate.addPhrase("Change keyword","Alterar texto")\r
+RicoTranslate.addPhrase("Enter keyword to search for","Informe texto a ser pesquisado")\r
+RicoTranslate.addPhrase("use * as a wildcard","use * como 'coringa'")\r
+RicoTranslate.addPhrase("also","também")\r
+RicoTranslate.addPhrase("Remove filter","Remover filtro")\r
+ \r
+RicoTranslate.addPhrase("Waiting for data","Aguardando dados")\r
+RicoTranslate.addPhrase("Request for data timed out","Tempo esgotado para espera de dados")\r
+ \r
+RicoTranslate.addPhrase("No matching records","Nenhum registro encontrado.")\r
+RicoTranslate.addPhrase("Listing records","Listar registros")\r
+RicoTranslate.addPhrase("of","de")\r
+RicoTranslate.addPhrase("of about","de aproximadamente")\r
+ \r
+RicoTranslate.thouSep="."\r
+RicoTranslate.decPoint=","\r
+RicoTranslate.dateFmt="dd/mm/yyyy"\r
+ \r
+RicoTranslate.monthNames=["Janeiro", "Fevereiro", "Março", "Abril", "Maio","Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"]\r
+RicoTranslate.dayNames=["Domingo", "Segunda","Terça", "Quarta", "Quinta", "Sexta", "Sábado"]\r
+ \r
+// added for 22 August release\r
+\r
+RicoTranslate.addPhrase("Print","Imprimir")\r
+RicoTranslate.addPhrase("Export","Exportar")\r
+RicoTranslate.addPhrase("Visible rows","Fileiras visíveis")\r
+RicoTranslate.addPhrase("All rows","Todas as fileiras")\r
+\r
+// for demo only:\r
+ \r
+RicoTranslate.addPhrase("Show orders for","Exibir pedidos de")\r
+RicoTranslate.addPhrase("Show order detail","Exibir detalhes do pedido")\r
+ \r
+// add your own here:\r
-/*****************************************************************
- Page : livegrid_ru.js
- Description : LiveGrid text for Russian menus
- Version 0.2 (by Illiya Gannitskiy,Alexey Uvarov)
- If you have better translations, or would like to include
- translations for another language, please send them to dowdybrown@yahoo.com
-******************************************************************/
-
-RicoTranslate.addPhrase("Sort by","Ñîðòèðîâêà ïî")
-RicoTranslate.addPhrase("Filter by","Ôèëüòðàöèÿ ïî")
-RicoTranslate.addPhrase("Hide","Ñïðÿòàòü")
-RicoTranslate.addPhrase("Show","Ïîêàçàòü")
-RicoTranslate.addPhrase("Show All","Ïîêàçàòü âñå")
-RicoTranslate.addPhrase("Ascending","Âîçðàñòàþùàÿ")
-RicoTranslate.addPhrase("Descending","Óáûâàþùàÿ")
-
-RicoTranslate.addPhrase("Include only this value","Âêëþ÷èòü òîëüêî ýòî çíà÷åíèå")
-RicoTranslate.addPhrase("Exclude this value","Èñêëþ÷èòü ýòî çíà÷åíèå")
-RicoTranslate.addPhrase("Greater than or equal to this value","Áîëüøå èëè ðàâíî äàííîìó çíà÷åíèþ")
-RicoTranslate.addPhrase("Less than or equal to this value","Ìåíüøå èëè ðàâíî äàííîìó çíà÷åíèþ")
-RicoTranslate.addPhrase("Contains keyword","Ñîäåðæèò çíà÷åíèå")
-RicoTranslate.addPhrase("Change keyword","Èçìåíèòü çíà÷åíèå")
-RicoTranslate.addPhrase("Enter keyword to search for","Èñêàòü ïî êëþ÷ó")
-RicoTranslate.addPhrase("use * as a wildcard","Èñïîëüçîâàòü * äëÿ âñåõ çàïèñåé")
-RicoTranslate.addPhrase("also","òàêæå")
-RicoTranslate.addPhrase("Remove filter","Óáðàòü ôèëüòð")
-
-RicoTranslate.addPhrase("Waiting for data","Îæèäàíèå äàííûõ")
-RicoTranslate.addPhrase("Request for data timed out","Ïðåâûøåí èíòåðâàë îæèäàíèÿ äàííûõ")
-
-RicoTranslate.addPhrase("No matching records","Íåò ñîâïàäåíèé")
-RicoTranslate.addPhrase("Listing records","Ïðîñìîòð çàïèñåé")
-RicoTranslate.addPhrase("of","èç")
-RicoTranslate.addPhrase("of about","èç î")
-
-RicoTranslate.thouSep=","
-RicoTranslate.decPoint="."
-RicoTranslate.dateFmt="dd/mm/yyyy"
-
-RicoTranslate.monthNames=['ßíâàðü','Ôåâðàëü', 'Ìàðò', 'Àïðåëü', 'Ìàé','Èþíü', 'Èþëü','Àâãóñò','Ñåíòÿáðü','Îòêòÿáðü','Íîÿáðü','Äåêàáðü']
-RicoTranslate.dayNames=['Ïîíåäåëüíèê','Âòîðíèê','Ñðåäà','×åòâåðã','Ïÿòíèöà','Ñóááîòà','Âîñêðåñåíüå']
-
-// added for 22 August release
-
-RicoTranslate.addPhrase("Print","Ïå÷àòü")
-RicoTranslate.addPhrase("Export","Ýêñïîðò")
-RicoTranslate.addPhrase("Visible rows","Âèäèìûå çàïèñè")
-RicoTranslate.addPhrase("All rows","Âñå çàïèñè")
-
-// added for Feb 2007 release
-
-RicoTranslate.addPhrase("Loading","Çàãðóçêà")
-RicoTranslate.addPhrase("minutes before your session expires","ìèíóò äî èñòå÷åíèÿ ñåññèè")
-RicoTranslate.addPhrase("EXPIRED","ÈÑÒÅÊËÎ")
-RicoTranslate.addPhrase("Close","Çàêðûòî")
-RicoTranslate.addPhrase("Cancel","Îòìåíà")
-RicoTranslate.addPhrase("Save","Ñîõðàíèòü")
-RicoTranslate.addPhrase("Add","Äîáàâèòü")
-RicoTranslate.addPhrase("Edit","Ðåäàêòèðîâàòü")
-RicoTranslate.addPhrase("Delete","Óäàëèòü")
-RicoTranslate.addPhrase("Are you sure you want to delete","Âû óâåðåííû,÷òî õîòèòå óäàëèòü")
-RicoTranslate.addPhrase("record","çàïèñü")
-RicoTranslate.addPhrase("this record","ýòà çàïèñü")
-RicoTranslate.addPhrase("new record","íîâàÿ çàïèñü")
-RicoTranslate.addPhrase("Please enter","Ïîæàëóéñòà ââåäèòå")
-RicoTranslate.addPhrase("a value for","çíà÷åíèå äëÿ")
-RicoTranslate.addPhrase("an integer value for","öåëîå çíà÷åíèå äëÿ")
-RicoTranslate.addPhrase("a positive integer value for","ïîëîæèòåëüíîå öåëîå çíà÷åíèå äëÿ")
-RicoTranslate.addPhrase("The request returned an error","Çàïðîñ âîçâðàòèë îøèáêó")
-
-
-
-// for demo only:
-
-RicoTranslate.addPhrase("Show orders for","Ïîêàçàòü çíà÷åíèÿ äëÿ")
-RicoTranslate.addPhrase("Show order detail","Ïîêàçàòü çíà÷åíèÿ ïîäðîáíî")
-RicoTranslate.addPhrase("order","çíà÷åíèå")
-RicoTranslate.addPhrase("this order","ýòî çíà÷åíèå")
-RicoTranslate.addPhrase("new order","íîâîå çíà÷åíèå")
-
-
-// add your own here:
+/*****************************************************************\r
+ Page : livegrid_ru.js\r
+ Description : LiveGrid text for Russian menus\r
+ Version 0.2 (by Illiya Gannitskiy,Alexey Uvarov)\r
+ If you have better translations, or would like to include\r
+ translations for another language, please send them to dowdybrown@yahoo.com\r
+******************************************************************/\r
+\r
+RicoTranslate.addPhrase("Sort by","Ñîðòèðîâêà ïî")\r
+RicoTranslate.addPhrase("Filter by","Ôèëüòðàöèÿ ïî")\r
+RicoTranslate.addPhrase("Hide","Ñïðÿòàòü")\r
+RicoTranslate.addPhrase("Show","Ïîêàçàòü")\r
+RicoTranslate.addPhrase("Show All","Ïîêàçàòü âñå")\r
+RicoTranslate.addPhrase("Ascending","Âîçðàñòàþùàÿ")\r
+RicoTranslate.addPhrase("Descending","Óáûâàþùàÿ")\r
+\r
+RicoTranslate.addPhrase("Include only this value","Âêëþ÷èòü òîëüêî ýòî çíà÷åíèå")\r
+RicoTranslate.addPhrase("Exclude this value","Èñêëþ÷èòü ýòî çíà÷åíèå")\r
+RicoTranslate.addPhrase("Greater than or equal to this value","Áîëüøå èëè ðàâíî äàííîìó çíà÷åíèþ")\r
+RicoTranslate.addPhrase("Less than or equal to this value","Ìåíüøå èëè ðàâíî äàííîìó çíà÷åíèþ")\r
+RicoTranslate.addPhrase("Contains keyword","Ñîäåðæèò çíà÷åíèå")\r
+RicoTranslate.addPhrase("Change keyword","Èçìåíèòü çíà÷åíèå")\r
+RicoTranslate.addPhrase("Enter keyword to search for","Èñêàòü ïî êëþ÷ó")\r
+RicoTranslate.addPhrase("use * as a wildcard","Èñïîëüçîâàòü * äëÿ âñåõ çàïèñåé")\r
+RicoTranslate.addPhrase("also","òàêæå")\r
+RicoTranslate.addPhrase("Remove filter","Óáðàòü ôèëüòð")\r
+\r
+RicoTranslate.addPhrase("Waiting for data","Îæèäàíèå äàííûõ")\r
+RicoTranslate.addPhrase("Request for data timed out","Ïðåâûøåí èíòåðâàë îæèäàíèÿ äàííûõ")\r
+\r
+RicoTranslate.addPhrase("No matching records","Íåò ñîâïàäåíèé")\r
+RicoTranslate.addPhrase("Listing records","Ïðîñìîòð çàïèñåé")\r
+RicoTranslate.addPhrase("of","èç")\r
+RicoTranslate.addPhrase("of about","èç î")\r
+\r
+RicoTranslate.thouSep=","\r
+RicoTranslate.decPoint="."\r
+RicoTranslate.dateFmt="dd/mm/yyyy"\r
+\r
+RicoTranslate.monthNames=['ßíâàðü','Ôåâðàëü', 'Ìàðò', 'Àïðåëü', 'Ìàé','Èþíü', 'Èþëü','Àâãóñò','Ñåíòÿáðü','Îòêòÿáðü','Íîÿáðü','Äåêàáðü']\r
+RicoTranslate.dayNames=['Ïîíåäåëüíèê','Âòîðíèê','Ñðåäà','×åòâåðã','Ïÿòíèöà','Ñóááîòà','Âîñêðåñåíüå']\r
+\r
+// added for 22 August release\r
+\r
+RicoTranslate.addPhrase("Print","Ïå÷àòü")\r
+RicoTranslate.addPhrase("Export","Ýêñïîðò")\r
+RicoTranslate.addPhrase("Visible rows","Âèäèìûå çàïèñè")\r
+RicoTranslate.addPhrase("All rows","Âñå çàïèñè")\r
+\r
+// added for Feb 2007 release\r
+\r
+RicoTranslate.addPhrase("Loading","Çàãðóçêà")\r
+RicoTranslate.addPhrase("minutes before your session expires","ìèíóò äî èñòå÷åíèÿ ñåññèè")\r
+RicoTranslate.addPhrase("EXPIRED","ÈÑÒÅÊËÎ")\r
+RicoTranslate.addPhrase("Close","Çàêðûòî")\r
+RicoTranslate.addPhrase("Cancel","Îòìåíà")\r
+RicoTranslate.addPhrase("Save","Ñîõðàíèòü")\r
+RicoTranslate.addPhrase("Add","Äîáàâèòü")\r
+RicoTranslate.addPhrase("Edit","Ðåäàêòèðîâàòü")\r
+RicoTranslate.addPhrase("Delete","Óäàëèòü")\r
+RicoTranslate.addPhrase("Are you sure you want to delete","Âû óâåðåííû,÷òî õîòèòå óäàëèòü")\r
+RicoTranslate.addPhrase("record","çàïèñü")\r
+RicoTranslate.addPhrase("this record","ýòà çàïèñü")\r
+RicoTranslate.addPhrase("new record","íîâàÿ çàïèñü")\r
+RicoTranslate.addPhrase("Please enter","Ïîæàëóéñòà ââåäèòå")\r
+RicoTranslate.addPhrase("a value for","çíà÷åíèå äëÿ")\r
+RicoTranslate.addPhrase("an integer value for","öåëîå çíà÷åíèå äëÿ")\r
+RicoTranslate.addPhrase("a positive integer value for","ïîëîæèòåëüíîå öåëîå çíà÷åíèå äëÿ")\r
+RicoTranslate.addPhrase("The request returned an error","Çàïðîñ âîçâðàòèë îøèáêó")\r
+\r
+\r
+\r
+// for demo only:\r
+\r
+RicoTranslate.addPhrase("Show orders for","Ïîêàçàòü çíà÷åíèÿ äëÿ")\r
+RicoTranslate.addPhrase("Show order detail","Ïîêàçàòü çíà÷åíèÿ ïîäðîáíî")\r
+RicoTranslate.addPhrase("order","çíà÷åíèå")\r
+RicoTranslate.addPhrase("this order","ýòî çíà÷åíèå")\r
+RicoTranslate.addPhrase("new order","íîâîå çíà÷åíèå")\r
+\r
+\r
+// add your own here:\r
-/*****************************************************************
- Page : livegrid_ua.js
- Description : LiveGrid text for Ukrainian menus
- Version 0.1 (by Illiya Gannitskiy,Alexey Uvarov)
- If you have better translations, or would like to include
- translations for another language, please send them to dowdybrown@yahoo.com
-******************************************************************/
-
-RicoTranslate.addPhrase("Sort by","Cîðòóâàííÿ ïî")
-RicoTranslate.addPhrase("Filter by","Ô³ëüòðàö³ÿ ïî")
-RicoTranslate.addPhrase("Hide","Ñõîâàòè")
-RicoTranslate.addPhrase("Show","Ïîêàçàòè")
-RicoTranslate.addPhrase("Show All","Ïîêàçàòè âñå")
-RicoTranslate.addPhrase("Ascending","Çðîñòàþ÷à")
-RicoTranslate.addPhrase("Descending","Óáóâàþ÷à")
-
-RicoTranslate.addPhrase("Include only this value","Âêëþ÷èòè ò³ëüêè öå çíà÷åííÿ")
-RicoTranslate.addPhrase("Exclude this value","Âèêëþ÷èòè öå çíà÷åííÿ")
-RicoTranslate.addPhrase("Greater than or equal to this value","Á³ëüøå àáî ð³âíî äàíîìó çíà÷åííþ")
-RicoTranslate.addPhrase("Less than or equal to this value","Ìåíøå àáî ð³âíî äàíîìó çíà÷åííþ")
-RicoTranslate.addPhrase("Contains keyword","̳ñòèòü çíà÷åííÿ")
-RicoTranslate.addPhrase("Change keyword","Çì³íèòè çíà÷åííÿ")
-RicoTranslate.addPhrase("Enter keyword to search for","Øóêàòè ïî êëþ÷ó")
-RicoTranslate.addPhrase("use * as a wildcard","Âèêîðèñòîâóâàòè * äëÿ âñ³õ çàïèñ³â")
-RicoTranslate.addPhrase("also","òàêîæ")
-RicoTranslate.addPhrase("Remove filter","Ïðèáðàòè ô³ëüòð")
-
-RicoTranslate.addPhrase("Waiting for data","Î÷³êóâàííÿ äàíèõ")
-RicoTranslate.addPhrase("Request for data timed out","Ïåðåâèùåíèé ³íòåðâàë î÷³êóâàííÿ äàíèõ")
-
-RicoTranslate.addPhrase("No matching records","Íåìຠçá³ã³â")
-RicoTranslate.addPhrase("Listing records","Ïåðåãëÿä çàïèñ³â")
-RicoTranslate.addPhrase("of","ç")
-RicoTranslate.addPhrase("of about","ç î")
-
-RicoTranslate.thouSep=","
-RicoTranslate.decPoint="."
-RicoTranslate.dateFmt="dd/mm/yyyy"
-
-RicoTranslate.monthNames=['ѳ÷åíü','Ëþòèé', 'Áåðåçåíü', 'Êâ³òåíü', 'Òðàâåíü','×åðâåíü', 'Ëèïåíü','Ñåðïåíü','Âåðåñåíü','Æîâòåíü','Ëèñòîïàä','Ãðóäåíü']
-RicoTranslate.dayNames=['Ïîíåä³ëîê','³âòîðîê','Ñåðåäà','×åòâåð','Ï'ÿòíèöÿ','Ñóáîòà','Íåä³ëÿ']
-
-// added for 22 August release
-
-RicoTranslate.addPhrase("Print","Äðóê")
-RicoTranslate.addPhrase("Export","Åêñïîðò")
-RicoTranslate.addPhrase("Visible rows","Âèäèì³ çàïèñè")
-RicoTranslate.addPhrase("All rows","Âñ³ çàïèñè")
-
-// added for Feb 2007 release
-
-RicoTranslate.addPhrase("Loading","Çàâàíòàæåííÿ")
-RicoTranslate.addPhrase("minutes before your session expires","õâèëèí äî çàê³í÷åííÿ ñåñ³¿")
-RicoTranslate.addPhrase("EXPIRED","ÇÀʲÍ×ÈËÎÑß")
-RicoTranslate.addPhrase("Close","Çàêðèòî")
-RicoTranslate.addPhrase("Cancel","³äì³íà")
-RicoTranslate.addPhrase("Save","Çáåðåãòè")
-RicoTranslate.addPhrase("Add","Äîäàòè")
-RicoTranslate.addPhrase("Edit","Ðåäàãóâàòè")
-RicoTranslate.addPhrase("Delete","Âèäàëèòè")
-RicoTranslate.addPhrase("Are you sure you want to delete","Âè óïåâíåí³,ùî áàæàºòå âèäàëèòè")
-RicoTranslate.addPhrase("record","çàïèñ")
-RicoTranslate.addPhrase("this record","öåé çàïèñ")
-RicoTranslate.addPhrase("new record","íîâèé çàïèñ")
-RicoTranslate.addPhrase("Please enter","Áóäü ëàñêà, ââåä³òü")
-RicoTranslate.addPhrase("a value for","çíà÷åííÿ äëÿ")
-RicoTranslate.addPhrase("an integer value for","ö³ëå çíà÷åííÿ äëÿ")
-RicoTranslate.addPhrase("a positive integer value for","ïîçèòèâíå ö³ëå çíà÷åííÿ äëÿ")
-RicoTranslate.addPhrase("The request returned an error","Çàïèò ïîâåðíóâ ïîìèëêó")
-
-
-
-// for demo only:
-
-RicoTranslate.addPhrase("Show orders for","Ïîêàçàòè çíà÷åííÿ")
-RicoTranslate.addPhrase("Show order detail","Ïîêàçàòè çíà÷åííÿ äåòàëüíî")
-RicoTranslate.addPhrase("order","Çíà÷åííÿ")
-RicoTranslate.addPhrase("this order","öå çíà÷åííÿ")
-RicoTranslate.addPhrase("new order","íîâå çíà÷åííÿ")
-
-
-// add your own here:
+/*****************************************************************\r
+ Page : livegrid_ua.js\r
+ Description : LiveGrid text for Ukrainian menus\r
+ Version 0.1 (by Illiya Gannitskiy,Alexey Uvarov)\r
+ If you have better translations, or would like to include\r
+ translations for another language, please send them to dowdybrown@yahoo.com\r
+******************************************************************/\r
+\r
+RicoTranslate.addPhrase("Sort by","Cîðòóâàííÿ ïî")\r
+RicoTranslate.addPhrase("Filter by","Ô³ëüòðàö³ÿ ïî")\r
+RicoTranslate.addPhrase("Hide","Ñõîâàòè")\r
+RicoTranslate.addPhrase("Show","Ïîêàçàòè")\r
+RicoTranslate.addPhrase("Show All","Ïîêàçàòè âñå")\r
+RicoTranslate.addPhrase("Ascending","Çðîñòàþ÷à")\r
+RicoTranslate.addPhrase("Descending","Óáóâàþ÷à")\r
+\r
+RicoTranslate.addPhrase("Include only this value","Âêëþ÷èòè ò³ëüêè öå çíà÷åííÿ")\r
+RicoTranslate.addPhrase("Exclude this value","Âèêëþ÷èòè öå çíà÷åííÿ")\r
+RicoTranslate.addPhrase("Greater than or equal to this value","Á³ëüøå àáî ð³âíî äàíîìó çíà÷åííþ")\r
+RicoTranslate.addPhrase("Less than or equal to this value","Ìåíøå àáî ð³âíî äàíîìó çíà÷åííþ")\r
+RicoTranslate.addPhrase("Contains keyword","̳ñòèòü çíà÷åííÿ")\r
+RicoTranslate.addPhrase("Change keyword","Çì³íèòè çíà÷åííÿ")\r
+RicoTranslate.addPhrase("Enter keyword to search for","Øóêàòè ïî êëþ÷ó")\r
+RicoTranslate.addPhrase("use * as a wildcard","Âèêîðèñòîâóâàòè * äëÿ âñ³õ çàïèñ³â")\r
+RicoTranslate.addPhrase("also","òàêîæ")\r
+RicoTranslate.addPhrase("Remove filter","Ïðèáðàòè ô³ëüòð")\r
+\r
+RicoTranslate.addPhrase("Waiting for data","Î÷³êóâàííÿ äàíèõ")\r
+RicoTranslate.addPhrase("Request for data timed out","Ïåðåâèùåíèé ³íòåðâàë î÷³êóâàííÿ äàíèõ")\r
+\r
+RicoTranslate.addPhrase("No matching records","Íåìຠçá³ã³â")\r
+RicoTranslate.addPhrase("Listing records","Ïåðåãëÿä çàïèñ³â")\r
+RicoTranslate.addPhrase("of","ç")\r
+RicoTranslate.addPhrase("of about","ç î")\r
+\r
+RicoTranslate.thouSep=","\r
+RicoTranslate.decPoint="."\r
+RicoTranslate.dateFmt="dd/mm/yyyy"\r
+\r
+RicoTranslate.monthNames=['ѳ÷åíü','Ëþòèé', 'Áåðåçåíü', 'Êâ³òåíü', 'Òðàâåíü','×åðâåíü', 'Ëèïåíü','Ñåðïåíü','Âåðåñåíü','Æîâòåíü','Ëèñòîïàä','Ãðóäåíü']\r
+RicoTranslate.dayNames=['Ïîíåä³ëîê','³âòîðîê','Ñåðåäà','×åòâåð','Ï'ÿòíèöÿ','Ñóáîòà','Íåä³ëÿ']\r
+\r
+// added for 22 August release\r
+\r
+RicoTranslate.addPhrase("Print","Äðóê")\r
+RicoTranslate.addPhrase("Export","Åêñïîðò")\r
+RicoTranslate.addPhrase("Visible rows","Âèäèì³ çàïèñè")\r
+RicoTranslate.addPhrase("All rows","Âñ³ çàïèñè")\r
+\r
+// added for Feb 2007 release\r
+\r
+RicoTranslate.addPhrase("Loading","Çàâàíòàæåííÿ")\r
+RicoTranslate.addPhrase("minutes before your session expires","õâèëèí äî çàê³í÷åííÿ ñåñ³¿")\r
+RicoTranslate.addPhrase("EXPIRED","ÇÀʲÍ×ÈËÎÑß")\r
+RicoTranslate.addPhrase("Close","Çàêðèòî")\r
+RicoTranslate.addPhrase("Cancel","³äì³íà")\r
+RicoTranslate.addPhrase("Save","Çáåðåãòè")\r
+RicoTranslate.addPhrase("Add","Äîäàòè")\r
+RicoTranslate.addPhrase("Edit","Ðåäàãóâàòè")\r
+RicoTranslate.addPhrase("Delete","Âèäàëèòè")\r
+RicoTranslate.addPhrase("Are you sure you want to delete","Âè óïåâíåí³,ùî áàæàºòå âèäàëèòè")\r
+RicoTranslate.addPhrase("record","çàïèñ")\r
+RicoTranslate.addPhrase("this record","öåé çàïèñ")\r
+RicoTranslate.addPhrase("new record","íîâèé çàïèñ")\r
+RicoTranslate.addPhrase("Please enter","Áóäü ëàñêà, ââåä³òü")\r
+RicoTranslate.addPhrase("a value for","çíà÷åííÿ äëÿ")\r
+RicoTranslate.addPhrase("an integer value for","ö³ëå çíà÷åííÿ äëÿ")\r
+RicoTranslate.addPhrase("a positive integer value for","ïîçèòèâíå ö³ëå çíà÷åííÿ äëÿ")\r
+RicoTranslate.addPhrase("The request returned an error","Çàïèò ïîâåðíóâ ïîìèëêó")\r
+\r
+\r
+\r
+// for demo only:\r
+\r
+RicoTranslate.addPhrase("Show orders for","Ïîêàçàòè çíà÷åííÿ")\r
+RicoTranslate.addPhrase("Show order detail","Ïîêàçàòè çíà÷åííÿ äåòàëüíî")\r
+RicoTranslate.addPhrase("order","Çíà÷åííÿ")\r
+RicoTranslate.addPhrase("this order","öå çíà÷åííÿ")\r
+RicoTranslate.addPhrase("new order","íîâå çíà÷åííÿ")\r
+\r
+\r
+// add your own here:\r
-#!/bin/bash -x
-
-FILES=`find japanese-utf8.templates -name '*ml'`
-
-for utf8file in $FILES
-do
- eucfile=`echo $utf8file | sed 's/japanese-utf8/japanese-euc/'`
- nkf -e -W -d < $utf8file > $eucfile
-done
-
-nkf -e -W -d < japanese-utf8.help.html > japanese-euc.help.html
+#!/bin/bash -x\r
+\r
+FILES=`find japanese-utf8.templates -name '*ml'`\r
+\r
+for utf8file in $FILES\r
+do\r
+ eucfile=`echo $utf8file | sed 's/japanese-utf8/japanese-euc/'`\r
+ nkf -e -W -d < $utf8file > $eucfile\r
+done\r
+\r
+nkf -e -W -d < japanese-utf8.help.html > japanese-euc.help.html\r
-Silk icon set 1.3
-
-_________________________________________
-Mark James
-http://www.famfamfam.com/lab/icons/silk/
-_________________________________________
-
-This work is licensed under a
-Creative Commons Attribution 2.5 License.
-[ http://creativecommons.org/licenses/by/2.5/ ]
-
-This means you may use it for any purpose,
-and make any changes you like.
-All I ask is that you include a link back
-to this page in your credits.
-
-Are you using this icon set? Send me an email
-(including a link or picture if available) to
-mjames@gmail.com
-
-Any other questions about this icon set please
+Silk icon set 1.3\r
+\r
+_________________________________________\r
+Mark James\r
+http://www.famfamfam.com/lab/icons/silk/\r
+_________________________________________\r
+\r
+This work is licensed under a\r
+Creative Commons Attribution 2.5 License.\r
+[ http://creativecommons.org/licenses/by/2.5/ ]\r
+\r
+This means you may use it for any purpose,\r
+and make any changes you like.\r
+All I ask is that you include a link back\r
+to this page in your credits.\r
+\r
+Are you using this icon set? Send me an email\r
+(including a link or picture if available) to\r
+mjames@gmail.com\r
+\r
+Any other questions about this icon set please\r
contact mjames@gmail.com
\ No newline at end of file