/**
  * Runs the phpOpenTracker API call.
  *
  * @param  array $parameters
  * @return mixed
  * @access public
  */
 function run($parameters)
 {
     $visitors = array();
     $this->db->query(sprintf("SELECT visitors.accesslog_id AS accesslog_id,\r\n                visitors.visitor_id   AS visitor_id,\r\n                visitors.timestamp    AS timestamp\r\n           FROM %s accesslog,\r\n                %s visitors\r\n          WHERE visitors.client_id    = '%d'\r\n            AND visitors.accesslog_id = accesslog.accesslog_id\r\n                %s\r\n                %s\r\n          ORDER BY visitors.visitor_id,\r\n                   visitors.timestamp", $this->config['accesslog_table'], $this->config['visitors_table'], $parameters['client_id'], $this->_constraint($parameters['constraints']), $this->_whereTimerange($parameters['start'], $parameters['end'])));
     while ($row = $this->db->fetchRow()) {
         $visitors[$row['visitor_id']]['accesslog_ids'][] = $row['accesslog_id'];
         $visitors[$row['visitor_id']]['timestamps'][] = $row['timestamp'];
     }
     if (!empty($visitors)) {
         $keys = array_keys($visitors);
         $numKeys = sizeof($keys);
         for ($i = 0; $i < $numKeys; $i++) {
             $visitors[$keys[$i]]['num_visits'] = sizeof($visitors[$keys[$i]]['accesslog_ids']);
             $visitors[$keys[$i]]['visitor_id'] = $keys[$i];
             if ($visitors[$keys[$i]]['num_visits'] > 1) {
                 $time = 0;
                 for ($j = 0; $j < $visitors[$keys[$i]]['num_visits'] - 1; $j++) {
                     $time += $visitors[$keys[$i]]['timestamps'][$j + 1] - $visitors[$keys[$i]]['timestamps'][$j];
                 }
                 $visitors[$keys[$i]]['average_time_between_visits'] = floor($time / ($visitors[$keys[$i]]['num_visits'] - 1));
             } else {
                 unset($visitors[$keys[$i]]);
             }
         }
         if (!empty($visitors)) {
             foreach ($visitors as $visitor) {
                 $tmp[] = $visitor['num_visits'];
             }
             array_multisort($tmp, SORT_DESC, $visitors);
         }
     }
     switch ($parameters['result_format']) {
         case 'xml':
         case 'xml_object':
             $tree = new XML_Tree();
             $root =& $tree->addRoot('returningVisitors');
             $numVisitors = sizeof($visitors);
             for ($i = 0; $i < $numVisitors; $i++) {
                 $visitorChild =& $root->addChild('visitor');
                 $visitsChild =& $visitorChild->addChild('visits');
                 $numVisits = sizeof($visitors[$i]['accesslog_ids']);
                 for ($j = 0; $j < $numVisits; $j++) {
                     $visitChild =& $visitsChild->addChild('visit');
                     $visitChild->addChild('accesslogID', $visitors[$i]['accesslog_ids'][$j]);
                     $visitChild->addChild('timestamp', $visitors[$i]['timestamps'][$j]);
                 }
                 $visitorChild->addChild('numVisits', $visitors[$i]['num_visits']);
                 $visitorChild->addChild('visitorID', $visitors[$i]['visitor_id']);
             }
             if ($parameters['result_format'] == 'xml') {
                 return $root->get();
             } else {
                 return $root;
             }
             break;
         default:
             return $visitors;
     }
 }
示例#2
0
文件: digir.php 项目: rdmpage/bioguid
 /**
  * @brief Build a DiGIR search query.
  *
  * Given an institutional code (such as a museum abbreviation) and a specimen 
  * number we construct a DiGIR query to retrieve the corresponding record.
  * 
  * This is a bit of an undertaking as there is not an easy means to discover the
  * DiGIR provider corresponding to a given specimen code, and the DiGIR providers
  * themselves vary in what version of the DarwinCore schema they support. 
  * See The Big Dig (http://bigdig.ecoforge.net/wiki) for details.
  * Here I use the value of  <b>Revision</b> in the &lt;version&gt; tag in the header field of
  * the DiGIR provider response as a flag to use different code to make the query.
  *
  * By default I assume we have an original specimen code such as <b>FMNH 14734</b>,
  * and this has been parsed into the institution code (FMNH), a namespace (where needed),
  * and the specimen number
  * (14734). Namespaces are needed for two reasons:
  *    - Different taxon collections may have different providers (e.g., FMNH)
  *    - The same institution and specimen code may occur in different collections
  *      served by the same provider (e.g., MVZ)
  *
  * An example of an identifier is <b>FMNH:Mammals:14734</b>. 
  * In some cases, we need some further fussing. For example, the KU and Calacademy DiGIR
  * providers expects specimen numbers to include the institutional or collection prefix.
  *
  * I hard code the mapping between museum codes and DiGIR providers. 
  * If I was clever we'd do this via GBIF's UDDI interface, but that 
  * looks like a world of pain. Typically the DiGIR provider's URL is found by browsing
  * GBIF's web site. 
  *
  * The DiGIR query is a XML tree, which is then encoded as a URL. The tree varies depending
  * on whether the provider is serving schema 1.2 or 1.4.
  *
  * @param institution Institutional code
  * @param id Specimen number
  */
 function buildDIGIRQuery($institution, $id)
 {
     //echo $institution, "<br/>";
     // Kansas expects specimen codes to have KU at the start
     //		if (strcasecmp($institution,'KU-Herps') == 0) { $id = 'KU' . $id; }
     // Calacademy is similar to KU
     if (strcasecmp($institution, 'CASENT') == 0) {
         $id = strtolower($institution) . $id;
         $institution = 'CASENT';
     }
     if (strcasecmp($institution, 'inbiocri') == 0) {
         $id = strtolower($institution) . $id;
         $institution = 'CASENT';
     }
     if (strcasecmp($institution, 'lacment') == 0) {
         $id = 'lacm ent ' . $id;
         $institution = 'CASENT';
     }
     if (strcasecmp($institution, 'jtlc') == 0) {
         $id = strtolower($institution) . $id;
         $institution = 'CASENT';
     }
     $server = $this->serverURL[$institution];
     $resource = $this->resourceCode[$institution];
     // Build request message
     $tree = new XML_Tree();
     $root =& $tree->addRoot("request", '', array("xmlns" => 'http://digir.net/schema/protocol/2003/1.0', "xmlns:xsd" => 'http://www.w3.org/2001/XMLSchema', "xmlns:xsi" => 'http://www.w3.org/2001/XMLSchema-instance', "xmlns:digir" => 'http://digir.net/schema/protocol/2003/1.0', "xmlns:dwc" => 'http://digir.net/schema/conceptual/darwin/2003/1.0', "xmlns:darwin" => 'http://digir.net/schema/conceptual/darwin/2003/1.0', "xsi:schemaLocation" => 'http://digir.net/schema/protocol/2003/1.0', "xsi:schemaLocation" => 'http://digir.net/schema/protocol/2003/1.0 http://digir.sourceforge.net/schema/protocol/2003/1.0/digir.xsd http://digir.net/schema/conceptual/darwin/2003/1.0 http://digir.sourceforge.net/schema/conceptual/darwin/2003/1.0/darwin2.xsd'));
     $header =& $root->addChild("header");
     $header->addChild("version", "1.0.0");
     $header->addChild("sendTime", date("Ymd \\TG:i:s"));
     $header->addChild("source", $_SERVER['SERVER_ADDR']);
     $header->addChild("destination", $server, array("resource" => $resource));
     $header->addChild("type", "search");
     $search =& $root->addChild("search");
     $filter =& $search->addChild("filter");
     // Australian stuff served by Ozcam may have more than one provider
     switch ($institution) {
         case 'SAMA':
         case 'ANWC':
         case 'AMS':
         case 'WAM':
         case 'NT':
             $and =& $filter->addChild("and");
             $equals =& $and->addChild("equals");
             $equals->addChild("darwin:CatalogNumberText", $id);
             $equals2 =& $and->addChild("equals");
             $equals2->addChild("darwin:InstitutionCode", $institution);
             break;
         default:
             if (preg_match('/^MVZ/', $institution)) {
                 //echo $institution;
                 list($inst, $coll) = explode("-", $institution);
                 //echo $coll;
                 $and =& $filter->addChild("and");
                 $equals =& $and->addChild("equals");
                 $equals->addChild("darwin:CatalogNumberText", $id);
                 $equals2 =& $and->addChild("equals");
                 switch ($coll) {
                     case 'Herps':
                         $equals2->addChild("darwin:CollectionCode", 'Herp');
                         break;
                     case 'Mammals':
                         $equals2->addChild("darwin:CollectionCode", 'Mamm');
                         break;
                     case 'Birds':
                         $equals2->addChild("darwin:CollectionCode", 'Bird');
                         break;
                     default:
                         $equals2->addChild("darwin:CollectionCode", $coll);
                         break;
                 }
             } else {
                 $equals =& $filter->addChild("equals");
                 switch ($this->schema[$institution]) {
                     case "1.14":
                         $equals->addChild("darwin:CatalogNumber", $id);
                         break;
                     default:
                         $equals->addChild("darwin:CatalogNumberText", $id);
                         break;
                 }
             }
             break;
     }
     $records =& $search->addChild("records", "", array("limit" => 10, "start" => 0));
     if ($this->schema[$institution] == '1.12') {
         $records->addChild("structure", "", array("schemaLocation" => "http://digir.sourceforge.net/schema/conceptual/darwin/result/full/2003/darwin2resultfull.xsd"));
     } else {
         $structure =& $records->addChild("structure", "");
         $element =& $structure->addChild("xsd:element", "", array("name" => "record"));
         $complexType =& $element->addChild("xsd:complexType", "");
         $sequence =& $complexType->addChild("xsd:sequence", "");
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:InstitutionCode"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:CollectionCode"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:CatalogNumber"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:ScientificName"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:VerbatimCollectingDate"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:DateLastModified"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:YearCollected"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:MonthCollected"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:DayCollected"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:TimeCollected"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:Kingdom"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:Phylum"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:Class"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:Order"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:Family"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:Genus"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:Species"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:Subspecies"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:Country"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:StateProvince"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:County"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:Island"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:IslandGroup"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:ContinentOcean"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:Locality"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:HorizontalDatum"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:Collector"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:Remarks"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:TypeStatus"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:OtherCatalogNumbers"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:CollectorNumber"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:FieldNumber"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:GenBankNum"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:Latitude"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:Longitude"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:Sex"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:Notes"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:IdentifiedBy"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:YearIdentified"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:MonthIdentified"));
         $sequence->addChild("xsd:element", "", array("ref" => "darwin:DayIdentified"));
     }
     $xml = $tree->get();
     //echo $xml;
     // Strip XML header
     $xml = str_replace('<?xml version="1.0"?>', '', $xml);
     // Remove line breaks
     $xml = str_replace("\n", '', $xml);
     // Replace spaces with HEX code
     $xml = str_replace(" ", '%20', $xml);
     //echo $xml;
     $url = "http://{$server}?doc=";
     $url .= $xml;
     //echo $url;
     /*	$url = "http://$server?doc=<request%20xmlns='http://digir.net/schema/protocol/2003/1.0'%20xmlns:xsd='http://www.w3.org/2001/XMLSchema'%20xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'%20xmlns:digir='http://digir.net/schema/protocol/2003/1.0'%20xmlns:dwc='http://digir.net/schema/conceptual/darwin/2003/1.0'%20xmlns:darwin='http://digir.net/schema/conceptual/darwin/2003/1.0'%20xsi:schemaLocation='http://digir.net/schema/protocol/2003/1.0%20http://digir.sourceforge.net/schema/protocol/2003/1.0/digir.xsd%20http://digir.net/schema/conceptual/darwin/2003/1.0%20http://digir.sourceforge.net/schema/conceptual/darwin/2003/1.0/darwin2.xsd'><header><version>1.0.0</version><sendTime>20040324T094003+0100</sendTime><source>192.168.1.101</source><destination%20resource='$resource'>$server</destination><type>search</type></header><search><filter><equals><darwin:CatalogNumberText>$id</darwin:CatalogNumberText></equals></filter><records%20limit=\"10\"%20start=\"0\"><structure%20schemaLocation=\"http://bnhm.berkeley.museum/manis/DwC/darwin2resultfull.xsd\"%20/></records></search></request>";
      */
     return $url;
 }
示例#3
0
 /**
  * Returns XML markup for the graph.
  *
  * @param  boolean $returnObject
  * @return mixed
  * @access public
  */
 function toXML($returnObject = false)
 {
     if (!@(include_once 'XML/Tree.php')) {
         phpOpenTracker::handleError('Could not find PEAR XML_Tree package, exiting.', E_USER_ERROR);
     }
     $tree = new XML_Tree();
     $root =& $tree->addRoot('clickpath');
     for ($i = 0; $i < $this->length; $i++) {
         $root->addChild('length', $this->length);
         $node =& $root->addChild('node');
         $node->addChild('document', $this->documents[$i]);
         if (!isset($this->statistics[$i]['count'])) {
             $node->addChild('timespent', $this->statistics[$i]);
         }
     }
     if (!$returnObject) {
         return $root->get();
     } else {
         return $root;
     }
 }
示例#4
0
文件: top.php 项目: span20/Kallay
 /**
  * Runs the phpOpenTracker API call.
  *
  * @param  array $parameters
  * @return mixed
  * @access public
  */
 function run($parameters)
 {
     if (!isset($parameters['what'])) {
         return phpOpenTracker::handleError('Required parameter "what" missing.');
     }
     list($constraint, $selfJoin) = $this->_constraint($parameters['constraints'], true);
     if ($selfJoin) {
         $selfJoinConstraint = 'AND accesslog.accesslog_id = accesslog2.accesslog_id';
         $selfJoinTable = sprintf('%s accesslog2,', $this->config['accesslog_table']);
     } else {
         $selfJoinConstraint = '';
         $selfJoinTable = '';
     }
     $timerange = $this->_whereTimerange($parameters['start'], $parameters['end']);
     switch ($parameters['result_format']) {
         case 'csv':
             $csv = "Rank;Item;Count;Percent\n";
             break;
         case 'xml':
         case 'xml_object':
             $tree = new XML_Tree();
             $root =& $tree->addRoot('top');
             break;
         case 'separate_result_arrays':
             $names = array();
             $values = array();
             $percent = array();
             break;
         default:
             $topItems = array();
     }
     switch ($parameters['what']) {
         case 'document':
         case 'exit_target':
         case 'host':
         case 'operating_system':
         case 'referer':
         case 'user_agent':
         case 'entry_document':
         case 'exit_document':
             $dataConstraint = '';
             switch ($parameters['what']) {
                 case 'document':
                     $column = 'accesslog.document_id';
                     $dataTable = $this->config['documents_table'];
                     break;
                 case 'entry_document':
                     $column = 'accesslog.document_id';
                     $dataConstraint = "AND accesslog.entry_document = '1'";
                     $dataTable = $this->config['documents_table'];
                     break;
                 case 'exit_document':
                     $column = 'accesslog.document_id';
                     $dataConstraint = "AND accesslog.exit_target_id <> '0'";
                     $dataTable = $this->config['documents_table'];
                     break;
                 case 'exit_target':
                     $column = 'accesslog.exit_target_id';
                     $dataConstraint = "AND accesslog.exit_target_id <> '0'";
                     $dataTable = $this->config['exit_targets_table'];
                     break;
                 case 'host':
                     $column = 'visitors.host_id';
                     $dataTable = $this->config['hostnames_table'];
                     break;
                 case 'operating_system':
                     $column = 'visitors.operating_system_id';
                     $dataTable = $this->config['operating_systems_table'];
                     break;
                 case 'referer':
                     $column = 'visitors.referer_id';
                     $dataTable = $this->config['referers_table'];
                     break;
                 case 'user_agent':
                     $column = 'visitors.user_agent_id';
                     $dataTable = $this->config['user_agents_table'];
                     break;
             }
             $nestedQuery = sprintf("SELECT data_table.string AS item\n             FROM %s accesslog,\n                  %s\n                  %s visitors,\n                  %s data_table\n            WHERE visitors.client_id    = '%d'\n              AND visitors.accesslog_id = accesslog.accesslog_id\n              AND data_table.data_id    = %s\n                  %s\n                  %s\n                  %s\n                  %s\n            GROUP BY visitors.accesslog_id,\n                     data_table.string", $this->config['accesslog_table'], $selfJoinTable, $this->config['visitors_table'], $dataTable, $parameters['client_id'], $column, $selfJoinConstraint, $dataConstraint, $constraint, $timerange);
             break;
         default:
             $nestedQuery = sprintf("SELECT add_data.data_value AS item\n             FROM %s accesslog,\n                  %s\n                  %s visitors,\n                  %s add_data\n            WHERE visitors.client_id     = '%d'\n              AND visitors.accesslog_id  = accesslog.accesslog_id\n              AND accesslog.accesslog_id = add_data.accesslog_id\n              AND add_data.data_field    = '%s'\n                  %s\n                  %s\n                  %s\n            GROUP BY visitors.accesslog_id,\n                     add_data.data_value", $this->config['accesslog_table'], $selfJoinTable, $this->config['visitors_table'], $this->config['additional_data_table'], $parameters['client_id'], $parameters['what'], $selfJoinConstraint, $constraint, $timerange);
     }
     if ($this->db->supportsNestedQueries()) {
         $queryTotalUnique = sprintf('SELECT COUNT(item)           AS total_items,
             COUNT(DISTINCT(item)) AS unique_items
        FROM (%s) items', $nestedQuery);
         $queryItems = sprintf('SELECT COUNT(item) AS item_count,
             item
        FROM (%s) items
       GROUP BY item
       ORDER BY item_count %s,
                item', $nestedQuery, $parameters['order']);
         if ($parameters['result_format'] == 'sql') {
             return $queryItems;
         }
     } else {
         if ($this->config['db_type'] == 'mysql' || $this->config['db_type'] == 'mysql_merge') {
             $queryCreateTemporaryTable = sprintf('CREATE TEMPORARY TABLE pot_temporary_table %s', $nestedQuery);
             $queryTotalUnique = sprintf('SELECT COUNT(item)           AS total_items,
               COUNT(DISTINCT(item)) AS unique_items
          FROM pot_temporary_table', $nestedQuery);
             $queryItems = sprintf('SELECT COUNT(item) AS item_count,
               item
          FROM pot_temporary_table
         GROUP BY item
         ORDER BY item_count %s,
                  item', $parameters['order']);
             if ($parameters['result_format'] != 'sql') {
                 $dropTemporaryTable = true;
                 $this->db->query($queryCreateTemporaryTable);
             } else {
                 return $queryCreateTemporaryTable . ';' . $queryItems;
             }
         } else {
             return phpOpenTracker::handleError('You need a database system capable of nested queries.', E_USER_ERROR);
         }
     }
     $this->db->query($queryTotalUnique);
     if ($row = $this->db->fetchRow()) {
         $totalItems = intval($row['total_items']);
         $uniqueItems = intval($row['unique_items']);
     } else {
         return phpOpenTracker::handleError('Database query failed.');
     }
     if ($totalItems > 0) {
         $this->db->query($queryItems, $parameters['limit']);
         $i = 0;
         while ($row = $this->db->fetchRow()) {
             $percentValue = doubleval(number_format(100 * $row['item_count'] / $totalItems, 2));
             switch ($parameters['result_format']) {
                 case 'csv':
                     $csv .= sprintf("%d;%s;%d;%d\n", $i + 1, $row['item'], intval($row['item_count']), $percentValue);
                     break;
                 case 'xml':
                 case 'xml_object':
                     $itemChild =& $root->addChild('item');
                     $itemChild->addChild('rank', $i + 1);
                     $itemChild->addChild('string', $row['item']);
                     $itemChild->addChild('count', intval($row['item_count']));
                     $itemChild->addChild('percent', $percentValue);
                     if (isset($row['document_url'])) {
                         $itemChild->addChild('url', $row['document_url']);
                     }
                     break;
                 case 'separate_result_arrays':
                     $names[$i] = $row['item'];
                     $values[$i] = intval($row['item_count']);
                     $percent[$i] = $percentValue;
                     break;
                 default:
                     $topItems[$i]['count'] = intval($row['item_count']);
                     $topItems[$i]['string'] = $row['item'];
                     $topItems[$i]['percent'] = $percentValue;
                     if (isset($row['document_url'])) {
                         $topItems[$i]['url'] = $row['document_url'];
                     }
             }
             $i++;
         }
     }
     if (isset($dropTemporaryTable)) {
         $this->db->query('DROP TABLE pot_temporary_table');
     }
     switch ($parameters['result_format']) {
         case 'csv':
             return $csv;
             break;
         case 'xml':
         case 'xml_object':
             $root->addChild('total', $totalItems);
             $root->addChild('unique', $uniqueItems);
             switch ($parameters['result_format']) {
                 case 'xml':
                     return $root->get();
                     break;
                 case 'xml_object':
                     return $root;
                     break;
             }
             break;
         case 'separate_result_arrays':
             return array($names, $values, $percent, $uniqueItems);
             break;
         default:
             return array('top_items' => $topItems, 'unique_items' => $uniqueItems);
     }
 }
示例#5
0
 /**
  * Returns information for the returning visitors.
  *
  * @param  array $parameters
  * @return array
  * @access private
  */
 function _returningVisitors($parameters)
 {
     $visitors = $this->_queryReturningVisitors($parameters);
     if (!empty($visitors)) {
         $keys = array_keys($visitors);
         $numKeys = sizeof($keys);
         for ($i = 0; $i < $numKeys; $i++) {
             $visitors[$keys[$i]]['num_visits'] = sizeof($visitors[$keys[$i]]['accesslog_ids']);
             $visitors[$keys[$i]]['visitor_id'] = $keys[$i];
             if ($visitors[$keys[$i]]['num_visits'] > 1) {
                 $time = 0;
                 for ($j = 0; $j < $visitors[$keys[$i]]['num_visits'] - 1; $j++) {
                     $time += $visitors[$keys[$i]]['timestamps'][$j + 1] - $visitors[$keys[$i]]['timestamps'][$j];
                 }
                 $visitors[$keys[$i]]['average_time_between_visits'] = floor($time / ($visitors[$keys[$i]]['num_visits'] - 1));
             } else {
                 unset($visitors[$keys[$i]]);
             }
         }
         if (!empty($visitors)) {
             foreach ($visitors as $visitor) {
                 $tmp[] = $visitor['num_visits'];
             }
             array_multisort($tmp, SORT_DESC, $visitors);
         }
     }
     switch ($parameters['result_format']) {
         case 'xml':
         case 'xml_object':
             $tree = new XML_Tree();
             $root =& $tree->addRoot('returningVisitors');
             $numVisitors = sizeof($visitors);
             for ($i = 0; $i < $numVisitors; $i++) {
                 $visitorChild =& $root->addChild('visitor');
                 $visitsChild =& $visitorChild->addChild('visits');
                 $numVisits = sizeof($visitors[$i]['accesslog_ids']);
                 for ($j = 0; $j < $numVisits; $j++) {
                     $visitChild =& $visitsChild->addChild('visit');
                     $visitChild->addChild('accesslogID', $visitors[$i]['accesslog_ids'][$j]);
                     $visitChild->addChild('timestamp', $visitors[$i]['timestamps'][$j]);
                 }
                 $visitorChild->addChild('numVisits', $visitors[$i]['num_visits']);
                 $visitorChild->addChild('visitorID', $visitors[$i]['visitor_id']);
             }
             if ($parameters['result_format'] == 'xml') {
                 return $root->get();
             } else {
                 return $root;
             }
             break;
         default:
             return $visitors;
     }
 }
 function _nxvisitors($parameters)
 {
     $parameters['interval'] = isset($parameters['interval']) ? $parameters['interval'] : false;
     $intervalStrings = array();
     $timestamps = array();
     $values = array();
     switch ($parameters['result_format']) {
         case 'csv':
             if ($parameters['api_call'] == 'page_impressions') {
                 $csv = "Interval;Page Impressions\n";
             } else {
                 $csv = "Interval;Visitors\n";
             }
             break;
         case 'xml':
         case 'xml_object':
             $tree = new XML_Tree();
             if ($parameters['api_call'] == 'page_impressions') {
                 $root =& $tree->addRoot('pageimpressions');
             } else {
                 $root =& $tree->addRoot('visitors');
             }
             break;
         default:
             $result = array();
     }
     if ($parameters['interval'] != false) {
         $start = $parameters['start'] ? $parameters['start'] : 0;
         $end = $parameters['end'] ? $parameters['end'] : time();
         for ($i = $parameters['start']; $i < $parameters['end']; $i += $parameters['interval']) {
             $correct = (mktime(0, 0, 0, date('m', $i), date('d', $i) + 1, date('Y', $i)) - mktime(0, 0, 0, date('m', $i), date('d', $i), date('Y', $i))) * ($parameters['interval'] / 86400) - $parameters['interval'];
             // Correct weeks
             $j = $i;
             if ($parameters['interval'] == 604800) {
                 $j = $i + 86400;
             }
             $intervalStrings[] = sprintf('%s - %s', date('d-m-Y', $j), date('d-m-Y', $j + $parameters['interval'] + $correct));
             $values[] = phpOpenTracker::get(array('client_id' => $parameters['client_id'], 'api_call' => $parameters['api_call'], 'start' => $j, 'end' => $j + $parameters['interval'] + $correct, 'constraints' => $parameters['constraints']));
             $timestamps[] = $i;
             $i += $correct;
         }
     } else {
         $this->db->query(sprintf("SELECT %s AS result\r\n             FROM %s accesslog,\r\n                  %s visitors\r\n            WHERE visitors.client_id    = '%d'\r\n              AND visitors.accesslog_id = accesslog.accesslog_id\r\n                  %s\r\n                  %s", $parameters['api_call'] == 'page_impressions' ? 'COUNT(*)' : 'COUNT(DISTINCT(visitors.accesslog_id))', $this->config['accesslog_table'], $this->config['visitors_table'], $parameters['client_id'], $this->_constraint($parameters['constraints']), $this->_whereTimerange($parameters['start'], $parameters['end'], 'accesslog')));
         if ($row = $this->db->fetchRow()) {
             $values = array(intval($row['result']));
         } else {
             $values = array(0);
         }
         if ($parameters['start'] != false && $parameters['end'] != false) {
             $intervalStrings = array(sprintf('%s - %s', date('d-m-Y', $parameters['start']), date('d-m-Y', $parameters['end'])));
         } else {
             $intervalStrings = array('');
         }
     }
     switch ($parameters['result_format']) {
         case 'csv':
             for ($i = 0; $i < sizeof($values); $i++) {
                 $csv .= sprintf("%s;%d\n", $intervalStrings[$i], $values[$i]);
             }
             return $csv;
             break;
         case 'xml':
         case 'xml_object':
             for ($i = 0; $i < sizeof($values); $i++) {
                 $intervalChild =& $root->addChild('interval');
                 $intervalChild->addChild('interval', $intervalStrings[$i]);
                 $intervalChild->addChild('value', $values[$i]);
             }
             if ($parameters['result_format'] == 'xml') {
                 return $root->get();
             } else {
                 return $root;
             }
             break;
         default:
             if (sizeof($values) == 1) {
                 return $values[0];
             } else {
                 $result = array();
                 for ($i = 0; $i < sizeof($values); $i++) {
                     $result[] = array('timestamp' => $timestamps[$i], 'value' => $values[$i]);
                 }
             }
             return $result;
     }
 }
 /**
  * Runs the phpOpenTracker API call.
  *
  * @param  array $parameters
  * @return mixed
  * @access public
  */
 function run($parameters)
 {
     $parameters['session_lifetime'] = isset($parameters['session_lifetime']) ? $parameters['session_lifetime'] : 3;
     switch ($parameters['result_format']) {
         case 'xml':
         case 'xml_object':
             $tree = new XML_Tree();
             $root =& $tree->addRoot('visitorsonline');
             $children = array();
             break;
         default:
             $result = array();
     }
     $accesslogIDs = array();
     $this->db->query(sprintf("SELECT DISTINCT(accesslog.accesslog_id) AS accesslog_id\r\n           FROM %s accesslog,\r\n                %s visitors\r\n          WHERE visitors.client_id    = '%d'\r\n            AND visitors.accesslog_id = accesslog.accesslog_id\r\n            AND accesslog.timestamp  >= '%d'", $this->config['accesslog_table'], $this->config['visitors_table'], $parameters['client_id'], time() - $parameters['session_lifetime'] * 60));
     while ($row = $this->db->fetchRow()) {
         $accesslogIDs[] = $row['accesslog_id'];
     }
     for ($i = 0, $max = sizeof($accesslogIDs); $i < $max; $i++) {
         switch ($parameters['result_format']) {
             case 'xml':
             case 'xml_object':
                 $visitorNode =& $root->addChild('visitor');
                 $visitorNode->addChild(phpOpenTracker::get(array('client_id' => $parameters['client_id'], 'api_call' => 'individual_clickpath', 'accesslog_id' => $accesslogIDs[$i], 'result_format' => 'xml_object')));
                 break;
             default:
                 $result[$i]['clickpath'] = phpOpenTracker::get(array('client_id' => $parameters['client_id'], 'api_call' => 'individual_clickpath', 'accesslog_id' => $accesslogIDs[$i]));
         }
         $this->db->query(sprintf("SELECT MAX(timestamp) as last_access\r\n             FROM %s\r\n            WHERE accesslog_id = '%s'", $this->config['accesslog_table'], $accesslogIDs[$i]));
         if ($row = $this->db->fetchRow()) {
             switch ($parameters['result_format']) {
                 case 'xml':
                 case 'xml_object':
                     $visitorNode->addChild('last_access', $row['last_access']);
                     break;
                 default:
                     $result[$i]['last_access'] = $row['last_access'];
             }
         } else {
             return phpOpenTracker::handleError('Database query failed.');
         }
         $this->db->query(sprintf("SELECT hosts.string       AS host,\r\n                  user_agents.string AS user_agent\r\n             FROM %s visitors,\r\n                  %s hosts,\r\n                  %s user_agents\r\n            WHERE visitors.accesslog_id  = '%d'\r\n              AND visitors.host_id       = hosts.data_id\r\n              AND visitors.user_agent_id = user_agents.data_id", $this->config['visitors_table'], $this->config['hostnames_table'], $this->config['user_agents_table'], $accesslogIDs[$i]));
         if ($row = $this->db->fetchRow()) {
             switch ($parameters['result_format']) {
                 case 'xml':
                 case 'xml_object':
                     $visitorNode->addChild('host', $row['host']);
                     $visitorNode->addChild('user_agent', $row['user_agent']);
                     break;
                 default:
                     $result[$i]['host'] = $row['host'];
                     $result[$i]['user_agent'] = $row['user_agent'];
             }
         } else {
             return phpOpenTracker::handleError('Database query failed.');
         }
         $this->db->query(sprintf("SELECT referers.string AS referer\r\n             FROM %s visitors,\r\n                  %s referers\r\n            WHERE visitors.accesslog_id = '%d'\r\n              AND visitors.referer_id   = referers.data_id", $this->config['visitors_table'], $this->config['referers_table'], $accesslogIDs[$i]));
         if ($row = $this->db->fetchRow()) {
             $referer = $row['referer'];
         } else {
             $referer = '';
         }
         switch ($parameters['result_format']) {
             case 'xml':
             case 'xml_object':
                 $visitorNode->addChild('referer', $referer);
                 break;
             default:
                 $result[$i]['referer'] = $referer;
         }
     }
     switch ($parameters['result_format']) {
         case 'xml':
             return $root->get();
             break;
         case 'xml_object':
             return $root;
             break;
         default:
             return $result;
     }
 }
示例#8
0
 /**
  * Shows the value amd number of conversions aggregated by source.
  *
  * @param  array $parameters
  * @return mixed
  * @access private
  * @since  phpOpenTracker 1.3.0
  */
 function _conversionsBySource($parameters)
 {
     $timerange = $this->_whereTimerange($parameters['start'], $parameters['end']);
     switch ($parameters['result_format']) {
         case 'xml':
         case 'xml_object':
             $tree = new XML_Tree();
             $root =& $tree->addRoot('visitorsonline');
             $children = array();
             break;
         default:
             $result = array();
     }
     $accesslogIDs = array();
     // get a list of all accesslogIDs where there was a conversion
     $this->db->query(sprintf("SELECT DISTINCT(accesslog.accesslog_id) AS accesslog_id\n           FROM %s accesslog,\n                %s conversions\n          WHERE conversions.client_id    = '%d'\n            AND conversions.accesslog_id = accesslog.accesslog_id\n            %s", $this->config['accesslog_table'], $this->config['plugins']['conversions']['table'], $parameters['client_id'], $timerange));
     while ($row = $this->db->fetchRow()) {
         $accesslogIDs[] = $row['accesslog_id'];
     }
     // for each conversion, get details
     for ($i = 0, $max = sizeof($accesslogIDs); $i < $max; $i++) {
         unset($source);
         // to determine source, first look for a record of
         // the use of a search engine on the first visit,
         // then a referrer on the first visit, then
         // the use of a search engine on the most recent visit,
         // then a referrer on the most recent visit
         // get visitor_id and number of visits
         $this->db->query(sprintf("SELECT visitors.visitor_id AS visitor_id\n             FROM %s visitors\n            WHERE visitors.accesslog_id = '%d'", $this->config['visitors_table'], $accesslogIDs[$i]));
         if ($row = $this->db->fetchRow()) {
             $visitor_id = intval($row['visitor_id']);
         } else {
             $visitor_id = 0;
         }
         $this->db->query(sprintf("SELECT COUNT(visitors.visitor_id) AS num_visits\n             FROM %s visitors\n            WHERE visitors.visitor_id = '%d'", $this->config['visitors_table'], $visitor_id));
         if ($row = $this->db->fetchRow()) {
             $num_visits = intval($row['num_visits']);
         } else {
             $num_visits = 0;
         }
         // end query for visitor_id and number of visits
         // get accesslog_id of first visit
         $this->db->query(sprintf("SELECT visitors.accesslog_id AS first_access\n             FROM %s visitors\n            WHERE visitors.visitor_id = '%d'\n      ORDER BY visitors.timestamp", $this->config['visitors_table'], $visitor_id));
         if ($row = $this->db->fetchRow()) {
             $first_access = $row['first_access'];
         }
         // end query for accesslog_id of first visit
         // get first search engine and search engine keywords
         if ($num_visits > 1) {
             $this->db->query(sprintf("SELECT search_engines.search_engine AS search_engine,\n                 search_engines.keywords AS keywords\n                 FROM %s search_engines\n                WHERE search_engines.accesslog_id = '%d'", $this->config['plugins']['search_engines']['table'], $first_access));
             if ($row = $this->db->fetchRow()) {
                 $source = $row['search_engine'] . ': "' . $row['keywords'] . '"';
             }
         }
         // end query for first search engine and search engine keywords
         // get first referrer
         if (!isset($source)) {
             if ($num_visits > 1) {
                 $this->db->query(sprintf("SELECT referers.string AS first_referer\n                 FROM %s visitors,\n                      %s referers\n                WHERE visitors.accesslog_id = '%d'\n                  AND visitors.referer_id   = referers.data_id\n                  ORDER BY visitors.timestamp", $this->config['visitors_table'], $this->config['referers_table'], $first_access));
                 if ($row = $this->db->fetchRow()) {
                     $source = $row['first_referer'];
                 }
             }
         }
         // end query for first referrer
         // get most recent search engine and search engine keywords
         if (!isset($source)) {
             $this->db->query(sprintf("SELECT search_engines.search_engine AS search_engine,\n               search_engines.keywords AS keywords\n               FROM %s search_engines,\n                    %s visitors\n              WHERE visitors.visitor_id = '%d'\n                AND visitors.accesslog_id   = search_engines.accesslog_id\n                ORDER BY visitors.timestamp", $this->config['plugins']['search_engines']['table'], $this->config['visitors_table'], $visitor_id));
             if ($row = $this->db->fetchRow()) {
                 $source = $row['search_engine'] . ': "' . $row['keywords'] . '"';
             }
         }
         // end query for most recent search engines and search engine keywords
         // get most recent referrer
         if (!isset($source)) {
             $this->db->query(sprintf("SELECT referers.string AS referer\n               FROM %s visitors,\n                    %s referers\n              WHERE visitors.accesslog_id = '%d'\n                AND visitors.referer_id   = referers.data_id", $this->config['visitors_table'], $this->config['referers_table'], $accesslogIDs[$i]));
             if ($row = $this->db->fetchRow()) {
                 $source = $row['referer'];
             } else {
                 $source = 'unknown';
             }
         }
         // end query for most recent referrer
         // store source as a result
         switch ($parameters['result_format']) {
             case 'xml':
             case 'xml_object':
                 // ??
                 break;
             default:
                 $result[$source]['source'] = $source;
         }
         // done storing source
         // query for conversions type, amount, and details
         $this->db->query(sprintf("SELECT conversions.sale AS sale,\n             conversions.inquiry AS inquiry,\n             conversions.signup AS signup\n             FROM %s conversions,\n                  %s visitors\n            WHERE visitors.accesslog_id = '%d'\n              AND visitors.accesslog_id   = conversions.accesslog_id", $this->config['plugins']['conversions']['table'], $this->config['visitors_table'], $accesslogIDs[$i]));
         if ($row = $this->db->fetchRow()) {
             $sale = $row['sale'];
             $inquiry = $row['inquiry'];
             $signup = $row['signup'];
         } else {
             $sale = '';
             $inquiry = '';
             $signup = '';
         }
         switch ($parameters['result_format']) {
             case 'xml':
             case 'xml_object':
                 // ??
                 break;
             default:
                 $result[$source]['sale'] = $result[$source]['sale'] + $sale;
                 $result[$source]['inquiry'] = $result[$source]['inquiry'] + $inquiry;
                 $result[$source]['signup'] = $result[$source]['signup'] + $signup;
         }
         // end query for conversions type, amount, etc.
     }
     // end loop
     // return results
     switch ($parameters['result_format']) {
         case 'xml':
             return $root->get();
             break;
         case 'xml_object':
             return $root;
             break;
         default:
             return $result;
     }
 }
示例#9
0
    ob_end_flush();
    exit('HTTP-Header wurden bereits gesendet von der Datei ' . $filename . ' Zeile ' . $linenum . ".\nEs muss ein Fehler aufgetreten sein, der erst zu beheben ist, bevor dieses Affiliate-Skript ordnungsgemaess laeuft.\n" . '(Abbruch in Datei ' . __FILE__ . ' Zeile ' . __LINE__ . '.)');
}
if (defined('POWEREDBY')) {
    header('X-Powered-By: ' . POWEREDBY, FALSE);
}
header('Content-Type: text/xml');
// Alle Includes hier, wegen der Pfadangabe. Reihenfolge ist relevant!
require ELMAR_PATH . 'tools/pear.php';
require ELMAR_PATH . 'tools/node.php';
require ELMAR_PATH . 'tools/parser.php';
require ELMAR_PATH . 'tools/tree.php';
$attributes = '1.0" encoding="ISO-8859-1';
$tree = new XML_Tree(NULL, $attributes);
$XMLarray = array('xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', 'xmlns' => 'http://elektronischer-markt.de/schema/affiliate-1.0', 'xsi:schemaLocation' => 'http://elektronischer-markt.de/schema/affiliate-1.0 ' . ELMAR_SCHEMA_BASE_URL . 'affiliate-1.0.xsd', 'version' => '1.0');
$root =& $tree->addRoot("affiliate", NULL, $XMLarray);
if (!isset($_REQUEST['name']) || trim($_REQUEST['name']) == '') {
    $xml_error =& $root->addChild('error', '100');
    if (defined('AFFILIATES_CONTACT_EMAIL')) {
        $email =& $root->addChild('email', AFFILIATES_CONTACT_EMAIL);
    }
    if (defined('AFFILIATES_CONTACT_URL')) {
        $url =& $root->addChild('url', htmlentities(AFFILIATES_CONTACT_URL));
    }
    $description_de =& $root->addChild('description', 'Der Parameter name fehlt oder ist leer. Bitte geben Sie Ihren Domainnamen an.', array('lang' => 'de'));
    $description_en =& $root->addChild('description', 'Parameter name is missing or empty. Please specify your domain name.', array('lang' => 'en'));
} else {
    $name = $_REQUEST['name'];
    // Partner-ID zum Namen bestimmen
    $id = false;
    if (defined('TABLE_AFFILIATES')) {
示例#10
0
date_default_timezone_set('America/Chicago');
// figure out what the user is requesting
$x = $_REQUEST["x"];
$y = $_REQUEST["y"];
$format = $_REQUEST["format"];
if ($format == "") {
    $format = "xml";
}
if ($format != "xml") {
    echo "Only XML format is supported right now.";
    die;
}
// instantiate object
$tree = new XML_Tree();
// add the root element
$root =& $tree->addRoot("POICollection");
$root->setAttribute("x", $x);
$root->setAttribute("y", $y);
$root->setAttribute("timestamp", time());
// fetch poi child elements
$terms = array(array("quadrant_x", "=", $x), array("quadrant_y", "=", $y));
$handle = new POI();
$pois = $handle->GetList($terms, '', true, 1000);
foreach ($pois as $poi) {
    $node =& $root->addChild("POI");
    $node->setAttribute("name", $poi->title);
    $node->setAttribute("lat", $poi->lat);
    $node->setAttribute("lon", $poi->lon);
    $node->addChild("description", $poi->description);
    $node->addChild("url", $poi->url);
}
示例#11
0
<?php

require_once 'XML/Tree.php';
$tree = new XML_Tree();
$root =& $tree->addRoot('_#:A');
/* Check for error on the Root node */
if (PEAR::isError($root->error)) {
    var_dump($root->error);
}
$child =& $root->addChild('abc:def', 'bar');
if (PEAR::isError($child)) {
    var_dump($child);
}
$root->registerName('abc', 'http://some_name_space');
$child->registerName('abc', 'http://some_other_name_space');
echo $tree->getNodeNamespace($child);
if (PEAR::isError($child)) {
    var_dump($child);
}
echo $tree->get();
<?php

require_once 'XML/Tree.php';
$tree = new XML_Tree();
$root =& $tree->addRoot('slide', '', array('title' => 'A simple slide'));
$root->addChild('blurb', 'A blurb element', array('align' => 'center'));
$root->addChild('example', '', array('type' => 'xml', 'filename' => 'data/sdphp_talks.xml'));
$list =& $root->addChild('list', '', array('type' => 'arrow'));
$list->addChild('bullet', 'first bullet');
$list->addChild('bullet', 'second bullet');
$out = $tree->get();
echo nl2br(htmlspecialchars($out));
示例#13
0
function xml_header($complete = 'yes')
{
    global $currency, $language_code;
    $attributes = '1.0" encoding="ISO-8859-1';
    $tree = new XML_Tree(NULL, $attributes);
    if (ELMAR_NEW_SHOPINFO_XML) {
        $array = array('xmlns' => 'http://elektronischer-markt.de/schema/products-2.0', 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', 'xsi:schemaLocation' => 'http://elektronischer-markt.de/schema/products-2.0 ' . ELMAR_SCHEMA_BASE_URL . 'products-2.0.xsd', 'version' => '2.0');
        $root =& $tree->addRoot('ProductList', NULL, $array);
    } else {
        $array = array('xmlns:osp' => 'http://elektronischer-markt.de/schema', 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', 'xsi:schemaLocation' => 'http://elektronischer-markt.de/schema ' . ELMAR_SCHEMA_BASE_URL . 'products.xsd');
        $root =& $tree->addRoot('osp:ProductList', NULL, $array);
    }
    $common =& $root->addChild('Common');
    $xml_version =& $common->addChild('Version', ELMAR_NEW_SHOPINFO_XML ? '2.0' : '1.1');
    $xml_language =& $common->addChild('Language', $language_code);
    $xml_currency =& $common->addChild('Currency', $currency);
    if (ELMAR_NEW_SHOPINFO_XML) {
        $xml_generator =& $common->addChild('Generator', 'Elm@r-Modul osCommerce/' . MODUL_VERSION . '.' . MODUL_SUBVERSION . ' (http://projekt.wifo.uni-mannheim.de/elmar/nav/osCommerce)');
    }
    return $tree;
}
示例#14
0
 /**
  * @param  optional string $file
  * @access public
  */
 public function __construct($file = 'phpunit-log.xml')
 {
     $this->file = $file;
     $this->tree = new XML_Tree();
     $this->root = $this->tree->addRoot('run');
 }
示例#15
0
<?php

require_once 'XML/Tree.php';
$tree = new XML_Tree();
$root =& $tree->addRoot('root');
//$tree->useCdataSections();
$root->addChild('foo', 'bar');
$baz =& $root->addChild('baz');
$baz->addChild('bat', 'qux', array(), null, true);
$baz->addChild('bat', 'quux', array(), null, false);
$tree->dump();
 /**
  * @param  array $parameters
  * @return mixed
  * @access public
  */
 function run($parameters)
 {
     if (!isset($parameters['what'])) {
         return phpOpenTracker::handleError('Required parameter "what" missing.');
     }
     $constraint = $this->_constraint($parameters['constraints']);
     $timerange = $this->_whereTimerange($parameters['start'], $parameters['end']);
     switch ($parameters['what']) {
         case 'combined_statistics':
             $_parameters = $parameters;
             $_parameters['what'] = 'top_search_engines';
             $searchEngines = phpOpenTracker::get($_parameters);
             $_parameters['what'] = 'top_search_keywords';
             for ($i = 0; $i < sizeof($searchEngines['top_items']); $i++) {
                 $_parameters['search_engine'] = $searchEngines['top_items'][$i]['string'];
                 $searchKeywords = phpOpenTracker::get($_parameters);
                 $searchEngines['top_items'][$i]['search_keywords'] = $searchKeywords['top_items'];
             }
             return $searchEngines['top_items'];
             break;
         case 'top_search_engines':
         case 'top_search_keywords':
             switch ($parameters['result_format']) {
                 case 'csv':
                     $csv = "Rank;Item;Count;Percent\n";
                     break;
                 case 'xml':
                 case 'xml_object':
                     $tree = new XML_Tree();
                     $root = $tree->addRoot('top');
                     break;
                 case 'separate_result_arrays':
                     $names = array();
                     $values = array();
                     $percent = array();
                     break;
                 default:
                     $topItems = array();
             }
             if (isset($parameters['search_engine'])) {
                 $searchEngineConstraint = sprintf("AND search_engines.search_engine = '%s'", $parameters['search_engine']);
             } else {
                 $searchEngineConstraint = '';
             }
             $field = $parameters['what'] == 'top_search_engines' ? 'search_engine' : 'keywords';
             $nestedQuery = sprintf("SELECT search_engines.%s AS item\r\n             FROM %s accesslog,\r\n                  %s visitors,\r\n                  %s search_engines\r\n            WHERE visitors.client_id    = '%d'\r\n              AND visitors.accesslog_id = accesslog.accesslog_id\r\n              AND visitors.accesslog_id = search_engines.accesslog_id\r\n                  %s\r\n                  %s\r\n                  %s\r\n            GROUP BY visitors.accesslog_id,\r\n                     search_engines.%s", $field, $this->config['accesslog_table'], $this->config['visitors_table'], $this->config['plugins']['search_engines']['table'], $parameters['client_id'], $searchEngineConstraint, $constraint, $timerange, $field);
             if ($this->db->supportsNestedQueries()) {
                 $queryTotalUnique = sprintf('SELECT COUNT(item)           AS total_items,
                 COUNT(DISTINCT(item)) AS unique_items
            FROM (%s) items', $nestedQuery);
                 $queryItems = sprintf('SELECT COUNT(item) AS item_count,
                 item
            FROM (%s) items
           GROUP BY item
           ORDER BY item_count %s,
                    item', $nestedQuery, $parameters['order']);
             } else {
                 if ($this->config['db_type'] == 'mysql' || $this->config['db_type'] == 'mysql_merge') {
                     $dropTemporaryTable = true;
                     $this->db->query(sprintf('CREATE TEMPORARY TABLE pot_temporary_table %s', $nestedQuery));
                     $queryTotalUnique = sprintf('SELECT COUNT(item)           AS total_items,
                   COUNT(DISTINCT(item)) AS unique_items
              FROM pot_temporary_table', $nestedQuery);
                     $queryItems = sprintf('SELECT COUNT(item) AS item_count,
                   item
              FROM pot_temporary_table
             GROUP BY item
             ORDER BY item_count %s,
                      item', $parameters['order']);
                 } else {
                     return phpOpenTracker::handleError('You need a database system capable of nested ' . 'queries to use the "search_engines" API calls.', E_USER_ERROR);
                 }
             }
             $this->db->query($queryTotalUnique);
             if ($row = $this->db->fetchRow()) {
                 $totalItems = intval($row['total_items']);
                 $uniqueItems = intval($row['unique_items']);
             } else {
                 return phpOpenTracker::handleError('Database query failed.');
             }
             if ($totalItems > 0) {
                 $this->db->query($queryItems, $parameters['limit']);
                 $i = 0;
                 while ($row = $this->db->fetchRow()) {
                     $percentValue = doubleval(number_format(100 * $row['item_count'] / $totalItems, 2));
                     switch ($parameters['result_format']) {
                         case 'csv':
                             $csv = sprintf("%d;%s;%d;%d\n", $i + 1, $row['item'], intval($row['item_count']), $percentValue);
                             break;
                         case 'xml':
                         case 'xml_object':
                             $itemChild =& $root->addChild('item');
                             $itemChild->addChild('rank', $i + 1);
                             $itemChild->addChild('string', $row['item']);
                             $itemChild->addChild('count', intval($row['item_count']));
                             $itemChild->addChild('percent', $percentValue);
                             break;
                         case 'separate_result_arrays':
                             $names[$i] = $row['item'];
                             $values[$i] = intval($row['item_count']);
                             $percent[$i] = $percentValue;
                             break;
                         default:
                             $topItems[$i]['count'] = intval($row['item_count']);
                             $topItems[$i]['string'] = $row['item'];
                             $topItems[$i]['percent'] = $percentValue;
                     }
                     $i++;
                 }
             }
             if (isset($dropTemporaryTable)) {
                 $this->db->query('DROP TABLE pot_temporary_table');
             }
             switch ($parameters['result_format']) {
                 case 'csv':
                     return $csv;
                     break;
                 case 'xml':
                 case 'xml_object':
                     $root->addChild('total', $totalItems);
                     $root->addChild('unique', $uniqueItems);
                     switch ($parameters['result_format']) {
                         case 'xml':
                             return $root->get();
                             break;
                         case 'xml_object':
                             return $root;
                             break;
                     }
                     break;
                 case 'separate_result_arrays':
                     return array($names, $values, $percent, $uniqueItems);
                     break;
                 default:
                     return array('top_items' => $topItems, 'unique_items' => $uniqueItems);
             }
             break;
     }
 }
示例#17
0
function generate_shopinfo()
{
    global $languages_id, $language_code, $currency, $currency_rate;
    // Alle Includes hier, wegen der Pfadangabe. Reihenfolge ist relevant!
    require ELMAR_PATH . 'tools/pear.php';
    require ELMAR_PATH . 'tools/node.php';
    require ELMAR_PATH . 'tools/parser.php';
    require ELMAR_PATH . 'tools/tree.php';
    $attributes = '1.0" encoding="ISO-8859-1';
    $tree = new XML_Tree(NULL, $attributes);
    if (ELMAR_NEW_SHOPINFO_XML) {
        $XMLarray = array('xmlns' => 'http://elektronischer-markt.de/schema/shopinfo-2.0', 'xmlns:c' => 'http://elektronischer-markt.de/schema/categories-2.0', 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', 'xsi:schemaLocation' => 'http://elektronischer-markt.de/schema/shopinfo-2.0 ' . ELMAR_SCHEMA_BASE_URL . 'shopinfo-2.0.xsd', 'version' => '2.0');
        $root =& $tree->addRoot('Shop', NULL, $XMLarray);
    } else {
        $XMLarray = array('xmlns:osp' => 'http://elektronischer-markt.de/schema', 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', 'xsi:schemaLocation' => 'http://elektronischer-markt.de/schema ' . ELMAR_SCHEMA_BASE_URL . 'shop.xsd');
        $root =& $tree->addRoot('osp:Shop', NULL, $XMLarray);
    }
    $common =& $root->addChild("Common");
    $xml_version =& $common->addChild("Version", ELMAR_NEW_SHOPINFO_XML ? '2.0' : '1.1');
    $xml_language =& $common->addChild("Language", $language_code);
    $xml_currency =& $common->addChild("Currency", $currency);
    if (ELMAR_NEW_SHOPINFO_XML) {
        $xml_generator =& $common->addChild('Generator', 'Elm@r-Modul osCommerce/' . MODUL_VERSION . '.' . MODUL_SUBVERSION . ' (http://projekt.wifo.uni-mannheim.de/elmar/nav/osCommerce)');
    }
    $name =& $root->addChild("Name", shopNameOrHost());
    $shopUrl = ELMAR_SHOP_ROOT_DIR;
    //tep_href_link('index.php', '', 'NONSSL', false);
    $url =& $root->addChild("Url", $shopUrl);
    $requests =& $root->addChild("Requests");
    // Die Parameter fuer die Echtzeitanfrage, siehe elmar_request.php
    $requestUrl = ELMAR_SHOP_ROOT_DIR . 'elmar_request.php';
    // Url zur Echtzeitabfrage
    $onlineRequest =& $requests->addChild("OnlineRequest", Null, array("method" => "GET POST TRACE"));
    $processor =& $onlineRequest->addChild("Processor", $requestUrl);
    $paramBrand =& $onlineRequest->addChild("ParamBrand", 'p_brand');
    $paramProduct =& $onlineRequest->addChild("ParamProduct", 'p_product');
    $paramDescription =& $onlineRequest->addChild("ParamDescription", 'p_desc');
    if (defined('ELMAR_PRODUCTS_EAN_FIELD')) {
        $paramEan =& $onlineRequest->addChild("ParamID", 'p_ean', array("type" => "EAN"));
    }
    if (defined('ELMAR_PRODUCTS_ISBN_FIELD')) {
        $paramIsbn =& $onlineRequest->addChild("ParamID", 'p_isbn', array("type" => "ISBN"));
    }
    if (ELMAR_NEW_SHOPINFO_XML) {
        $paramId =& $onlineRequest->addChild("ParamID", 'p_id', array("type" => "ID"));
    }
    $paramQuickSearch =& $onlineRequest->addChild("ParamQuickSearch", 'p_qs');
    $paramPriceBounds =& $onlineRequest->addChild("ParamPriceBounds");
    $lowerPrice =& $paramPriceBounds->addChild("LowerPrice", 'p_low');
    $upperPrice =& $paramPriceBounds->addChild("UpperPrice", 'p_high');
    $paramSize =& $onlineRequest->addChild("ParamSize", 'p_size');
    $paramIP =& $onlineRequest->addChild("ParamIP", 'p_ip');
    $offlineRequest =& offlineRequest($requests);
    if (ELMAR_NEW_SHOPINFO_XML) {
        $affiliateRequest =& $requests->addChild('AffiliateRequest', NULL, array('method' => 'GET POST TRACE'));
        $processor =& $affiliateRequest->addChild('Processor', ELMAR_SHOP_ROOT_DIR . 'elmar_affiliate.php');
        $paramName =& $affiliateRequest->addChild('ParamName', 'name');
    }
    /*
    $interface = & $root->addChild("Interface");
        $positionLimit = & $interface->addChild("PositionLimit");
    */
    if (defined('STORE_LOGO') && file_exists(DIR_FS_CATALOG . DIR_WS_IMAGES . STORE_LOGO)) {
        $logo =& $root->addChild("Logo", IMAGE_PATH . STORE_LOGO);
    }
    /*
    $address = & $root->addChild("Adress");
        $company= & $address->addChild("Company");
        $street = & $address->addChild("Street");
        $city = & $address->addChild("City");
    */
    if (emailOk()) {
        $contact =& $root->addChild("Contact");
        $publicMailAddress =& $contact->addChild("PublicMailAddress", STORE_OWNER_EMAIL_ADDRESS);
        $privateMailAddress =& $contact->addChild("PrivateMailAddress", STORE_OWNER_EMAIL_ADDRESS);
    }
    /*
    $orderPhone = & $contact->addChild("OrderPhone");
        $number= & $orderPhone->addChild("Number");
        $costPerMinute= & $orderPhone->addChild("CostPerMinute");
    $orderFax= & $contact->addChild("OrderFax");
        $number = & $orderFax->addChild("Number");
        $costPerMinute= & $orderFax->addChild("CostPerMinute");
    $hotline = & $contact->addChild("Hotline");
    */
    $prodSum = productAnz();
    $categories =& $root->addChild("Categories");
    if ($prodSum > 0) {
        $totalProductCount =& $categories->addChild("TotalProductCount", $prodSum);
    }
    $ns = ELMAR_NEW_SHOPINFO_XML ? 'c:' : '';
    $attrib = ELMAR_NEW_SHOPINFO_XML ? array('lang' => $language_code) : NULL;
    $mapOther = $language_code == 'de' ? 'Sonstiges' : 'Other';
    // Die Produktkategorien der ersten Ebene schreiben. Durch "group by" Doppelte herauswerfen.
    $categories_query = tep_db_query('select c.categories_id, cd.categories_name from ' . TABLE_CATEGORIES . ' c left join ' . TABLE_CATEGORIES_DESCRIPTION . ' cd using(categories_id) where c.parent_id=0 and cd.language_id=' . (int) $languages_id . ' group by cd.categories_name');
    if (tep_db_num_rows($categories_query)) {
        while ($category = tep_db_fetch_array($categories_query)) {
            $categories_name = trim($category['categories_name']);
            if ($categories_name != '') {
                $item =& $categories->addChild("Item", NULL, $attrib);
                $name =& $item->addChild($ns . "Name", $categories_name);
                if (function_exists('tep_count_products_in_category') && ($cpic = tep_count_products_in_category($category['categories_id']))) {
                    $productCount =& $item->addChild($ns . "ProductCount", $cpic);
                }
                $mapping =& $item->addChild($ns . "Mapping", KategorieAnpassen($category['categories_name'], $mapOther));
            }
        }
    } else {
        $item =& $categories->addChild("Item", NULL, $attrib);
        $name =& $item->addChild($ns . "Name", $mapOther);
        if ($prodSum > 0) {
            $productCount =& $item->addChild($ns . "ProductCount", $prodSum);
        }
        $mapping =& $item->addChild($ns . "Mapping", $mapOther);
    }
    $lastschriftverfahren = defined('MODULE_PAYMENT_BANKTRANSFER_STATUS') && MODULE_PAYMENT_BANKTRANSFER_STATUS == 'True' ? true : false;
    $nachnahme = defined('MODULE_PAYMENT_COD_STATUS') && MODULE_PAYMENT_COD_STATUS == 'True' ? true : false;
    $paypal = defined('MODULE_PAYMENT_PAYPAL_STATUS') && MODULE_PAYMENT_PAYPAL_STATUS == 'True' ? true : false;
    $rechnung = defined('MODULE_PAYMENT_INVOICE_STATUS') && MODULE_PAYMENT_INVOICE_STATUS == 'True' ? true : false;
    $vorkasse = defined('MODULE_PAYMENT_MONEYORDER_STATUS') && MODULE_PAYMENT_MONEYORDER_STATUS == 'True' ? true : false;
    #$barzahlung = (defined('MODULE_PAYMENT_CASH_STATUS') && (MODULE_PAYMENT_CASH_STATUS == 'True')) ? true : false;
    #e-cash (elektronisches Zahlungsmittel); money transfer (Ueberweisung); cheque (Scheck)
    if ($nachnahme || $paypal || $lastschriftverfahren || $rechnung || $vorkasse) {
        $payment =& $root->addChild("Payment");
        if ($nachnahme) {
            $item =& $payment->addChild("Item");
            $name =& $item->addChild("Name", 'on delivery');
            // Nachnahme
            //$surcharge = & $item->addChild("Surcharge");
            //$maxSurcharge = & $item->addChild("MaxSurcharge");
            //$relativeSurcharge = & $item->addChild("RelativeSurcharge");
        }
        if ($paypal) {
            $item =& $payment->addChild("Item");
            $name =& $item->addChild("Name", 'paypal');
            // PayPal
        }
        if ($lastschriftverfahren) {
            $item =& $payment->addChild("Item");
            $name =& $item->addChild("Name", 'debit');
            // Bankeinzug/Lastschrift
        }
        if ($rechnung) {
            $item =& $payment->addChild("Item");
            $name =& $item->addChild("Name", 'invoice');
            // Rechnung
        }
        if ($vorkasse) {
            $item =& $payment->addChild("Item");
            $name =& $item->addChild("Name", 'pre-payment');
            // Vorauszahlung
        }
    }
    $free_shipping = defined('MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING') && MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING == 'true' ? true : false;
    $shipping_flat_status = defined('MODULE_SHIPPING_FLAT_STATUS') && MODULE_SHIPPING_FLAT_STATUS == 'True' ? true : false;
    if ($free_shipping || $shipping_flat_status) {
        $forwardExpenses =& $root->addChild("ForwardExpenses");
        if ($shipping_flat_status) {
            if (DISPLAY_PRICE_WITH_TAX == 'true') {
                $shipping_flat_cost = tep_add_tax(MODULE_SHIPPING_FLAT_COST, tep_get_tax_rate(MODULE_SHIPPING_FLAT_TAX_CLASS, STORE_COUNTRY, MODULE_SHIPPING_FLAT_ZONE));
            } else {
                $shipping_flat_cost = MODULE_SHIPPING_FLAT_COST;
            }
            $flatRate =& $forwardExpenses->addChild("FlatRate", number_format($shipping_flat_cost * $currency_rate, 2));
        }
        if ($free_shipping) {
            $upperBound =& $forwardExpenses->addChild("UpperBound", number_format(MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER * $currency_rate, 2));
        }
    }
    /*
    $features = & $root->addChild("Features");
        $installment = & $features->addChild("Installment");
        $orderTracking = & $features->addChild("OrderTracking");
        $deliverTracking = & $features->addChild("DeliverTRacking");
        $installationAssistance = & $features->addChild("InstallationAssistance");
        $repairService = & $features->addChild("RepairService");
        $careAfterPurchase = & $features->addChild("CareAfterPurchase");
        $giftService = & $features->addChild("GiftService");
    */
    $technology =& $root->addChild("Technology");
    if (ENABLE_SSL) {
        $ssl =& $technology->addChild("SSL");
    }
    $search =& $technology->addChild("Search");
    // $set = & $technology->addChild("SET");
    if (defined('FILENAME_CONDITIONS')) {
        $termAndConditions =& $root->addChild("TermsAndConditions");
        $url =& $termAndConditions->addChild("Url", tep_href_link(FILENAME_CONDITIONS, '', 'NONSSL', false));
        // $return = & $termAndConditions->addChild("Return");
    }
    /*
    $specialDiscount = & $root->addChild("SpecialDiscount");
        $description = & $specialDiscount->addChild("Description");
        $url = & $specialDiscount->addChild("Url");
    $certifications= & $root->addChild("Certifications");
        $item = & $certifications->addChild("Item");
    $self_Discription = & $root->addChild("Self-Discription");
    */
    $content = $tree->get();
    $content = str_replace('&apos;', '\'', $content);
    // ersetzen von &apos;
    $content = str_replace('&#124;', '|', $content);
    // ersetzen von &#124;
    return $content;
}