From: <sk...@us...> - 2007-10-22 18:57:47
|
Revision: 258 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=258&view=rev Author: sknappe Date: 2007-10-22 11:57:44 -0700 (Mon, 22 Oct 2007) Log Message: ----------- Added Loading message Modified Paths: -------------- trunk/src/dbpedia-navigator/Ajax-Test/ajax.php trunk/src/dbpedia-navigator/Ajax-Test/default.css trunk/src/dbpedia-navigator/Ajax-Test/index.php Modified: trunk/src/dbpedia-navigator/Ajax-Test/ajax.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/ajax.php 2007-10-22 18:35:37 UTC (rev 257) +++ trunk/src/dbpedia-navigator/Ajax-Test/ajax.php 2007-10-22 18:57:44 UTC (rev 258) @@ -3,8 +3,11 @@ $xajax = new xajax("ajaxfunctions.php"); $xajax->register(XAJAX_FUNCTION, 'getsubjects', array( - 'onResponseDelay' => 'showLoading', - 'onComplete' => 'hideLoading' + 'onResponseDelay' => 'showLoadingSubjects', + 'beforeResponseProcessing' => 'hideLoadingSubjects' )); -$xajax->registerFunction("getarticle"); +$xajax->register(XAJAX_FUNCTION, 'getarticle', array( + 'onResponseDelay' => 'showLoadingArticle', + 'beforeResponseProcessing' => 'hideLoadingArticle' + )); ?> \ No newline at end of file Modified: trunk/src/dbpedia-navigator/Ajax-Test/default.css =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/default.css 2007-10-22 18:35:37 UTC (rev 257) +++ trunk/src/dbpedia-navigator/Ajax-Test/default.css 2007-10-22 18:57:44 UTC (rev 258) @@ -463,16 +463,4 @@ font-weight: bold; white-space: nowrap; font-size: 85%; -} - -/* - * Loading - */ -#loading { - padding: 20px; - display: none; /* hidden */ - left: 50%; - top: 25%; - font-weight: bold; - font-size: large; } \ No newline at end of file Modified: trunk/src/dbpedia-navigator/Ajax-Test/index.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/index.php 2007-10-22 18:35:37 UTC (rev 257) +++ trunk/src/dbpedia-navigator/Ajax-Test/index.php 2007-10-22 18:57:44 UTC (rev 258) @@ -12,11 +12,17 @@ <link rel="stylesheet" href="default.css"/> <?php $xajax->printJavascript('xajax/'); ?> <script type="text/javascript"> - showLoading = function() { - xajax.$('loading').style.display='block'; + showLoadingSubjects = function() { + xajax.$('loadingSubject').style.display='block'; }; - hideLoading = function() { - xajax.$('loading').style.display = 'none'; + hideLoadingSubjects = function() { + xajax.$('loadingSubject').style.display = 'none'; + }; + showLoadingArticle = function() { + xajax.$('loadingArticle').style.display='block'; + }; + hideLoadingArticle = function() { + xajax.$('loadingArticle').style.display = 'none'; } </script> </head> @@ -46,7 +52,7 @@ <div class="box" id="search"> <div class="boxtitle">Searchresults</div> <div class="boxcontent" id="searchcontent"> - <div id="loading"><img src="ajax-loader.gif" alt="Loading..."/></div> + <div id="loadingSubject" style="display:none"><img src="ajax-loader.gif" alt="Loading..."/></div> </div> <!-- boxcontent --> </div> <!-- box --> @@ -57,6 +63,7 @@ <div class="box" id="search"> <div class="boxtitle">Content</div> <div class="boxcontent" id="article"> + <div id="loadingArticle" style="display:none"><img src="ajax-loader.gif" alt="Loading..."/></div> </div> <!-- boxcontent --> </div> <!-- box --> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sk...@us...> - 2007-10-24 08:32:31
|
Revision: 259 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=259&view=rev Author: sknappe Date: 2007-10-24 01:32:25 -0700 (Wed, 24 Oct 2007) Log Message: ----------- added some functions Modified Paths: -------------- trunk/src/dbpedia-navigator/Ajax-Test/ajax.php trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php trunk/src/dbpedia-navigator/Ajax-Test/default.css trunk/src/dbpedia-navigator/Ajax-Test/index.php Modified: trunk/src/dbpedia-navigator/Ajax-Test/ajax.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/ajax.php 2007-10-22 18:57:44 UTC (rev 258) +++ trunk/src/dbpedia-navigator/Ajax-Test/ajax.php 2007-10-24 08:32:25 UTC (rev 259) @@ -10,4 +10,6 @@ 'onResponseDelay' => 'showLoadingArticle', 'beforeResponseProcessing' => 'hideLoadingArticle' )); +$xajax->registerFunction('addPositive'); +$xajax->registerFunction('addNegative'); ?> \ No newline at end of file Modified: trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php 2007-10-22 18:57:44 UTC (rev 258) +++ trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php 2007-10-24 08:32:25 UTC (rev 259) @@ -30,11 +30,52 @@ $content.="Subject: ".urldecode($triple[0])."<br/>Predicate: ".urldecode($triple[1])."<br/>Object: ".urldecode($triple[2])."<br/><br/>\n"; } + $contentbuttons="<input type=\"button\" value=\"Positive\" class=\"button\" onclick=\"xajax_addPositive('".$subject."');return false;\" /> <input type=\"button\" value=\"Negative\" class=\"button\" onclick=\"xajax_addNegative('".$subject."');return false;\" />"; + $objResponse = new xajaxResponse(); $objResponse->assign("article", "innerHTML", $content); + $objResponse->assign("contentbuttons", "innerHTML", $contentbuttons); return $objResponse; } +function addPositive($subject) +{ + if (!isset($_SESSION['positive'])){ + $array=array($subject); + $_SESSION['positive']=$array; + } + else{ + $array=$_SESSION['positive']; + $array[]=$subject; + $_SESSION['positive']=$array; + } + + $content=$subject."<br/>"; + + $objResponse = new xajaxResponse(); + $objResponse->append("Positives", "innerHTML", $content); + return $objResponse; +} + +function addNegative($subject) +{ + if (!isset($_SESSION['negative'])){ + $array=array($subject); + $_SESSION['negative']=$array; + } + else{ + $array=$_SESSION['negative']; + $array[]=$subject; + $_SESSION['negative']=$array; + } + + $content=$subject."<br/>"; + + $objResponse = new xajaxResponse(); + $objResponse->append("Negatives", "innerHTML", $content); + return $objResponse; +} + require("ajax.php"); $xajax->processRequest(); ?> \ No newline at end of file Modified: trunk/src/dbpedia-navigator/Ajax-Test/default.css =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/default.css 2007-10-22 18:57:44 UTC (rev 258) +++ trunk/src/dbpedia-navigator/Ajax-Test/default.css 2007-10-24 08:32:25 UTC (rev 259) @@ -463,4 +463,15 @@ font-weight: bold; white-space: nowrap; font-size: 85%; +} + +input.button:hover { + border-left:1px solid #ffffff; + border-top:1px solid #ffffff; + border-right:1px solid #848484; + border-bottom:1px solid #848484; +} + +#contentbuttons{ + text-align:right; } \ No newline at end of file Modified: trunk/src/dbpedia-navigator/Ajax-Test/index.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/index.php 2007-10-22 18:57:44 UTC (rev 258) +++ trunk/src/dbpedia-navigator/Ajax-Test/index.php 2007-10-24 08:32:25 UTC (rev 259) @@ -1,4 +1,6 @@ <?php +session_start(); + require("ajax.php"); ini_set('error_reporting',E_ALL); ini_set('max_execution_time',200); @@ -14,9 +16,11 @@ <script type="text/javascript"> showLoadingSubjects = function() { xajax.$('loadingSubject').style.display='block'; + xajax.$('searchcontent').style.display = 'none'; }; hideLoadingSubjects = function() { xajax.$('loadingSubject').style.display = 'none'; + xajax.$('searchcontent').style.display='block'; }; showLoadingArticle = function() { xajax.$('loadingArticle').style.display='block'; @@ -37,13 +41,13 @@ <form action="index.php" method="GET" id="searchForm"> <table border="0"> <tr><tb>Search:<br/></tb></tr> - <tr><tb><input type="textfield" name="label" id="label"><select name="limit" size="1" id="limit"> + <tr><tb><input type="textfield" name="label" id="label"> <select name="limit" size="1" id="limit"> <option>1</option> <option selected="selected">5</option> <option>10</option> <option>15</option> </select><br/></tb></tr> - <tr><tb><input type="button" value="Calculate" class="button" onclick="xajax_getsubjects(document.getElementById('label').value,document.getElementById('limit').value);return false;" /></tb></tr> + <tr><tb><input type="button" value="Search" class="button" onclick="xajax_getsubjects(document.getElementById('label').value,document.getElementById('limit').value);return false;" /></tb></tr> </table> </form> </div> <!-- boxcontent --> @@ -51,7 +55,8 @@ <div class="box" id="search"> <div class="boxtitle">Searchresults</div> - <div class="boxcontent" id="searchcontent"> + <div class="boxcontent"> + <div id="searchcontent" style="display:none"></div> <div id="loadingSubject" style="display:none"><img src="ajax-loader.gif" alt="Loading..."/></div> </div> <!-- boxcontent --> </div> <!-- box --> @@ -61,7 +66,7 @@ <div id="content"> <div class="box" id="search"> - <div class="boxtitle">Content</div> + <div class="boxtitle">Content<div id="contentbuttons"></div></div> <div class="boxcontent" id="article"> <div id="loadingArticle" style="display:none"><img src="ajax-loader.gif" alt="Loading..."/></div> </div> <!-- boxcontent --> @@ -69,6 +74,23 @@ <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> </div><!-- content --> +<div id="rightSidebar"> + +<div class="box"> + <div class="boxtitle">Positives</div> + <div class="boxcontent" id="Positives"> + </div> <!-- boxcontent --> +</div> <!-- box --> + +<div class="box"> + <div class="boxtitle">Negatives</div> + <div class="boxcontent" id="Negatives"> + </div> <!-- boxcontent --> +</div> <!-- box --> + +<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> +</div><!-- rightSidebar --> +<div id="clear"></div> </div> </body> </html> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sk...@us...> - 2007-10-24 15:11:34
|
Revision: 260 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=260&view=rev Author: sknappe Date: 2007-10-24 08:11:23 -0700 (Wed, 24 Oct 2007) Log Message: ----------- changed css, so that all buttons are at the right position Modified Paths: -------------- trunk/src/dbpedia-navigator/Ajax-Test/ajax.php trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php trunk/src/dbpedia-navigator/Ajax-Test/index.php Removed Paths: ------------- trunk/src/dbpedia-navigator/Ajax-Test/default.css Modified: trunk/src/dbpedia-navigator/Ajax-Test/ajax.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/ajax.php 2007-10-24 08:32:25 UTC (rev 259) +++ trunk/src/dbpedia-navigator/Ajax-Test/ajax.php 2007-10-24 15:11:23 UTC (rev 260) @@ -12,4 +12,6 @@ )); $xajax->registerFunction('addPositive'); $xajax->registerFunction('addNegative'); +$xajax->registerFunction('clearPositives'); +$xajax->registerFunction('clearNegatives'); ?> \ No newline at end of file Modified: trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php 2007-10-24 08:32:25 UTC (rev 259) +++ trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php 2007-10-24 15:11:23 UTC (rev 260) @@ -33,7 +33,7 @@ $contentbuttons="<input type=\"button\" value=\"Positive\" class=\"button\" onclick=\"xajax_addPositive('".$subject."');return false;\" /> <input type=\"button\" value=\"Negative\" class=\"button\" onclick=\"xajax_addNegative('".$subject."');return false;\" />"; $objResponse = new xajaxResponse(); - $objResponse->assign("article", "innerHTML", $content); + $objResponse->assign("articlecontent", "innerHTML", $content); $objResponse->assign("contentbuttons", "innerHTML", $contentbuttons); return $objResponse; } @@ -76,6 +76,24 @@ return $objResponse; } +function clearPositives() +{ + unset($_SESSION['positive']); + + $objResponse = new xajaxResponse(); + $objResponse->assign("Positives", "innerHTML", ""); + return $objResponse; +} + +function clearNegatives() +{ + unset($_SESSION['negative']); + + $objResponse = new xajaxResponse(); + $objResponse->assign("Negatives", "innerHTML", ""); + return $objResponse; +} + require("ajax.php"); $xajax->processRequest(); ?> \ No newline at end of file Deleted: trunk/src/dbpedia-navigator/Ajax-Test/default.css =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/default.css 2007-10-24 08:32:25 UTC (rev 259) +++ trunk/src/dbpedia-navigator/Ajax-Test/default.css 2007-10-24 15:11:23 UTC (rev 260) @@ -1,477 +0,0 @@ -/** - * default.css - * main Ontowiki style sheet - * @author: Norman Heino - * @version: $Id: default.css 751 2007-02-14 19:20:17Z nheino $ - */ - -/* remove browser specific margins */ -* { - margin: 0; - padding: 0; -} - -html { - font: 80%/1.2 "Lucida Grande", Helvetica, Arial, sans-serif; -} - -p { - margin: 8px 0; -} - -h2 { - margin: 0.5em 0 0.1em 0; -/* background-color: #eee;*/ - font-size: 110%; -} - - -/* - * Main site structure - */ - -#wrapper { - position: relative; - max-width: 100%; - padding: 15px; -/* margin: 15px;*/ -} - -#content { - margin: 0 19em; - overflow: hidden; -/* border-left: 1px solid #bbb; - border-right: 1px solid #bbb; - padding: 0 5px;*/ -} - -/* - * Side bars are positioned absolutely due to several reasons: - * (1)Internet Explorer has problems displaying float elements, - * (2) the content's position in html is irrelevant, - * (3) positioning the content div is more straightforward. - */ -#leftSidebar { - position: absolute; - width: 18em; -} - -#rightSidebar { - position: absolute; - width: 18em; - top: 15px; - right: 15px; -} - -#clear { - clear: both; -} - - -/* - * sidebar content (boxes) - */ - -.box { - color: #666; - margin-bottom: 20px; - border: 1px solid #bbb; - font-size: 85%; -} - -/*.box td { - font-size: 100%; -}*/ - -.box .boxtitle { - color: #666; - background-color: #eee; - padding: 3px 0.4em; - font-weight: bold; - white-space: nowrap; -} - -.box .boxtitle .boxtitle_string { - width: 80%; - overflow: hidden; -/* display: none;*/ -} - -.box .boxcontent { - padding: 0.6em; - border-top: 1px solid #bbb; -} - -/* restrict content of certain boxes */ -.box#predicates .boxcontent, -.box#classes .boxcontent { - overflow: hidden; -} - -.box p { - margin: 0 2px 4px 0; -} - -.box ul, .box ol { - margin: 0px; -/* padding-left: 15px;*/ - list-style-position: inside; -} - -.box ul.no_bullet, .box ul.no_bullet { - list-style-type: none; -} - -.box ul li.horizontal, .box ol li.horizontal, -.box ul.horizontal, .box ol.horizontal { - display: inline; -} - -.box a.title_switch { - position: absolute; - right: 0.5em; - margin: auto 0; - color: #666; - border: 1px solid #bbb; - width: 1em; - height: 1em; - background-color: #fff; - text-align: center; -} - -.box a.title_switch:hover { - color: #02a; - text-decoration: none; - background-color: #eee; -} - -.box hr { - margin: 0.5em 0; - border: none; - border-top: 1px dotted #bbb; - height: 0; -} - -.box#classes .boxcontent a { - display: block; -} - -/*.box select { - width: 250px; /* TODO remove absolute size */ -}*/ - -.box input { - width: auto; -} - -.box td input { - width: 100%; -} - -.box img.rating { - position: relative; - top: 1px; -} - -.hidden { - display: none; -} - - -/* - * Links - */ - -a, a:link, a:visited { - color: #02a; - text-decoration: none; - cursor: pointer; -} - -a:hover { - text-decoration: underline; -} - - -/* - * Tabs - */ - -/* all the tabs */ -.tabs { - float: left; - width: 100%; - background: #fff url("../images/tabs_back.png") repeat-x bottom; -} - -.tabs ul { - list-style: none; -} - -.tabs li { - float: left; - margin-right: 1px; -} - -.tabs a { - display: block; - margin-top: 1px; - padding: 0.35em 1.35em; - background-image: url("../images/tab_back.png"); - background-repeat: repeat-x; - background-color: #cbcbcb; - border: 1px solid #bbb; -} - -.tabs a:hover { - background: #fff; - text-decoration: none; -} - -.tabs a.current { - background: #fff; - border-bottom: 1px solid #fff; -} - -/* horizontal line underneath the tabs */ -#tab-line { - height: 1em; - clear: both; -} - -#instances { - float: right; -} - -.selected { - background-color: #bde; /*#b4d5fe;*/ -} - -.button { - border: solid black 1px; - padding: 0px 1px; - background-color: #eee; -} - -/* - * Tables - */ - -tr.odd { - background-color: #ccc; -} - -tr.even { - background-color: #eee; -} - -table.instanceTable th { - text-align: left; -/* background-color: #eee;*/ -} - -table.instanceTable > tbody > tr > td { - padding-top: 0.5em; -} - -table.instanceTable td.property { - text-align: right; - font-style: italic; - padding-right: 5px; -} - -table.instanceTable ul { - margin: 0px; - padding-left: 20px; -} - -table.instanceTable { - width: 100%; -} - -.searchHighlight { - background-color: orange; -} - -table.tripletable { - width: 100%; - font-size: 90%; -} - -.tripletable td { - padding: 0.4em; -} - -table.blind tr td { - padding-top: 0.4em; -} - -/* - * Instances - */ - -.instance .instance { - margin-left: 13px; - background-color: #ddd; -} -.instance .instance td { - font-size: 90%; -} -.instance .instance .instance { - background-color: #eee; -} - -.instance .instance .instance .instance { - background-color: #fff; -} - -#instanceEdit { - border-spacing: 0px; - width: 100%; -} - -#instanceEdit input, #instanceEdit textarea { -/* width: 250px;*/ - background-color: #fff; - font-size: 95%; - font-family: "Lucida Grande", Helvetica, Arial, sans-serif; - padding: 0.1em 0; -} - -#instanceEdit > tbody > tr > td, #instanceEdit > tr > td { - background-color: #eee; - padding: 5px; - border-bottom: 2px solid #fdfdfd; -} - -/* - * Calendar - */ - -table.calendar { - margin-top: 1em; - width: 100%; - height: 730px; - table-layout: fixed; - font-size: 90%; -} - -.calendar .weekday0 { - background-color: #eee; - padding: 0.4em; -} -.calendar .weekday1 { - background-color: #f5f5f5; - padding: 0.4em; -} -.calendar .weekend0 { - background-color: #ddd; - padding: 0.4em; -} -.calendar .weekend1 { - background-color: #eaeaea; - padding: 0.4em; -} - -#map { - margin-top: 0.5em; - width: 100%; - height: 750px; - font-size: 90%; -} - -#map .instance td { - font-size: 80%; - padding: 0 3px; - border-bottom: 5px solid white; -} - -#superClassPath { - margin-bottom: 0.5em; -} - -img { - border: none; -} - -span.submit { - float: right; - padding-right: 100px; -} - -/* - * Autosuggest box - */ -div.autosuggest { - font-size: 85%; - position: absolute; - background-color: #fff; - border: 1px solid #bbb; -} - -div.autosuggest ul { - list-style-type: none; - list-style-position: inside; - padding-left: 0px; -} - -div.autosuggest ul li.selected { - background-color: #bde; -} - -div.autosuggest ul li { - display: block; - padding: 0.2em; -/* height: 22px;*/ - cursor: pointer; -} - -span.formal { - display: none; -} - -/* - * Layer - */ -#layer { - width: 100%; - height: 100%; - position: absolute; - background-image: url("../images/black_50.png"); - background-repeat: repeat; - z-index: 98; -} - -#layerContent { - margin-top: 100px; - margin: auto; - width: 500px; - height: 300px; - background-color: #ffb; - border: 2px solid #bbb; - z-index: 99; -} - -/* - * Buttons - */ -input.button { - border: 1px solid #bbb; - color: #666; - background-color: #eee; - padding: 3px 0.4em; - font-weight: bold; - white-space: nowrap; - font-size: 85%; -} - -input.button:hover { - border-left:1px solid #ffffff; - border-top:1px solid #ffffff; - border-right:1px solid #848484; - border-bottom:1px solid #848484; -} - -#contentbuttons{ - text-align:right; -} \ No newline at end of file Modified: trunk/src/dbpedia-navigator/Ajax-Test/index.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/index.php 2007-10-24 08:32:25 UTC (rev 259) +++ trunk/src/dbpedia-navigator/Ajax-Test/index.php 2007-10-24 15:11:23 UTC (rev 260) @@ -24,14 +24,17 @@ }; showLoadingArticle = function() { xajax.$('loadingArticle').style.display='block'; + xajax.$('articlecontent').style.display = 'none'; }; hideLoadingArticle = function() { xajax.$('loadingArticle').style.display = 'none'; + xajax.$('articlecontent').style.display = 'block'; } </script> </head> <body> <h3>DBPedia-Navigator-Test</h3> +<div id="layer" style="display:none"><div id="layerContent" style="display:none"></div></div> <div id="wrapper"> <div id="leftSidebar"> @@ -65,9 +68,10 @@ </div><!-- END leftSidebar --> <div id="content"> -<div class="box" id="search"> - <div class="boxtitle">Content<div id="contentbuttons"></div></div> +<div class="box"> + <div class="boxtitlewithbutton"><table border="0" class="titletable"><tr><td class="left">Article</td><td class="right"><span id="contentbuttons"></span></td></tr></table></div> <div class="boxcontent" id="article"> + <div id="articlecontent" style="display:none"></div> <div id="loadingArticle" style="display:none"><img src="ajax-loader.gif" alt="Loading..."/></div> </div> <!-- boxcontent --> </div> <!-- box --> @@ -77,13 +81,13 @@ <div id="rightSidebar"> <div class="box"> - <div class="boxtitle">Positives</div> + <div class="boxtitlewithbutton"><table border="0" class="titletable"><tr><td class="left">Positives</td><td class="right"><input type="button" value="Clear" class="button" onclick="xajax_clearPositives();return false;" /></td></tr></table></div> <div class="boxcontent" id="Positives"> </div> <!-- boxcontent --> </div> <!-- box --> <div class="box"> - <div class="boxtitle">Negatives</div> + <div class="boxtitlewithbutton"><table border="0" class="titletable"><tr><td class="left">Negatives</td><td class="right"><input type="button" value="Clear" class="button" onclick="xajax_clearNegatives();return false;" /></td></tr></table></div> <div class="boxcontent" id="Negatives"> </div> <!-- boxcontent --> </div> <!-- box --> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sk...@us...> - 2007-10-29 10:26:55
|
Revision: 263 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=263&view=rev Author: sknappe Date: 2007-10-29 03:26:51 -0700 (Mon, 29 Oct 2007) Log Message: ----------- added function to learn a concept to ajax version Modified Paths: -------------- trunk/src/dbpedia-navigator/Ajax-Test/SparqlConnection.php trunk/src/dbpedia-navigator/Ajax-Test/ajax.php trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php trunk/src/dbpedia-navigator/Ajax-Test/index.php Modified: trunk/src/dbpedia-navigator/Ajax-Test/SparqlConnection.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/SparqlConnection.php 2007-10-28 09:14:13 UTC (rev 262) +++ trunk/src/dbpedia-navigator/Ajax-Test/SparqlConnection.php 2007-10-29 10:26:51 UTC (rev 263) @@ -42,21 +42,12 @@ $this->client->init($id); - $learn_start = microtime(true); - $init = $learn_start - $start; - echo 'components initialised in '.$init.' seconds<br />'; - $threaded=true; if($threaded == false) { $concept = $this->client->learn($id); - $learn = microtime(true) - $learn_start; - echo 'concept learned in '.$learn.' seconds<br />'; - - echo 'result: '.$concept; - } else { $this->client->learnThreaded($id); @@ -74,12 +65,9 @@ $seconds = $i * $sleeptime; - echo 'result after '.$seconds.' seconds of sleep: '.$concept.'<br />'; - $i++; } while($running); - echo 'algorithm finished'; } return $concept; } Modified: trunk/src/dbpedia-navigator/Ajax-Test/ajax.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/ajax.php 2007-10-28 09:14:13 UTC (rev 262) +++ trunk/src/dbpedia-navigator/Ajax-Test/ajax.php 2007-10-29 10:26:51 UTC (rev 263) @@ -14,4 +14,8 @@ $xajax->registerFunction('addNegative'); $xajax->registerFunction('clearPositives'); $xajax->registerFunction('clearNegatives'); +$xajax->register(XAJAX_FUNCTION, 'learnConcept', array( + 'onResponseDelay' => 'showLoadingConcept', + 'beforeResponseProcessing' => 'hideLoadingConcept' + )); ?> \ No newline at end of file Modified: trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php 2007-10-28 09:14:13 UTC (rev 262) +++ trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php 2007-10-29 10:26:51 UTC (rev 263) @@ -1,4 +1,5 @@ <?php +session_start(); function getsubjects($label, $limit) { include_once("Settings.php"); @@ -94,6 +95,25 @@ return $objResponse; } +function learnConcept() +{ + $concept=""; + if (isset($_SESSION['positive'])&&isset($_SESSION['negative'])) + { + require_once("Settings.php"); + require_once("SparqlConnection.php"); + $settings=new Settings(); + $sc=new SparqlConnection($settings->dbpediauri,$settings->wsdluri); + + $concept.=$sc->getConceptFromExamples($_SESSION['positive'],$_SESSION['negative']); + } + else $concept.="You must choose at least one<br/> positive and one negative example."; + + $objResponse = new xajaxResponse(); + $objResponse->assign("conceptcontent", "innerHTML", $concept); + return $objResponse; +} + require("ajax.php"); $xajax->processRequest(); ?> \ No newline at end of file Modified: trunk/src/dbpedia-navigator/Ajax-Test/index.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/index.php 2007-10-28 09:14:13 UTC (rev 262) +++ trunk/src/dbpedia-navigator/Ajax-Test/index.php 2007-10-29 10:26:51 UTC (rev 263) @@ -1,6 +1,10 @@ <?php session_start(); +unset($_SESSION['positive']); +unset($_SESSION['negative']); + + require("ajax.php"); ini_set('error_reporting',E_ALL); ini_set('max_execution_time',200); @@ -29,6 +33,14 @@ hideLoadingArticle = function() { xajax.$('loadingArticle').style.display = 'none'; xajax.$('articlecontent').style.display = 'block'; + }; + showLoadingConcept = function() { + xajax.$('loadingConcept').style.display='block'; + xajax.$('conceptcontent').style.display = 'none'; + }; + hideLoadingConcept = function() { + xajax.$('loadingConcept').style.display = 'none'; + xajax.$('conceptcontent').style.display = 'block'; } </script> </head> @@ -64,6 +76,14 @@ </div> <!-- boxcontent --> </div> <!-- box --> +<div class="box" id="concept"> + <div class="boxtitlewithbutton"><table border="0" class="titletable"><tr><td class="left">Learned Concept</td><td class="right"><input type="button" value="Learn" class="button" onclick="xajax_learnConcept();return false;" /></td></tr></table></div> + <div class="boxcontent"> + <div id="conceptcontent" style="display:none"></div> + <div id="loadingConcept" style="display:none"><img src="ajax-loader.gif" alt="Loading..."/></div> + </div> <!-- boxcontent --> +</div> <!-- box --> + <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> </div><!-- END leftSidebar --> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sk...@us...> - 2007-10-29 12:26:05
|
Revision: 269 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=269&view=rev Author: sknappe Date: 2007-10-29 05:26:01 -0700 (Mon, 29 Oct 2007) Log Message: ----------- added function to show subjects according to the last learned concept Modified Paths: -------------- trunk/src/dbpedia-navigator/Ajax-Test/SparqlConnection.php trunk/src/dbpedia-navigator/Ajax-Test/ajax.php trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php trunk/src/dbpedia-navigator/Ajax-Test/index.php Added Paths: ----------- trunk/src/dbpedia-navigator/Ajax-Test/pear/ trunk/src/dbpedia-navigator/Ajax-Test/pear/HTTP_Request.php trunk/src/dbpedia-navigator/Ajax-Test/pear/PEAR.php trunk/src/dbpedia-navigator/Ajax-Test/pear/Socket.php trunk/src/dbpedia-navigator/Ajax-Test/pear/URL.php Modified: trunk/src/dbpedia-navigator/Ajax-Test/SparqlConnection.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/SparqlConnection.php 2007-10-29 10:38:02 UTC (rev 268) +++ trunk/src/dbpedia-navigator/Ajax-Test/SparqlConnection.php 2007-10-29 12:26:01 UTC (rev 269) @@ -10,11 +10,9 @@ function SparqlConnection($DBPediaUrl,$DLLearnerUri) { - ini_set("soap.wsdl_cache_enabled","0"); ini_set('default_socket_timeout',200); $this->DBPediaUrl=$DBPediaUrl; $this->DLLearnerUri=$DLLearnerUri; - //$this->loadWSDLfiles($DLLearnerUri); $this->client=new SoapClient("main.wsdl"); } @@ -108,14 +106,25 @@ return $object->item; } - private function loadWSDLfiles($wsdluri){ - $main=$this->getwsdl($wsdluri); - $other=$this->getOtherWSDL($main); - $newMain=$this->changeWSDL($main); - $this->writeToFile("main.wsdl",$newMain); + function getSubjectsFromConcept($concept) + { + $id=$this->client->generateID(); + + $ksID = $this->client->addKnowledgeSource($id, "sparql", $this->DBPediaUrl); + $object=$this->client->getSubjectsFromConcept($id,$ksID,$concept); + return $object->item; + } + + public function loadWSDLfiles($wsdluri){ + ini_set("soap.wsdl_cache_enabled","0"); + + $main=SparqlConnection::getwsdl($wsdluri); + $other=SparqlConnection::getOtherWSDL($main); + $newMain=SparqlConnection::changeWSDL($main); + SparqlConnection::writeToFile("main.wsdl",$newMain); $x=0; foreach ($other as $o){ - $this->writeToFile("def".($x++).".xsd",$this->getwsdl($o)); + SparqlConnection::writeToFile("def".($x++).".xsd",SparqlConnection::getwsdl($o)); } } Modified: trunk/src/dbpedia-navigator/Ajax-Test/ajax.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/ajax.php 2007-10-29 10:38:02 UTC (rev 268) +++ trunk/src/dbpedia-navigator/Ajax-Test/ajax.php 2007-10-29 12:26:01 UTC (rev 269) @@ -18,4 +18,8 @@ 'onResponseDelay' => 'showLoadingConcept', 'beforeResponseProcessing' => 'hideLoadingConcept' )); +$xajax->register(XAJAX_FUNCTION, 'getSubjectsFromConcept', array( + 'onResponseDelay' => 'showLoadingConceptSubjects', + 'beforeResponseProcessing' => 'hideLoadingConceptSubjects' + )); ?> \ No newline at end of file Modified: trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php 2007-10-29 10:38:02 UTC (rev 268) +++ trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php 2007-10-29 12:26:01 UTC (rev 269) @@ -11,7 +11,7 @@ $subjects=$sc->getSubjects($label,$limit); foreach ($subjects as $subject) { - $content.="<a href=\"\" onclick=\"xajax_getarticle('".$subject."');return false;\">".urldecode($subject)."</a><br/>"; + $content.="<a href=\"\" onclick=\"xajax_getarticle('".$subject."');return false;\">".urldecode(substr (strrchr ($subject, "/"), 1))."</a><br/>"; } $objResponse = new xajaxResponse(); @@ -106,6 +106,7 @@ $sc=new SparqlConnection($settings->dbpediauri,$settings->wsdluri); $concept.=$sc->getConceptFromExamples($_SESSION['positive'],$_SESSION['negative']); + $_SESSION['lastLearnedConcept']=$concept; } else $concept.="You must choose at least one<br/> positive and one negative example."; @@ -114,6 +115,29 @@ return $objResponse; } +function getSubjectsFromConcept() +{ + require_once("Settings.php"); + require_once("SparqlConnection.php"); + $settings=new Settings(); + $sc=new SparqlConnection($settings->dbpediauri,$settings->wsdluri); + + $content=""; + if (isset($_SESSION['lastLearnedConcept'])) + { + $subjects=$sc->getSubjectsFromConcept($_SESSION['lastLearnedConcept']); + foreach ($subjects as $subject) + { + $content.="<a href=\"\" onclick=\"xajax_getarticle('".$subject."');return false;\">".urldecode(substr (strrchr ($subject, "/"), 1))."</a><br/>"; + } + } + else $content.="No concept to get Subjects from."; + + $objResponse = new xajaxResponse(); + $objResponse->assign("conceptsubjectcontent", "innerHTML", $content); + return $objResponse; +} + require("ajax.php"); $xajax->processRequest(); ?> \ No newline at end of file Modified: trunk/src/dbpedia-navigator/Ajax-Test/index.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/index.php 2007-10-29 10:38:02 UTC (rev 268) +++ trunk/src/dbpedia-navigator/Ajax-Test/index.php 2007-10-29 12:26:01 UTC (rev 269) @@ -1,10 +1,8 @@ <?php session_start(); -unset($_SESSION['positive']); -unset($_SESSION['negative']); +echo "<a href='clearsession.php'>start from scratch</a>"; - require("ajax.php"); ini_set('error_reporting',E_ALL); ini_set('max_execution_time',200); @@ -41,6 +39,14 @@ hideLoadingConcept = function() { xajax.$('loadingConcept').style.display = 'none'; xajax.$('conceptcontent').style.display = 'block'; + }; + showLoadingConceptSubjects = function() { + xajax.$('loadingConceptSubjects').style.display='block'; + xajax.$('conceptsubjectcontent').style.display = 'none'; + }; + hideLoadingConceptSubjects = function() { + xajax.$('loadingConceptSubjects').style.display = 'none'; + xajax.$('conceptsubjectcontent').style.display = 'block'; } </script> </head> @@ -84,6 +90,14 @@ </div> <!-- boxcontent --> </div> <!-- box --> +<div class="box" id="conceptSubjects"> + <div class="boxtitlewithbutton"><table border="0" class="titletable"><tr><td class="left">Subjects From Concept</td><td class="right"><input type="button" value="Show" class="button" onclick="xajax_getSubjectsFromConcept();return false;" /></td></tr></table></div> + <div class="boxcontent"> + <div id="conceptsubjectcontent" style="display:none"></div> + <div id="loadingConceptSubjects" style="display:none"><img src="ajax-loader.gif" alt="Loading..."/></div> + </div> <!-- boxcontent --> +</div> <!-- box --> + <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> </div><!-- END leftSidebar --> Added: trunk/src/dbpedia-navigator/Ajax-Test/pear/HTTP_Request.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/pear/HTTP_Request.php (rev 0) +++ trunk/src/dbpedia-navigator/Ajax-Test/pear/HTTP_Request.php 2007-10-29 12:26:01 UTC (rev 269) @@ -0,0 +1,2760 @@ +<?php + +// +-----------------------------------------------------------------------+ +// | Copyright (c) 2002-2003, Richard Heyes | +// | All rights reserved. | +// | | +// | Redistribution and use in source and binary forms, with or without | +// | modification, are permitted provided that the following conditions | +// | are met: | +// | | +// | o Redistributions of source code must retain the above copyright | +// | notice, this list of conditions and the following disclaimer. | +// | o Redistributions in binary form must reproduce the above copyright | +// | notice, this list of conditions and the following disclaimer in the | +// | documentation and/or other materials provided with the distribution.| +// | o The names of the authors may not be used to endorse or promote | +// | products derived from this software without specific prior written | +// | permission. | +// | | +// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | +// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | +// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | +// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | + +// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | + +// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | + +// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | + +// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | + +// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | + +// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | + +// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | + +// | | + +// +-----------------------------------------------------------------------+ + +// | Author: Richard Heyes <ri...@ph...> | + +// +-----------------------------------------------------------------------+ + +/* +// $Id: Request.php,v 1.1 2006/12/12 16:42:26 punkrock Exp $ +// +// HTTP_Request Class +// +// Simple example, (Fetches yahoo.com and displays it): +// +// $a = &new HTTP_Request('http://localhost:8081'); +// $a->sendRequest(); +// echo $a->getResponseBody(); +*/ + + + +require_once 'PEAR.php'; + +require_once 'Socket.php'; + +require_once 'URL.php'; + + + +define('HTTP_REQUEST_METHOD_GET', 'GET', true); + +define('HTTP_REQUEST_METHOD_HEAD', 'HEAD', true); + +define('HTTP_REQUEST_METHOD_POST', 'POST', true); + +define('HTTP_REQUEST_METHOD_PUT', 'PUT', true); + +define('HTTP_REQUEST_METHOD_DELETE', 'DELETE', true); + +define('HTTP_REQUEST_METHOD_OPTIONS', 'OPTIONS', true); + +define('HTTP_REQUEST_METHOD_TRACE', 'TRACE', true); + + + +define('HTTP_REQUEST_HTTP_VER_1_0', '1.0', true); + +define('HTTP_REQUEST_HTTP_VER_1_1', '1.1', true); + + + +class HTTP_Request { + + + + /** + + * Instance of Net_URL + + * @var object Net_URL + + */ + + var $_url; + + + + /** + + * Type of request + + * @var string + + */ + + var $_method; + + + + /** + + * HTTP Version + + * @var string + + */ + + var $_http; + + + + /** + + * Request headers + + * @var array + + */ + + var $_requestHeaders; + + + + /** + + * Basic Auth Username + + * @var string + + */ + + var $_user; + + + + /** + + * Basic Auth Password + + * @var string + + */ + + var $_pass; + + + + /** + + * Socket object + + * @var object Net_Socket + + */ + + var $_sock; + + + + /** + + * Proxy server + + * @var string + + */ + + var $_proxy_host; + + + + /** + + * Proxy port + + * @var integer + + */ + + var $_proxy_port; + + + + /** + + * Proxy username + + * @var string + + */ + + var $_proxy_user; + + + + /** + + * Proxy password + + * @var string + + */ + + var $_proxy_pass; + + + + /** + + * Post data + + * @var array + + */ + + var $_postData; + + + + /** + + * Request body + + * @var string + + */ + + var $_body; + + + + /** + + * A list of methods that MUST NOT have a request body, per RFC 2616 + + * @var array + + */ + + var $_bodyDisallowed = array('TRACE'); + + + + /** + + * Files to post + + * @var array + + */ + + var $_postFiles = array(); + + + + /** + + * Connection timeout. + + * @var float + + */ + + var $_timeout; + + + + /** + + * HTTP_Response object + + * @var object HTTP_Response + + */ + + var $_response; + + + + /** + + * Whether to allow redirects + + * @var boolean + + */ + + var $_allowRedirects; + + + + /** + + * Maximum redirects allowed + + * @var integer + + */ + + var $_maxRedirects; + + + + /** + + * Current number of redirects + + * @var integer + + */ + + var $_redirects; + + + + /** + + * Whether to append brackets [] to array variables + + * @var bool + + */ + + var $_useBrackets = true; + + + + /** + + * Attached listeners + + * @var array + + */ + + var $_listeners = array(); + + + + /** + + * Whether to save response body in response object property + + * @var bool + + */ + + var $_saveBody = true; + + + + /** + + * Timeout for reading from socket (array(seconds, microseconds)) + + * @var array + + */ + + var $_readTimeout = null; + + + + /** + + * Options to pass to Net_Socket::connect. See stream_context_create + + * @var array + + */ + + var $_socketOptions = null; + + + + /** + + * Constructor + + * + + * Sets up the object + + * @param string The url to fetch/access + + * @param array Associative array of parameters which can have the following keys: + + * <ul> + + * <li>method - Method to use, GET, POST etc (string)</li> + + * <li>http - HTTP Version to use, 1.0 or 1.1 (string)</li> + + * <li>user - Basic Auth username (string)</li> + + * <li>pass - Basic Auth password (string)</li> + + * <li>proxy_host - Proxy server host (string)</li> + + * <li>proxy_port - Proxy server port (integer)</li> + + * <li>proxy_user - Proxy auth username (string)</li> + + * <li>proxy_pass - Proxy auth password (string)</li> + + * <li>timeout - Connection timeout in seconds (float)</li> + + * <li>allowRedirects - Whether to follow redirects or not (bool)</li> + + * <li>maxRedirects - Max number of redirects to follow (integer)</li> + + * <li>useBrackets - Whether to append [] to array variable names (bool)</li> + + * <li>saveBody - Whether to save response body in response object property (bool)</li> + + * <li>readTimeout - Timeout for reading / writing data over the socket (array (seconds, microseconds))</li> + + * <li>socketOptions - Options to pass to Net_Socket object (array)</li> + + * </ul> + + * @access public + + */ + + function HTTP_Request($url = '', $params = array()) + + { + + $this->_method = HTTP_REQUEST_METHOD_GET; + + $this->_http = HTTP_REQUEST_HTTP_VER_1_1; + + $this->_requestHeaders = array(); + + $this->_postData = array(); + + $this->_body = null; + + + + $this->_user = null; + + $this->_pass = null; + + + + $this->_proxy_host = null; + + $this->_proxy_port = null; + + $this->_proxy_user = null; + + $this->_proxy_pass = null; + + + + $this->_allowRedirects = false; + + $this->_maxRedirects = 3; + + $this->_redirects = 0; + + + + $this->_timeout = null; + + $this->_response = null; + + + + foreach ($params as $key => $value) { + + $this->{'_' . $key} = $value; + + } + + + + if (!empty($url)) { + + $this->setURL($url); + + } + + + + // Default useragent + + $this->addHeader('User-Agent', 'PEAR HTTP_Request class ( http://pear.php.net/ )'); + + + + // We don't do keep-alives by default + + $this->addHeader('Connection', 'close'); + + + + // Basic authentication + + if (!empty($this->_user)) { + + $this->addHeader('Authorization', 'Basic ' . base64_encode($this->_user . ':' . $this->_pass)); + + } + + + + // Proxy authentication (see bug #5913) + + if (!empty($this->_proxy_user)) { + + $this->addHeader('Proxy-Authorization', 'Basic ' . base64_encode($this->_proxy_user . ':' . $this->_proxy_pass)); + + } + + + + // Use gzip encoding if possible + + // Avoid gzip encoding if using multibyte functions (see #1781) + + if (HTTP_REQUEST_HTTP_VER_1_1 == $this->_http && extension_loaded('zlib') && + + 0 == (2 & ini_get('mbstring.func_overload'))) { + + + + $this->addHeader('Accept-Encoding', 'gzip'); + + } + + } + + + + /** + + * Generates a Host header for HTTP/1.1 requests + + * + + * @access private + + * @return string + + */ + + function _generateHostHeader() + + { + + if ($this->_url->port != 80 AND strcasecmp($this->_url->protocol, 'http') == 0) { + + $host = $this->_url->host . ':' . $this->_url->port; + + + + } elseif ($this->_url->port != 443 AND strcasecmp($this->_url->protocol, 'https') == 0) { + + $host = $this->_url->host . ':' . $this->_url->port; + + + + } elseif ($this->_url->port == 443 AND strcasecmp($this->_url->protocol, 'https') == 0 AND strpos($this->_url->url, ':443') !== false) { + + $host = $this->_url->host . ':' . $this->_url->port; + + + + } else { + + $host = $this->_url->host; + + } + + + + return $host; + + } + + + + /** + + * Resets the object to its initial state (DEPRECATED). + + * Takes the same parameters as the constructor. + + * + + * @param string $url The url to be requested + + * @param array $params Associative array of parameters + + * (see constructor for details) + + * @access public + + * @deprecated deprecated since 1.2, call the constructor if this is necessary + + */ + + function reset($url, $params = array()) + + { + + $this->HTTP_Request($url, $params); + + } + + + + /** + + * Sets the URL to be requested + + * + + * @param string The url to be requested + + * @access public + + */ + + function setURL($url) + + { + + $this->_url = &new Net_URL($url, $this->_useBrackets); + + + + if (!empty($this->_url->user) || !empty($this->_url->pass)) { + + $this->setBasicAuth($this->_url->user, $this->_url->pass); + + } + + + + if (HTTP_REQUEST_HTTP_VER_1_1 == $this->_http) { + + $this->addHeader('Host', $this->_generateHostHeader()); + + } + + + + // set '/' instead of empty path rather than check later (see bug #8662) + + if (empty($this->_url->path)) { + + $this->_url->path = '/'; + + } + + } + + + + /** + + * Returns the current request URL + + * + + * @return string Current request URL + + * @access public + + */ + + function getUrl($url) + + { + + return empty($this->_url)? '': $this->_url->getUrl(); + + } + + + + /** + + * Sets a proxy to be used + + * + + * @param string Proxy host + + * @param int Proxy port + + * @param string Proxy username + + * @param string Proxy password + + * @access public + + */ + + function setProxy($host, $port = 8080, $user = null, $pass = null) + + { + + $this->_proxy_host = $host; + + $this->_proxy_port = $port; + + $this->_proxy_user = $user; + + $this->_proxy_pass = $pass; + + + + if (!empty($user)) { + + $this->addHeader('Proxy-Authorization', 'Basic ' . base64_encode($user . ':' . $pass)); + + } + + } + + + + /** + + * Sets basic authentication parameters + + * + + * @param string Username + + * @param string Password + + */ + + function setBasicAuth($user, $pass) + + { + + $this->_user = $user; + + $this->_pass = $pass; + + + + $this->addHeader('Authorization', 'Basic ' . base64_encode($user . ':' . $pass)); + + } + + + + /** + + * Sets the method to be used, GET, POST etc. + + * + + * @param string Method to use. Use the defined constants for this + + * @access public + + */ + + function setMethod($method) + + { + + $this->_method = $method; + + } + + + + /** + + * Sets the HTTP version to use, 1.0 or 1.1 + + * + + * @param string Version to use. Use the defined constants for this + + * @access public + + */ + + function setHttpVer($http) + + { + + $this->_http = $http; + + } + + + + /** + + * Adds a request header + + * + + * @param string Header name + + * @param string Header value + + * @access public + + */ + + function addHeader($name, $value) + + { + + $this->_requestHeaders[strtolower($name)] = $value; + + } + + + + /** + + * Removes a request header + + * + + * @param string Header name to remove + + * @access public + + */ + + function removeHeader($name) + + { + + if (isset($this->_requestHeaders[strtolower($name)])) { + + unset($this->_requestHeaders[strtolower($name)]); + + } + + } + + + + /** + + * Adds a querystring parameter + + * + + * @param string Querystring parameter name + + * @param string Querystring parameter value + + * @param bool Whether the value is already urlencoded or not, default = not + + * @access public + + */ + + function addQueryString($name, $value, $preencoded = false) + + { + + $this->_url->addQueryString($name, $value, $preencoded); + + } + + + + /** + + * Sets the querystring to literally what you supply + + * + + * @param string The querystring data. Should be of the format foo=bar&x=y etc + + * @param bool Whether data is already urlencoded or not, default = already encoded + + * @access public + + */ + + function addRawQueryString($querystring, $preencoded = true) + + { + + $this->_url->addRawQueryString($querystring, $preencoded); + + } + + + + /** + + * Adds postdata items + + * + + * @param string Post data name + + * @param string Post data value + + * @param bool Whether data is already urlencoded or not, default = not + + * @access public + + */ + + function addPostData($name, $value, $preencoded = false) + + { + + if ($preencoded) { + + $this->_postData[$name] = $value; + + } else { + + $this->_postData[$name] = $this->_arrayMapRecursive('urlencode', $value); + + } + + } + + + + /** + + * Recursively applies the callback function to the value + + * + + * @param mixed Callback function + + * @param mixed Value to process + + * @access private + + * @return mixed Processed value + + */ + + function _arrayMapRecursive($callback, $value) + + { + + if (!is_array($value)) { + + return call_user_func($callback, $value); + + } else { + + $map = array(); + + foreach ($value as $k => $v) { + + $map[$k] = $this->_arrayMapRecursive($callback, $v); + + } + + return $map; + + } + + } + + + + /** + + * Adds a file to upload + + * + + * This also changes content-type to 'multipart/form-data' for proper upload + + * + + * @access public + + * @param string name of file-upload field + + * @param mixed file name(s) + + * @param mixed content-type(s) of file(s) being uploaded + + * @return bool true on success + + * @throws PEAR_Error + + */ + + function addFile($inputName, $fileName, $contentType = 'application/octet-stream') + + { + + if (!is_array($fileName) && !is_readable($fileName)) { + + return PEAR::raiseError("File '{$fileName}' is not readable"); + + } elseif (is_array($fileName)) { + + foreach ($fileName as $name) { + + if (!is_readable($name)) { + + return PEAR::raiseError("File '{$name}' is not readable"); + + } + + } + + } + + $this->addHeader('Content-Type', 'multipart/form-data'); + + $this->_postFiles[$inputName] = array( + + 'name' => $fileName, + + 'type' => $contentType + + ); + + return true; + + } + + + + /** + + * Adds raw postdata (DEPRECATED) + + * + + * @param string The data + + * @param bool Whether data is preencoded or not, default = already encoded + + * @access public + + * @deprecated deprecated since 1.3.0, method setBody() should be used instead + + */ + + function addRawPostData($postdata, $preencoded = true) + + { + + $this->_body = $preencoded ? $postdata : urlencode($postdata); + + } + + + + /** + + * Sets the request body (for POST, PUT and similar requests) + + * + + * @param string Request body + + * @access public + + */ + + function setBody($body) + + { + + $this->_body = $body; + + } + + + + /** + + * Clears any postdata that has been added (DEPRECATED). + + * + + * Useful for multiple request scenarios. + + * + + * @access public + + * @deprecated deprecated since 1.2 + + */ + + function clearPostData() + + { + + $this->_postData = null; + + } + + + + /** + + * Appends a cookie to "Cookie:" header + + * + + * @param string $name cookie name + + * @param string $value cookie value + + * @access public + + */ + + function addCookie($name, $value) + + { + + $cookies = isset($this->_requestHeaders['cookie']) ? $this->_requestHeaders['cookie']. '; ' : ''; + + $this->addHeader('Cookie', $cookies . $name . '=' . $value); + + } + + + + /** + + * Clears any cookies that have been added (DEPRECATED). + + * + + * Useful for multiple request scenarios + + * + + * @access public + + * @deprecated deprecated since 1.2 + + */ + + function clearCookies() + + { + + $this->removeHeader('Cookie'); + + } + + + + /** + + * Sends the request + + * + + * @access public + + * @param bool Whether to store response body in Response object property, + + * set this to false if downloading a LARGE file and using a Listener + + * @return mixed PEAR error on error, true otherwise + + */ + + function sendRequest($saveBody = true){ + + if (!is_a($this->_url, 'Net_URL')) { + + return PEAR::raiseError('No URL given.'); + + } + + + + $host = isset($this->_proxy_host) ? $this->_proxy_host : $this->_url->host; + + $port = isset($this->_proxy_port) ? $this->_proxy_port : $this->_url->port; + + + + // 4.3.0 supports SSL connections using OpenSSL. The function test determines + + // we running on at least 4.3.0 + + if (strcasecmp($this->_url->protocol, 'https') == 0 AND function_exists('file_get_contents') AND extension_loaded('openssl')) { + + if (isset($this->_proxy_host)) { + + return PEAR::raiseError('HTTPS proxies are not supported.'); + + } + + $host = 'ssl://' . $host; + + } + + + + // magic quotes may fuck up file uploads and chunked response processing + + $magicQuotes = ini_get('magic_quotes_runtime'); + + ini_set('magic_quotes_runtime', false); + + + + // RFC 2068, section 19.7.1: A client MUST NOT send the Keep-Alive + + // connection token to a proxy server... + + if (isset($this->_proxy_host) && !empty($this->_requestHeaders['connection']) && + + 'Keep-Alive' == $this->_requestHeaders['connection']) + + { + + $this->removeHeader('connection'); + + } + + + + $keepAlive = (HTTP_REQUEST_HTTP_VER_1_1 == $this->_http && empty($this->_requestHeaders['connection'])) || + + (!empty($this->_requestHeaders['connection']) && 'Keep-Alive' == $this->_requestHeaders['connection']); + + $sockets = &PEAR::getStaticProperty('HTTP_Request', 'sockets'); + + $sockKey = $host . ':' . $port; + + unset($this->_sock); + + + + // There is a connected socket in the "static" property? + + if ($keepAlive && !empty($sockets[$sockKey]) && + + !empty($sockets[$sockKey]->fp)) + + { + + $this->_sock =& $sockets[$sockKey]; + + $err = null; + + } else { + + $this->_notify('connect'); + + $this->_sock =& new Net_Socket(); + + $err = $this->_sock->connect($host, $port, null, $this->_timeout, $this->_socketOptions); + + } + + PEAR::isError($err) or $err = $this->_sock->write($this->_buildRequest()); + + + + if (!PEAR::isError($err)) { + + if (!empty($this->_readTimeout)) { + + $this->_sock->setTimeout($this->_readTimeout[0], $this->_readTimeout[1]); + + } + + + + $this->_notify('sentRequest'); + + + + // Read the response + + $this->_response = &new HTTP_Response($this->_sock, $this->_listeners); + + $err = $this->_response->process( + + $this->_saveBody && $saveBody, + + HTTP_REQUEST_METHOD_HEAD != $this->_method + + ); + + + + if ($keepAlive) { + + $keepAlive = (isset($this->_response->_headers['content-length']) + + || (isset($this->_response->_headers['transfer-encoding']) + + && strtolower($this->_response->_headers['transfer-encoding']) == 'chunked')); + + if ($keepAlive) { + + if (isset($this->_response->_headers['connection'])) { + + $keepAlive = strtolower($this->_response->_headers['connection']) == 'keep-alive'; + + } else { + + $keepAlive = 'HTTP/'.HTTP_REQUEST_HTTP_VER_1_1 == $this->_response->_protocol; + + } + + } + + } + + } + + + + ini_set('magic_quotes_runtime', $magicQuotes); + + + + if (PEAR::isError($err)) { + + return $err; + + } + + + + if (!$keepAlive) { + + $this->disconnect(); + + // Store the connected socket in "static" property + + } elseif (empty($sockets[$sockKey]) || empty($sockets[$sockKey]->fp)) { + + $sockets[$sockKey] =& $this->_sock; + + } + + + + // Check for redirection + + if ( $this->_allowRedirects + + AND $this->_redirects <= $this->_maxRedirects + + AND $this->getResponseCode() > 300 + + AND $this->getResponseCode() < 399 + + AND !empty($this->_response->_headers['location'])) { + + + + + + $redirect = $this->_response->_headers['location']; + + + + // Absolute URL + + if (preg_match('/^https?:\/\//i', $redirect)) { + + $this->_url = &new Net_URL($redirect); + + $this->addHeader('Host', $this->_generateHostHeader()); + + // Absolute path + + } elseif ($redirect{0} == '/') { + + $this->_url->path = $redirect; + + + + // Relative path + + } elseif (substr($redirect, 0, 3) == '../' OR substr($redirect, 0, 2) == './') { + + if (substr($this->_url->path, -1) == '/') { + + $redirect = $this->_url->path . $redirect; + + } else { + + $redirect = dirname($this->_url->path) . '/' . $redirect; + + } + + $redirect = Net_URL::resolvePath($redirect); + + $this->_url->path = $redirect; + + + + // Filename, no path + + } else { + + if (substr($this->_url->path, -1) == '/') { + + $redirect = $this->_url->path . $redirect; + + } else { + + $redirect = dirname($this->_url->path) . '/' . $redirect; + + } + + $this->_url->path = $redirect; + + } + + + + $this->_redirects++; + + return $this->sendRequest($saveBody); + + + + // Too many redirects + + } elseif ($this->_allowRedirects AND $this->_redirects > $this->_maxRedirects) { + + return PEAR::raiseError('Too many redirects'); + + } + + + + return true; + + } + + + + /** + + * Disconnect the socket, if connected. Only useful if using Keep-Alive. + + * + + * @access public + + */ + + function disconnect() + + { + + if (!empty($this->_sock) && !empty($this->_sock->fp)) { + + $this->_notify('disconnect'); + + $this->_sock->disconnect(); + + } + + } + + + + /** + + * Returns the response code + + * + + * @access public + + * @return mixed Response code, false if not set + + */ + + function getResponseCode() + + { + + return isset($this->_response->_code) ? $this->_response->_code : false; + + } + + + + /** + + * Returns either the named header or all if no name given + + * + + * @access public + + * @param string The header name to return, do not set to get all headers + + * @return mixed either the value of $headername (false if header is not present) + + * or an array of all headers + + */ + + function getResponseHeader($headername = null) + + { + + if (!isset($headername)) { + + return isset($this->_response->_headers)? $this->_response->_headers: array(); + + } else { + + $headername = strtolower($headername); + + return isset($this->_response->_headers[$headername]) ? $this->_response->_headers[$headername] : false; + + } + + } + + + + /** + + * Returns the body of the response + + * + + * @access public + + * @return mixed response body, false if not set + + */ + + function getResponseBody() + + { + + return isset($this->_response->_body) ? $this->_response->_body : false; + + } + + + + /** + + * Returns cookies set in response + + * + + * @access public + + * @return mixed array of response cookies, false if none are present + + */ + + function getResponseCookies() + + { + + return isset($this->_response->_cookies) ? $this->_response->_cookies : false; + + } + + + + /** + + * Builds the request string + + * + + * @access private + + * @return string The request string + + */ + + function _buildRequest() + + { + + $separator = ini_get('arg_separator.output'); + + ini_set('arg_separator.output', '&'); + + $querystring = ($querystring = $this->_url->getQueryString()) ? '?' . $querystring : ''; + + ini_set('arg_separator.output', $separator); + + + + $host = isset($this->_proxy_host) ? $this->_url->protocol . '://' . $this->_url->host : ''; + + $port = (isset($this->_proxy_host) AND $this->_url->port != 80) ? ':' . $this->_url->port : ''; + + $path = $this->_url->path . $querystring; + + $url = $host . $port . $path; + + + + $request = $this->_method . ' ' . $url . ' HTTP/' . $this->_http . "\r\n"; + + + + if (in_array($this->_method, $this->_bodyDisallowed) || + + (empty($this->_body) && (HTTP_REQUEST_METHOD_POST != $this->_method || + + (empty($this->_postData) && empty($this->_postFiles))))) + + { + + $this->removeHeader('Content-Type'); + + } else { + + if (empty($this->_requestHeaders['content-type'])) { + + // Add default content-type + + $this->addHeader('Content-Type', 'application/x-www-form-urlencoded'); + + } elseif ('multipart/form-data' == $this->_requestHeaders['content-type']) { + + $boundary = 'HTTP_Request_' . md5(uniqid('request') . microtime()); + + $this->addHeader('Content-Type', 'multipart/form-data; boundary=' . $boundary); + + } + + } + + + + // Request Headers + + if (!empty($this->_requestHeaders)) { + + foreach ($this->_requestHeaders as $name => $value) { + + $canonicalName = implode('-', array_map('ucfirst', explode('-', $name))); + + $request .= $canonicalName . ': ' . $value . "\r\n"; + + } + + } + + + + // No post data or wrong method, so simply add a final CRLF + + if (in_array($this->_method, $this->_bodyDisallowed) || + + (HTTP_REQUEST_METHOD_POST != $this->_method && empty($this->_body))) { + + + + $request .= "\r\n"; + + + + // Post data if it's an array + + } elseif (HTTP_REQUEST_METHOD_POST == $this->_method && + + (!empty($this->_postData) || !empty($this->_postFiles))) { + + + + // "normal" POST request + + if (!isset($boundary)) { + + $postdata = implode('&', array_map( + + create_function('$a', 'return $a[0] . \'=\' . $a[1];'), + + $this->_flattenArray('', $this->_postData) + + )); + + + + // multipart request, probably with file uploads + + } else { + + $postdata = ''; + + if (!empty($this->_postData)) { + + $flatData = $this->_flattenArray('', $this->_postData); + + foreach ($flatData as $item) { + + $postdata .= '--' . $boundary . "\r\n"; + + $postdata .= 'Content-Disposition: form-data; name="' . $item[0] . '"'; + + $postdata .= "\r\n\r\n" . urldecode($item[1]) . "\r\n"; + + } + + } + + foreach ($this->_postFiles as $name => $value) { + + if (is_array($value['name'])) { + + $varname = $name . ($this->_useBrackets? '[]': ''); + + } else { + + $varname = $name; + + $value['name'] = array($value['name']); + + } + + foreach ($value['name'] as $key => $filename) { + + $fp = fopen($filename, 'r'); + + $data = fread($fp, filesize($filename)); + + fclose($fp); + + $basename = basename($filename); + + $type = is_array($value['type'])? @$value['type'][$key]: $value['type']; + + + + $postdata .= '--' . $boundary . "\r\n"; + + $postdata .= 'Content-Disposition: form-data; name="' . $varname . '"; filename="' . $basename . '"'; + + $postdata .= "\r\nContent-Type: " . $type; + + $postdata .= "\r\n\r\n" . $data . "\r\n"; + + } + + } + + $postdata .= '--' . $boundary . "--\r\n"; + + } + + $request .= 'Content-Length: ' . strlen($postdata) . "\r\n\r\n"; + + $request .= $postdata; + + + + // Explicitly set request body + + } elseif (!empty($this->_body)) { + + + + $request .= 'Content-Length: ' . strlen($this->_body) . "\r\n\r\n"; + + $request .= $this->_body; + + } + + + + return $request; + + } + + + + /** + + * Helper function to change the (probably multidimensional) associative array + + * into the simple one. + + * + + * @param string name for item + + * @param mixed item's values + + * @return array array with the following items: array('item name', 'item value'); + + */ + + function _flattenArray($name, $values) + + { + + if (!is_array($values)) { + + return array(array($name, $values)); + + } else { + + $ret = array(); + + foreach ($values as $k => $v) { + + if (empty($name)) { + + $newName = $k; + + } elseif ($this->_useBrackets) { + + $newName = $name . '[' . $k . ']'; + + } else { + + $newName = $name; + + } + + $ret = array_merge($ret, $this->_flattenArray($newName, $v)); + + } + + return $ret; + + } + + } + + + + + + /** + + * Adds a Listener to the list of listeners that are notified of + + * the object's events + + * + + * @param object HTTP_Request_Listener instance to attach + + * @return boolean whether the listener was successfully attached + + * @access public + + */ + + function attach(&$listener) + + { + + if (!is_a($listener, 'HTTP_Request_Listener')) { + + return false; + + } + + $this->_listeners[$listener->getId()] =& $listener; + + return true; + + } + + + + + + /** + + * Removes a Listener from the list of listeners + + * + + * @param object HTTP_Request_Listener instance to detach + + * @return boolean whether the listener was successfully detached + + * @access public + + */ + + function detach(&$listener) + + { + + if (!is_a($listener, 'HTTP_Request_Listener') || + + !isset($this->_listeners[$listener->getId()])) { + + return false; + + } + + unset($this->_listeners[$listener->getId()]); + + return true; + + } + + + + + + /** + + * Notifies all registered listeners of an event. + + * + + * Events sent by HTTP_Request object + + * - 'connect': on connection to server + + * - 'sentRequest': after the request was sent + + * - 'disconnect': on disconnection from server + + * + + * Events sent by HTTP_Response object + + * - 'gotHeaders': after receiving response headers (headers are passed in $data) + + * - 'tick': on receiving a part of response body (the part is passed in $data) + + * - 'gzTick': on receiving a gzip-encoded part of response body (ditto) + + * - 'gotBody': after receiving the response body (passes the decoded body in $data if it was gzipped) + + * + + * @param string Event name + + * @param mixed Additional data + + * @access private + + */ + + function _notify($event, $data = null) + + { + + foreach (array_keys($this->_listeners) as $id) { + + $this->_listeners[$id]->update($this, $event, $data); + + } + + } + +} + + + + + +/** + +* Response class to complement the Request class + +*/ + +class HTTP_Response + +{ + + /** + + * Socket object + + * @var object + + */ + + var $_sock; + + + + /** + + * Protocol + + * @var string + + */ + + var $_protocol; + + + + /** + + * Return code + + * @var string + + */ + + var $_code; + + + + /** + + * Response headers + + * @var array + + */ + + var $_headers; + + + + /** + + * Cookies set in response + + * @var array + + */ + + var $_cookies; + + + + /** + + * Response body + + * @var string + + */ + + var $_body = ''; + + + + /** + + * Used by _readChunked(): remaining length of the current chunk + + * @var string + + */ + + var $_chunkLength = 0; + + + + /** + + * Attached listeners + + * @var array + + */ + + var $_listeners = array(); + + + + /** + + * Bytes left to read from message-body + + * @var null|int + + */ + + var $_toRead; + + + + /** + + * Constructor + + * + + * @param object Net_Socket socket to read the response from + + * @param array listeners attached to request + + * @return mixed PEAR Error on error, true otherwise + + */ + + function HTTP_Response(&$sock, &$listeners) + + { + + $this->_sock =& $sock; + + $this->_listeners =& $listeners; + + } + + + + + + /** + + * Processes a HTTP response + + * + + * This extracts response code, headers, cookies and decodes body if it + + * was encoded in some way + + * + + * @access public + + * @param bool Whether to store response body in object property, set + + * this to false if downloading a LARGE file and using a Listener. + + * This is assumed to be true if body is gzip-encoded. + + * @param bool Whether the response can actually have a message-body. + + * Will be set to false for HEAD requests. + + * @throws PEAR_Error + + * @return mixed true on success, PEAR_Error in case of malformed response + + */ + + function process($saveBody = true, $canHaveBody = true) + + { + + do { + + $line = $this->_sock->readLine(); + + if (sscanf($line, 'HTTP/%s %s', $http_version, $returncode) != 2) { + + return PEAR::raiseError('Malformed response.'); + + } else { + + $this->_protocol = 'HTTP/' . $http_version; + + $this->_code = intval($returncode); + + } + + while ('' !== ($header = $this->_sock->readLine())) { + + $this->_processHeader($header); + + } + + } while (100 == $this->_code); + + + + $this->_notify('gotHeaders', $this->_headers); + + + + // RFC 2616, section 4.4: + + // 1. Any response message which "MUST NOT" include a message-body ... + + // is always terminated by the first empty line after the header fields + + // 3. ... If a message is received with both a + + // Transfer-Encoding header field and a Content-Length header field, + + // the latter MUST be ignored. + + $canHaveBody = $canHaveBody && $this->_code >= 200 && + + $this->_code != 204 && $this->_code != 304; + + + + // If response body is present, read it and decode + + $chunked = isset($this->_headers['transfer-encoding']) && ('chunked' == $this->_headers['transfer-encoding']); + + $gzipped = isset($this->_headers['content-encoding']) && ('gzip' == $this->_headers['content-encoding']); + + $hasBody = false; + + if ($canHaveBody && ($chunked || !isset($this->_headers['content-length']) || + + 0 != $this->_headers['content-length'])) + + { + + if ($chunked || !isset($this->_headers['content-length'])) { + + $this->_toRead = null; + + } else { + + $this->_toRead = $this->_headers['content-length']; + + } + + while (!$this->_sock->eof() && (is_null($this->_toRead) || 0 < $this->_toRead)) { + + if ($chunked) { + + $data = $this->_readChunked(); + + } elseif (is_null($this->_toRead)) { + + $data = $this->_sock->read(4096); + + } else { + + $data = $this->_sock->read(min(4096, $this->_toRead)); + + $this->_toRead -= strlen($data); + + } + + if ('' == $data) { + + break; + + } else { + + $hasBody = true; + + if ($saveBody || $gzipped) { + + $this->_body .= $data; + + } + + $this->_notify($gzipped? 'gzTick': 'tick', $data); + + } + + } + + } + + + + if ($hasBody) { + + // Uncompress the body if needed + + if ($gzipped) { + + $body = $this->_decodeGzip($this->_body); + + if (PEAR::isError($body)) { + + return $body; + + } + + $this->_body = $body; + + $this->_notify('gotBody', $this->_body); + + } else { + + $this->_notify('gotBody'); + + } + + } + + return true; + + } + + + + + + /** + + * Processes the response header + + * + + * @access private + + * @param string HTTP header + + */ + + function _processHeader($header) + + { + + if (false === strpos($header, ':')) { + + return; + + } + + list($headername, $headervalue) = explode(':', $header, 2); + + $headername = strtolower($headername); + + $headervalue = ltrim($headervalue); + + + + if ('set-cookie' != $headername) { + + if (isset($this->_headers[$headername])) { + + $this->_headers[$headername] .= ',' . $headervalue; + + } else { + + $this->_headers[$headername] = $headervalue; + + } + + } else { + + $this->_parseCookie($headervalue); + + } + + } + + + + + + /** + + * Parse a Set-Cookie header to fill $_cookies array + + * + + * @access private + + * @param string value of Set-Cookie header + + */ + + function _parseCookie($headervalue) + + { + + $cookie = array( + + 'expires' => null, + + 'domain' => null, + + 'path' => null, + + 'secure' => false + + ); + + + + // Only a name=value pair + + if (!strpos($headervalue, ';')) { + + $pos = strpos($headervalue, '='); + + $cookie['name'] = trim(substr($headervalue, 0, $pos)); + + $cookie['value'] = trim(substr($headervalue, $pos + 1)); + + + + // Some optional parameters are supplied + + } else { + + $elements = explode(';', $headervalue); + + $pos = strpos($elements[0], '='); + + $cookie['name'] = trim(substr($elements[0], 0, $pos)); + + $cookie['value'] = trim(substr($elements[0], $pos + 1)); + + + + for ($i = 1; $i < count($elements); $i++) { + + if (false === strpos($elements[$i], '=')) { + + $elName = trim($elements[$i]); + + $elValue = null; + + } else { + + list ($elName, $elValue) = array_map('trim', explode('=', $elements[$i])); + + } + + $elName = strtolower($elName); + + if ('secure' == $elName) { + + $cookie['secure'] = true; + + } elseif ('expires' == $elName) { + + $cookie['expires'] = str_replace('"', '', $elValue); + + } elseif ('path' == $elName || 'domain' == $elName) { + + $cookie[$elName] = urldecode($elValue); + + } else { + + $cookie[$elName] = $elValue; + + } + + } + + } + + $this->_cookies[] = $cookie; + + } + + + + + + /** + + * Read a part of response body encoded with chunked Transfer-Encoding + + * + + * @access private + + * @return string + + */ + + function _readChunked() + + { + + // at start of the next chunk? + + if (0 == $this->_chunkLength) { + + $line = $this->_sock->readLine(); + + if (preg_match('/^([0-9a-f]+)/i', $line, $matches)) { + + $this->_chunkLength = hexdec($matches[1]); + + // Chunk with zero length indicates the end + + if (0 == $this->_chunkLength) { + + $this->_sock->readLine(); // make this an eof() + + return ''; + + } + + } else { + + return ''; + + } + + } + + $data = $this->_sock->read($this->_chunkLength); + + $this->_chunkLength -= strlen($data); + + if (0 == $this->_chunkLength) { + + $this->_sock->readLine(); // Trailing CRLF + + } + + return $data; + + } + + + + + + /** + + * Notifies all registered listeners of an event. + + * + + * @param string Event name + + * @param mixed Additional data + + * @access private + + * @see HTTP_Request::_notify() + + */ + + function _notify($event, $data = null) + + { + + foreach (array_keys($this->_listeners) as $id) { + + $this->_listeners[$id]->update($this, $event, $data); + + } + + } + + + + + + /** + + * Decodes the message-body encoded by gzip + + * + + * The real decoding work is done by gzinflate() built-in function, this + + * method only parses the header and checks data for compliance with + + * RFC 1952 + + * + + * @access private + + * @param string gzip-encoded data + + * @return string decoded data + + */ + + function _decodeGzip($data) + + { + + $length = strlen($data); + + // If it doesn't look like gzip-encoded data, don't bother + + if (18 > $length || strcmp(substr($data, 0, 2), "\x1f\x8b")) { + + return $data; + + } + + $method = ord(substr($data, 2, 1)); + + if (8 != $method) { + + return PEAR::raiseError('_decodeGzip(): unknown compression method'); + + } + + $flags = ord(substr($data, 3, 1)); + + if ($flags & 224) { + + return PEAR::raiseError('_decodeGzip(): reserved bits are set'); + + } + + + + // header is 10 bytes minimum. may be longer, though. + + $headerLength = 10; + + // extra fields, need to skip 'em + + if ($flags & 4) { + + if ($length - $headerLength - 2 < 8) { + + return PEAR::raiseError('_decodeGzip(): data too short'); + + } + + $extraLength = unpack('v', substr($data, 10, 2)); + + if ($length - $headerLength - 2 - $extraLength[1] < 8) { + + return PEAR::raiseError('_decodeGzip(): data too short'); + + } + + $headerLength += $extraLength[1] + 2; + + } + + // file name, need to skip that + + if ($flags & 8) { + + if ($length - $headerLength - 1 < 8) { + + return PEAR::raiseError('_decodeGzip(): data too short'); + + } + + $filenameLength = strpos(substr($data, $headerLength), chr(0)); + + if (false === $filenameLength || $length - $headerLength - $filenameLength - 1 < 8) { + + return PEAR::raiseError('_decodeGzip(): data too short'); + + } + + $headerLength += $filenameLength + 1; + + } + + // comment, need to skip that also + + if ($flags & 16) { + + if ($length - $headerLength - 1 < 8) { + + return PEAR::raiseError('_decodeGzip(): data too short'); + + } + + $commentLength = strpos(substr($data, $headerLength), chr(0)); + + if (false === $commentLength || $length - $headerLength - $commentLength - 1 < 8) { + + return PEAR::raiseError('_decodeGzip(): data too short'); + + } + + $headerLength += $commentLength + 1; + + } + + // have a CRC for header. let's check + + if ($flags & 1) { + + if ($length - $headerLength - 2 < 8) { + + return PEAR::raiseError('_decodeGzip(): data too short'); + + } + + $crcReal = 0xffff & crc32(substr($data, 0, $headerLength)); + + $crcStored = unpack('v', substr($data, $headerLength, 2)); + + if ($crcReal != $crcStored[1]) { + + return PEAR::raiseError('_decodeGzip(): header CRC check failed'); + + } + + $headerLength += 2; + + } + + // unpacked data CRC and size at the end of encoded data + + $tmp = unpack('V2', substr($data, -8)); + + $dataCrc = $tmp[1]; + + $dataSize = $tmp[2]; + + + + // finally, call the gzinflate() function + + $unpacked = @gzinflate(substr($data, $headerLength, -8), $dataSize); + + if (false === $unpacked) { + + return PEAR::raiseError('_decodeGzip(): gzinflate() call failed'); + + } elseif ($dataSize != strlen($unpacked)) { + + return PEAR::raiseError('_decodeGzip(): data size check failed'); + + } elseif ($dataCrc != crc32($unpacked)) { + + return PEAR::raiseError('_decodeGzip(): data CRC check failed'); + + } + + return $unpacked; + + } + +} // End class HTTP_Response + +?> + Added: trunk/src/dbpedia-navigator/Ajax-Test/pear/PEAR.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/pear/PEAR.php (rev 0) +++ trunk/src/dbpedia-navigator/Ajax-Test/pear/PEAR.php 2007-10-29 12:26:01 UTC (rev 269) @@ -0,0 +1,1108 @@ +<?php +/** + * PEAR, the PHP Extension and Application Repository + * + * PEAR class and PEAR_Error class + * + * PHP versions 4 and 5 + * + * LICENSE: This source file is subject to version 3.0 of the PHP license + * that is available through the world-wide-web at the following URI: + * http://www.php.net/license/3_0.txt. If you did not receive a copy of + * the PHP License and are unable to obtain it through the web, please + * send a note to li...@ph... so we can mail you a copy immediately. + * + * @category pear + * @package PEAR + * @author Sterling Hughes <ste...@ph...> + * @author Stig Bakken <ss...@ph...> + * @author Tomas V.V.Cox <co...@id...> + * @author Greg Beaver <ce...@ph...> + * @copyright 1997-2006 The PHP Group + * @license http://www.php.net/license/3_0.txt PHP License 3.0 + * @version CVS: $Id: PEAR.php,v 1.101 2006/04/25 02:41:03 cellog Exp $ + * @link http://pear.php.net/package/PEAR + * @since File available since Release 0.1 + */ + +/**#@+ + * ERROR constants + */ +define('PEAR_ERROR_RETURN', 1); +define('PEAR_ERROR_PRINT', 2); +define('PEAR_ERROR_TRIGGER', 4); +define('PEAR_ERROR_DIE', 8); +define('PEAR_ERROR_CALLBACK', 16); +/** + * WARNING: obsolete + * @deprecated + */ +define('PEAR_ERROR_EXCEPTION', 32); +/**#@-*/ +define('PEAR_ZE2', (function_exists('version_compare') && + version_compare(zend_version(), "2-dev", "ge"))); + +if (substr(PHP_OS, 0, 3) == 'WIN') { + define('OS_WINDOWS', true); + define('OS_UNIX', false); + define('PEAR_OS', 'Windows'); +} else { + define('OS_WINDOWS', false); + define('OS_UNIX', true); + define('PEAR_OS', 'Unix'); // blatant assumption +} + +// instant backwards compatibility +if (!defined('PATH_SEPARATOR')) { + if (OS_WINDOWS) { + define('PATH_SEPARATOR', ';'); + } else { + define('PATH_SEPARATOR', ':'); + } +} + +$GLOBALS['_PEAR_default_error_mode'] = PEAR_ERROR_RETURN; +$GLOBALS['_PEAR_default_error_options'] = E_USER_NOTICE; +$GLOBALS['_PEAR_destructor_object_list'] = array(); +$GLOBALS['_PEAR_shutdown_funcs'] = array(); +$GLOBALS['_PEAR_error_handler_stack'] = array(); + +@ini_set('track_errors', true); + +/** + * Base class for other PEAR classes. Provides rudimentary + * emulation of destructors. + * + * If you want a destructor in your class, inherit PEAR and make a + * destructor method called _yourclassname (same name as the + * constructor, but with a "_" prefix). Also, in your constructor you + * have to call the PEAR constructor: $this->PEAR();. + * The destructor method will be called without parameters. Note that + * at in some SAPI implementations (such as Apache), any output during + * the request shutdown (in which destructors are called) seems to be + * discarded. If you need to get any debug information from your + * destructor, use error_log(), syslog() or something similar. + * + * IMPORTANT! To use the emulated destructors you need to create the + * objects by reference: $obj =& new PEAR_child; + * + * @category pear + * @package PEAR + * @author Stig Bakken <ss...@ph...> + * @author Tomas V.V. Cox <co...@id...> + * @author Greg Beaver <ce...@ph...> + * @copyright 1997-2006 The PHP Gro... [truncated message content] |
From: <sk...@us...> - 2007-10-29 13:15:31
|
Revision: 273 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=273&view=rev Author: sknappe Date: 2007-10-29 06:15:28 -0700 (Mon, 29 Oct 2007) Log Message: ----------- Changed view of article Modified Paths: -------------- trunk/src/dbpedia-navigator/Ajax-Test/SparqlConnection.php trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php Modified: trunk/src/dbpedia-navigator/Ajax-Test/SparqlConnection.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/SparqlConnection.php 2007-10-29 12:37:30 UTC (rev 272) +++ trunk/src/dbpedia-navigator/Ajax-Test/SparqlConnection.php 2007-10-29 13:15:28 UTC (rev 273) @@ -91,7 +91,7 @@ foreach ($array as $element) { $items=preg_split("[<]",$element,-1, PREG_SPLIT_NO_EMPTY); - $ret[]=$items; + $ret[$items[1]]=$items[2]; } return $ret; Modified: trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php 2007-10-29 12:37:30 UTC (rev 272) +++ trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php 2007-10-29 13:15:28 UTC (rev 273) @@ -27,9 +27,8 @@ $sc=new SparqlConnection($settings->dbpediauri,$settings->wsdluri); $triples=$sc->getTriples($subject); $content=""; - foreach ($triples as $triple){ - $content.="Subject: ".urldecode($triple[0])."<br/>Predicate: ".urldecode($triple[1])."<br/>Object: ".urldecode($triple[2])."<br/><br/>\n"; - } + $content.="<img src=\"".$triples['http://xmlns.com/foaf/0.1/img']."\" alt=\"Picture of ".urldecode(substr (strrchr ($subject, "/"), 1))."\" width=\"50\"/ style=\"float:left\">"; + $content.="<div>".$triples['http://dbpedia.org/property/abstract']."</div>"; $contentbuttons="<input type=\"button\" value=\"Positive\" class=\"button\" onclick=\"xajax_addPositive('".$subject."');return false;\" /> <input type=\"button\" value=\"Negative\" class=\"button\" onclick=\"xajax_addNegative('".$subject."');return false;\" />"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sk...@us...> - 2007-11-05 13:07:13
|
Revision: 277 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=277&view=rev Author: sknappe Date: 2007-11-05 05:07:09 -0800 (Mon, 05 Nov 2007) Log Message: ----------- changed the search funtion Modified Paths: -------------- trunk/src/dbpedia-navigator/Ajax-Test/Settings.php trunk/src/dbpedia-navigator/Ajax-Test/SparqlConnection.php trunk/src/dbpedia-navigator/Ajax-Test/ajax-loader.gif trunk/src/dbpedia-navigator/Ajax-Test/ajax.php trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php trunk/src/dbpedia-navigator/Ajax-Test/default.css trunk/src/dbpedia-navigator/Ajax-Test/index.php Modified: trunk/src/dbpedia-navigator/Ajax-Test/Settings.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/Settings.php 2007-11-05 13:03:14 UTC (rev 276) +++ trunk/src/dbpedia-navigator/Ajax-Test/Settings.php 2007-11-05 13:07:09 UTC (rev 277) @@ -3,6 +3,6 @@ class Settings{ public $wsdluri="http://localhost:8181/services?wsdl"; public $dbpediauri="http://dbpedia.openlinksw.com:8890/sparql"; - public $sparqlttl=40; + public $sparqlttl=120; } ?> \ No newline at end of file Modified: trunk/src/dbpedia-navigator/Ajax-Test/SparqlConnection.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/SparqlConnection.php 2007-11-05 13:03:14 UTC (rev 276) +++ trunk/src/dbpedia-navigator/Ajax-Test/SparqlConnection.php 2007-11-05 13:07:09 UTC (rev 277) @@ -1,12 +1,12 @@ <?php -//require_once 'pear/HTTP_Request.php'; - class SparqlConnection { private $DBPediaUrl; private $DLLearnerUri; private $client; + private $id; + private $ksID; function SparqlConnection($DBPediaUrl,$DLLearnerUri) { @@ -14,41 +14,40 @@ $this->DBPediaUrl=$DBPediaUrl; $this->DLLearnerUri=$DLLearnerUri; $this->client=new SoapClient("main.wsdl"); + $this->id=$this->client->generateID(); + $this->ksID = $this->client->addKnowledgeSource($this->id, "sparql", $this->DBPediaUrl); } function getConceptFromExamples($ttl,$posExamples,$negExamples) { - $id=$this->client->generateID(); + $this->client->applyConfigEntryInt($this->id, $this->ksID, "numberOfRecursions", 2); + $this->client->applyConfigEntryStringArray($this->id, $this->ksID, "instances", array_merge($posExamples,$negExamples)); + $this->client->applyConfigEntryInt($this->id, $this->ksID, "filterMode", 0); + $this->client->applyConfigEntryStringArray($this->id, $this->ksID, "predList", array()); + $this->client->applyConfigEntryStringArray($this->id, $this->ksID, "objList", array()); + $this->client->applyConfigEntryStringArray($this->id, $this->ksID, "classList", array()); + $this->client->applyConfigEntryString($this->id, $this->ksID, "format", "KB"); + $this->client->applyConfigEntryBoolean($this->id, $this->ksID, "dumpToFile", true); - $ksID = $this->client->addKnowledgeSource($id, "sparql", $this->DBPediaUrl); - $this->client->applyConfigEntryInt($id, $ksID, "numberOfRecursions", 2); - $this->client->applyConfigEntryStringArray($id, $ksID, "instances", array_merge($posExamples,$negExamples)); - $this->client->applyConfigEntryInt($id, $ksID, "filterMode", 0); - $this->client->applyConfigEntryStringArray($id, $ksID, "predList", array()); - $this->client->applyConfigEntryStringArray($id, $ksID, "objList", array()); - $this->client->applyConfigEntryStringArray($id, $ksID, "classList", array()); - $this->client->applyConfigEntryString($id, $ksID, "format", "KB"); - $this->client->applyConfigEntryBoolean($id, $ksID, "dumpToFile", true); + $this->client->setReasoner($this->id, "dig"); + $this->client->setLearningProblem($this->id, "posNegDefinition"); + $this->client->setPositiveExamples($this->id, $posExamples); + $this->client->setNegativeExamples($this->id, $negExamples); + $this->client->setLearningAlgorithm($this->id, "refinement"); - $this->client->setReasoner($id, "dig"); - $this->client->setLearningProblem($id, "posNegDefinition"); - $this->client->setPositiveExamples($id, $posExamples); - $this->client->setNegativeExamples($id, $negExamples); - $this->client->setLearningAlgorithm($id, "refinement"); - $start = microtime(true); - $this->client->init($id); + $this->client->init($this->id); $threaded=true; if($threaded == false) { - $concept = $this->client->learn($id); + $concept = $this->client->learn($this->id); } else { - $this->client->learnThreaded($id); + $this->client->learnThreaded($this->id); $i = 1; $sleeptime = 1; @@ -58,36 +57,23 @@ sleep($sleeptime); // see what we have learned so far - $concept=$this->client->getCurrentlyBestConcept($id); - $running=$this->client->isAlgorithmRunning($id); + $concept=$this->client->getCurrentlyBestConcept($this->id); + $running=$this->client->isAlgorithmRunning($this->id); $seconds = $i * $sleeptime; $i++; } while($seconds<$ttl&&$running); - $this->client->stop($id); + $this->client->stop($this->id); } return $concept; } function getTriples($ttl,$individual) { - $id=$this->client->generateID(); - - $ksID = $this->client->addKnowledgeSource($id, "sparql", $this->DBPediaUrl); - $this->client->applyConfigEntryInt($id, $ksID, "numberOfRecursions", 1); - $this->client->applyConfigEntryStringArray($id, $ksID, "instances", array($individual)); - $this->client->applyConfigEntryInt($id, $ksID, "filterMode", -1); - $this->client->applyConfigEntryStringArray($id, $ksID, "predList", array()); - $this->client->applyConfigEntryStringArray($id, $ksID, "objList", array()); - $this->client->applyConfigEntryStringArray($id, $ksID, "classList", array()); - $this->client->applyConfigEntryString($id, $ksID, "format", "Array"); - $this->client->applyConfigEntryBoolean($id, $ksID, "dumpToFile", false); - $this->client->applyConfigEntryBoolean($id,$ksID,"useLits",true); - - $options=array("triples"); - $this->client->startThread($id,$ksID,$options); + $options=array("triples",$individual); + $this->client->startThread($this->id,$this->ksID,$options); $i = 1; $sleeptime = 1; @@ -96,15 +82,16 @@ sleep($sleeptime); // see if algorithm is running - if (!$this->client->isThreadRunning($id,$ksID,"triples")) + if (!$this->client->isThreadRunning($this->id,$this->ksID,"triples")) { - $object=$this->client->getFromSparql($id,$ksID,"triples"); + $object=$this->client->getFromSparql($this->id,$this->ksID,"triples"); $array=$object->item; + if (count($array)==1) return $array; $ret=array(); foreach ($array as $element) { $items=preg_split("[<]",$element,-1, PREG_SPLIT_NO_EMPTY); - $ret[$items[1]]=$items[2]; + $ret[$items[0]]=$items[1]; } return $ret; } @@ -113,18 +100,14 @@ $i++; } while($seconds<$ttl); - $this->client->stopSparqlThread($id,$ksID,"triples"); + $this->client->stopSparqlThread($this->id,$this->ksID,"triples"); return array(); } function getSubjects($ttl,$label='Leipzig',$limit=5) { - $id=$this->client->generateID(); - - $ksID = $this->client->addKnowledgeSource($id, "sparql", $this->DBPediaUrl); - $options=array("subjects",$label,$limit); - $this->client->startThread($id,$ksID,$options); + $this->client->startThread($this->id,$this->ksID,$options); $i = 1; $sleeptime = 1; @@ -133,9 +116,9 @@ sleep($sleeptime); // see if algorithm is running - if (!$this->client->isThreadRunning($id,$ksID,"subjects")) + if (!$this->client->isThreadRunning($this->id,$this->ksID,"subjects")) { - $object=$this->client->getFromSparql($id,$ksID,"subjects"); + $object=$this->client->getFromSparql($this->id,$this->ksID,"subjects"); return $object->item; } @@ -143,17 +126,14 @@ $i++; } while($seconds<$ttl); - $this->client->stopSparqlThread($id,$ksID,"subjects"); + $this->client->stopSparqlThread($this->id,$this->ksID,"subjects"); return array(); } function getSubjectsFromConcept($ttl,$concept) { - $id=$this->client->generateID(); - - $ksID = $this->client->addKnowledgeSource($id, "sparql", $this->DBPediaUrl); $options=array("conceptSubjects",$concept); - $this->client->startThread($id,$ksID,$options); + $this->client->startThread($this->id,$this->ksID,$options); $i = 1; $sleeptime = 1; do { @@ -161,9 +141,9 @@ sleep($sleeptime); // see if algorithm is running - if (!$this->client->isThreadRunning($id,$ksID,"conceptSubjects")) + if (!$this->client->isThreadRunning($this->id,$this->ksID,"conceptSubjects")) { - $object=$this->client->getFromSparql($id,$ksID,"conceptSubjects"); + $object=$this->client->getFromSparql($this->id,$this->ksID,"conceptSubjects"); return $object->item; } @@ -171,10 +151,71 @@ $i++; } while($seconds<$ttl); - $this->client->stopSparqlThread($id,$ksID,"conceptSubjects"); + $this->client->stopSparqlThread($this->id,$this->ksID,"conceptSubjects"); return array(); } + /*public function testSoapTime() + { + $start = microtime(true); + $this->id=$this->client->generateID(); + $test=$this->client->debug("Test"); + $time=microtime(true)-$start; + return "Word: ".$test." got from SOAP in: ".$time; + }*/ + + public function startSearchAndShowArticle($keyword) + { + //TODO work on $keyword to get white space out + //TODO change article get function + $options=array("triples","http://dbpedia.org/resource/".$keyword); + $this->client->startThread($this->id,$this->ksID,$options); + + $options=array("subjects",$keyword,15); + $this->client->startThread($this->id,$this->ksID,$options); + } + + public function checkSearch($stop) + { + $this->client=new SoapClient("main.wsdl"); + if ($stop){ + $this->client->stopSparqlThread($this->id,$this->ksID,"subjects"); + return; + } + + // see if algorithm is running + if (!$this->client->isThreadRunning($this->id,$this->ksID,"subjects")) + { + $object=$this->client->getFromSparql($this->id,$this->ksID,"subjects"); + return $object->item; + } + return NULL; + } + + public function checkShowArticle($stop) + { + $this->client=new SoapClient("main.wsdl"); + if ($stop){ + $this->client->stopSparqlThread($this->id,$this->ksID,"triples"); + return; + } + + if (!$this->client->isThreadRunning($this->id,$this->ksID,"triples")) + { + $object=$this->client->getFromSparql($this->id,$this->ksID,"triples"); + $array=$object->item; + if (count($array)==1) return $array; + $ret=array(); + foreach ($array as $element) + { + $items=preg_split("[<]",$element,-1, PREG_SPLIT_NO_EMPTY); + $ret[$items[0]]=$items[1]; + } + return $ret; + } + return NULL; + } + public function loadWSDLfiles($wsdluri){ ini_set("soap.wsdl_cache_enabled","0"); Modified: trunk/src/dbpedia-navigator/Ajax-Test/ajax-loader.gif =================================================================== (Binary files differ) Modified: trunk/src/dbpedia-navigator/Ajax-Test/ajax.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/ajax.php 2007-11-05 13:03:14 UTC (rev 276) +++ trunk/src/dbpedia-navigator/Ajax-Test/ajax.php 2007-11-05 13:07:09 UTC (rev 277) @@ -1,7 +1,8 @@ <?php require_once ("xajax/xajax_core/xajax.inc.php"); +$sid = session_id(); -$xajax = new xajax("ajaxfunctions.php"); +$xajax = new xajax("ajaxfunctions.php?sid=$sid"); $xajax->register(XAJAX_FUNCTION, 'getsubjects', array( 'onResponseDelay' => 'showLoadingSubjects', 'beforeResponseProcessing' => 'hideLoadingSubjects' @@ -22,4 +23,10 @@ 'onResponseDelay' => 'showLoadingConceptSubjects', 'beforeResponseProcessing' => 'hideLoadingConceptSubjects' )); +$xajax->registerFunction('searchAndShowArticle'); +$xajax->register(XAJAX_FUNCTION, 'showThisSearchResult', array( + 'onResponseDelay' => 'showLoadingSubjects', + 'beforeResponseProcessing' => 'hideLoadingSubjects' + )); +$xajax->registerFunction('showThisArticle'); ?> \ No newline at end of file Modified: trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php 2007-11-05 13:03:14 UTC (rev 276) +++ trunk/src/dbpedia-navigator/Ajax-Test/ajaxfunctions.php 2007-11-05 13:07:09 UTC (rev 277) @@ -1,6 +1,12 @@ <?php ini_set('max_execution_time',200); +$sid = $_GET['sid']; +session_id($sid); session_start(); + +require("ajax.php"); +$xajax->processRequest(); + function getsubjects($label, $limit) { include_once("Settings.php"); @@ -10,7 +16,12 @@ $content=""; $subjects=$sc->getSubjects($settings->sparqlttl,$label,$limit); - if (count($subjects)==0) $content.="No search result found in time."; + if (count($subjects)==1) + { + if (strpos($subjects,"[Error]")===0) $content.=substr($subjects,7); + else $content.="<a href=\"\" onclick=\"xajax_getarticle('".$subjects."');return false;\">".urldecode(substr (strrchr ($subjects, "/"), 1))."</a><br/>"; + } + else if (count($subjects)==0) $content.="No search result found in time."; else{ foreach ($subjects as $subject) { @@ -30,11 +41,16 @@ $settings=new Settings(); $sc=new SparqlConnection($settings->dbpediauri,$settings->wsdluri); $triples=$sc->getTriples($settings->sparqlttl,$subject); - if (count($triples)==0) $content.="Article not found."; + $content=""; + if (count($triples)==1) + { + $content.=substr($triples,7); + } + else if (count($triples)==0) $content.="Article not found."; else { $content=""; - $content.="<img src=\"".$triples['http://xmlns.com/foaf/0.1/img']."\" alt=\"Picture of ".urldecode(substr (strrchr ($subject, "/"), 1))."\" width=\"50\"/ style=\"float:left\">"; - $content.="<div>".$triples['http://dbpedia.org/property/abstract']."</div>"; + $content.="<img src=\"".$triples['http://xmlns.com/foaf/0.1/depiction']."\" alt=\"Picture of ".urldecode(substr (strrchr ($subject, "/"), 1))."\" width=\"50\"/ style=\"float:left\">"; + $content.="<div>".urldecode($triples['http://dbpedia.org/property/abstract'])."</div>"; $contentbuttons="<input type=\"button\" value=\"Positive\" class=\"button\" onclick=\"xajax_addPositive('".$subject."');return false;\" /> <input type=\"button\" value=\"Negative\" class=\"button\" onclick=\"xajax_addNegative('".$subject."');return false;\" />"; } @@ -132,7 +148,12 @@ if (isset($_SESSION['lastLearnedConcept'])) { $subjects=$sc->getSubjectsFromConcept($settings->sparqlttl,$_SESSION['lastLearnedConcept']); - if (count($subjects)==0) $content.="No examples for concept found in time."; + if (count($subjects)==1) + { + if (strpos($subjects,"[Error]")===0) $content.=substr($subjects,7); + else $content.="<a href=\"\" onclick=\"xajax_getarticle('".$subjects."');return false;\">".urldecode(substr (strrchr ($subjects, "/"), 1))."</a><br/>"; + } + else if (count($subjects)==0) $content.="No examples for concept found in time."; else { foreach ($subjects as $subject) { @@ -147,6 +168,117 @@ return $objResponse; } -require("ajax.php"); -$xajax->processRequest(); +function searchAndShowArticle($keyword) +{ + require_once("Settings.php"); + require_once("SparqlConnection.php"); + $settings=new Settings(); + + $sc=new SparqlConnection($settings->dbpediauri,$settings->wsdluri); + + $content=""; + + $sc->startSearchAndShowArticle($keyword); + $objResponse = new xajaxResponse(); + $objResponse->call('xajax_showThisArticle', urlencode(serialize($sc)),"http://dbpedia.org/resource/".$keyword); + $objResponse->call('xajax_showThisSearchResult', urlencode(serialize($sc))); + return $objResponse; +} + +function showThisSearchResult($sc) +{ + require_once("Settings.php"); + require_once("SparqlConnection.php"); + $settings=new Settings(); + $sc=unserialize(urldecode($sc)); + $objResponse = new xajaxResponse(); + $i = 1; + $sleeptime = 1; + $searchComplete=false; + do { + if (!$searchComplete) $searchResult=$sc->checkSearch(false); + if (!is_null($searchResult)){ + $searchComplete=true; + break; + } + + $seconds = $i * $sleeptime; + $i++; + + // sleep a while + sleep($sleeptime); + } while ($seconds<$settings->sparqlttl); + + if (!$searchComplete){ + $sc->checkSearch(true); + $objResponse->assign("searchcontent","innerHtml","No search result found in time."); + } + + $content=""; + if (count($searchResult)==1) + { + if (strpos($searchResult,"[Error]")===0) $content.=substr($searchResult,7); + else $content.="<a href=\"\" onclick=\"xajax_getarticle('".$searchResult."');return false;\">".urldecode(substr (strrchr ($searchResult, "/"), 1))."</a><br/>"; + } + else if (count($searchResult)==0) $content.="No search result found in time."; + else{ + foreach ($searchResult as $result) + { + $content.="<a href=\"\" onclick=\"xajax_getarticle('".$result."');return false;\">".urldecode(substr (strrchr ($result, "/"), 1))."</a><br/>"; + } + } + + + $objResponse->assign("searchcontent", "innerHTML", $content); + return $objResponse; +} + +function showThisArticle($sc,$subject) +{ + require_once("Settings.php"); + require_once("SparqlConnection.php"); + $settings=new Settings(); + $sc=unserialize(urldecode($sc)); + $i = 1; + $sleeptime = 1; + $showArticleComplete=false; + do { + if (!$showArticleComplete) $article=$sc->checkShowArticle(false); + if (!is_null($article)){ + $showArticleComplete=true; + break; + } + + $seconds = $i * $sleeptime; + $i++; + + // sleep a while + sleep($sleeptime); + } while ($seconds<$settings->sparqlttl); + + $content=""; + if (!$showArticleComplete){ + $sc->checkShowArticle(true); + } + + + if (count($article)==1) + { + $content.=substr($article,7); + } + else if (count($article)==0) $content.="Article not found."; + else { + $content=""; + $content.="<img src=\"".$article['http://xmlns.com/foaf/0.1/depiction']."\" alt=\"Picture of ".urldecode(substr (strrchr ($subject, "/"), 1))."\" width=\"50\"/ style=\"float:left\">"; + $content.="<div>".urldecode($article['http://dbpedia.org/property/abstract'])."</div>"; + + $contentbuttons="<input type=\"button\" value=\"Positive\" class=\"button\" onclick=\"xajax_addPositive('".$subject."');return false;\" /> <input type=\"button\" value=\"Negative\" class=\"button\" onclick=\"xajax_addNegative('".$subject."');return false;\" />"; + } + + $objResponse = new xajaxResponse(); + $objResponse->assign("articlecontent", "innerHTML", $content); + $objResponse->assign("contentbuttons", "innerHTML", $contentbuttons); + return $objResponse; +} + ?> \ No newline at end of file Modified: trunk/src/dbpedia-navigator/Ajax-Test/default.css =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/default.css 2007-11-05 13:03:14 UTC (rev 276) +++ trunk/src/dbpedia-navigator/Ajax-Test/default.css 2007-11-05 13:07:09 UTC (rev 277) @@ -327,4 +327,12 @@ padding: 0em 0.4em; font-weight: bold; white-space: nowrap; +} + +#search { + text-align:center; +} + +#label { + margin-bottom: 0.1em; } \ No newline at end of file Modified: trunk/src/dbpedia-navigator/Ajax-Test/index.php =================================================================== --- trunk/src/dbpedia-navigator/Ajax-Test/index.php 2007-11-05 13:03:14 UTC (rev 276) +++ trunk/src/dbpedia-navigator/Ajax-Test/index.php 2007-11-05 13:07:09 UTC (rev 277) @@ -5,15 +5,14 @@ echo "<a href='clearsession.php'>start from scratch</a>"; -require("ajax.php"); - +require("ajax.php"); -echo '<?xml version="1.0" encoding="UTF-8"?>' +echo '<?xml version="1.0" encoding="UTF-8"?>'; ?> <html> <head> <title>DL Learner</title> - <meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-1\"/> + <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> <link rel="stylesheet" href="default.css"/> <?php $xajax->printJavascript('xajax/'); ?> <script type="text/javascript"> @@ -57,26 +56,19 @@ <div id="wrapper"> <div id="leftSidebar"> -<div class="box" id="search"> +<div class="box"> <div class="boxtitle">Search</div> - <div class="boxcontent"> - <table border="0"> - <tr><tb>Search:<br/></tb></tr> - <tr><tb><input type="textfield" name="label" id="label"> <select name="limit" size="1" id="limit"> - <option>1</option> - <option selected="selected">5</option> - <option>10</option> - <option>15</option> - </select><br/></tb></tr> - <tr><tb><input type="button" value="Search" class="button" onclick="xajax_getsubjects(document.getElementById('label').value,document.getElementById('limit').value);return false;"/></tb></tr> - </table> + <div class="boxcontent" id="search"> + Search:<br/> + <input type="textfield" name="label" id="label"><br/> + <input type="button" value="Article" class="button" onclick="xajax_searchAndShowArticle(document.getElementById('label').value);return false;" /> <input type="button" value="Fulltext" class="button" onclick=""/> </div> <!-- boxcontent --> </div> <!-- box --> -<div class="box" id="search"> +<div class="box"> <div class="boxtitle">Searchresults</div> <div class="boxcontent"> - <div id="searchcontent" style="display:none"></div> + <div id="searchcontent" style="display:block"></div> <div id="loadingSubject" style="display:none"><img src="ajax-loader.gif" alt="Loading..."/></div> </div> <!-- boxcontent --> </div> <!-- box --> @@ -104,7 +96,7 @@ <div class="box"> <div class="boxtitlewithbutton"><table border="0" class="titletable"><tr><td class="left">Article</td><td class="right"><span id="contentbuttons"></span></td></tr></table></div> <div class="boxcontent" id="article"> - <div id="articlecontent" style="display:none"></div> + <div id="articlecontent" style="display:block"></div> <div id="loadingArticle" style="display:none"><img src="ajax-loader.gif" alt="Loading..."/></div> </div> <!-- boxcontent --> </div> <!-- box --> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |