function wpsc_user_purchases()
{
    global $wpdb, $user_ID, $wpsc_purchlog_statuses, $gateway_checkout_form_fields, $purchase_log, $col_count, $nzshpcrt_gateways;
    $i = 0;
    $subtotal = 0;
    do_action('wpsc_pre_purchase_logs');
    foreach ((array) $purchase_log as $purchase) {
        $status_state = "expand";
        $status_style = "display:none;";
        $alternate = "";
        $i++;
        if ($i % 2 != 0) {
            $alternate = "alt";
        }
        echo "<tr class='{$alternate}'>\n\r";
        echo " <td class='status processed'>";
        echo "<a href=\"#\" onclick=\"return show_details_box('status_box_" . $purchase['id'] . "','log_expander_icon_" . $purchase['id'] . "');\">";
        if (!empty($_GET['id']) && $_GET['id'] == $purchase['id']) {
            $status_state = "collapse";
            $status_style = "style='display: block;'";
        }
        echo "<img class=\"log_expander_icon\" id=\"log_expander_icon_" . $purchase['id'] . "\" src=\"" . WPSC_CORE_IMAGES_URL . "/icon_window_{$status_state}.gif\" alt=\"\" title=\"\" />";
        echo "<span id='form_group_" . $purchase['id'] . "_text'>" . __('Details', 'wpsc') . "</span>";
        echo "</a>";
        echo " </td>\n\r";
        echo " <td class='date'>";
        echo date("jS M Y", $purchase['date']);
        echo " </td>\n\r";
        echo " <td class='price'>";
        $country = get_option('country_form_field');
        if ($purchase['shipping_country'] != '') {
            $billing_country = $purchase['billing_country'];
            $shipping_country = $purchase['shipping_country'];
        } elseif (!empty($country)) {
            $country_sql = $wpdb->prepare("SELECT * FROM `" . WPSC_TABLE_SUBMITTED_FORM_DATA . "` WHERE `log_id` = %d AND `form_id` = %d LIMIT 1", $purchase['id'], get_option('country_form_field'));
            $country_data = $wpdb->get_results($country_sql, ARRAY_A);
            $billing_country = $country_data[0]['value'];
            $shipping_country = $country_data[0]['value'];
        }
        echo wpsc_currency_display($purchase['totalprice'], array('display_as_html' => false));
        $subtotal += $purchase['totalprice'];
        echo " </td>\n\r";
        if (get_option('payment_method') == 2) {
            echo " <td class='payment_method'>";
            $gateway_name = '';
            foreach ((array) $nzshpcrt_gateways as $gateway) {
                if ($purchase['gateway'] != 'testmode') {
                    if ($gateway['internalname'] == $purchase['gateway']) {
                        $gateway_name = $gateway['name'];
                    }
                } else {
                    $gateway_name = __("Manual Payment", 'wpsc');
                }
            }
            echo $gateway_name;
            echo " </td>\n\r";
        }
        echo "</tr>\n\r";
        echo "<tr>\n\r";
        echo " <td colspan='{$col_count}' class='details'>\n\r";
        echo "  <div id='status_box_" . $purchase['id'] . "' class='order_status' style=\"{$status_style}\">\n\r";
        echo "  <div>\n\r";
        //order status code lies here
        //check what $purchase['processed'] reflects in the $wpsc_purchlog_statuses array
        $status_name = wpsc_find_purchlog_status_name($purchase['processed']);
        echo "  <strong class='form_group'>" . __('Order Status', 'wpsc') . ":</strong>\n\r";
        echo $status_name . "<br /><br />";
        do_action('wpsc_user_log_after_order_status', $purchase);
        //written by allen
        $usps_id = get_option('usps_user_id');
        if ($usps_id != null) {
            $XML1 = "<TrackFieldRequest USERID=\"{$usps_id}\"><TrackID ID=\"" . $purchase['track_id'] . "\"></TrackID></TrackFieldRequest>";
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, "http://secure.shippingapis.com/ShippingAPITest.dll?");
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            $postdata = "API=TrackV2&XML=" . $XML1;
            curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
            $parser = new xml2array();
            $parsed = $parser->parse($result);
            $parsed = $parsed[0]['children'][0]['children'];
            if ($purchase['track_id'] != null) {
                echo "<br /><br />";
                echo " <strong class='form_group'>" . __('Shipping Address', 'wpsc') . "</strong>\n\r";
                echo "<table>";
                foreach ((array) $parsed as $parse) {
                    if ($parse['name'] == "TRACKSUMMARY") {
                        foreach ((array) $parse['children'] as $attrs) {
                            if ($attrs['name'] != "EVENT") {
                                $attrs['name'] = str_replace("EVENT", "", $attrs['name']);
                            }
                            $bar = ucfirst(strtolower($attrs['name']));
                            echo "<tr><td>" . $bar . "</td><td>" . $attrs['tagData'] . "</td></tr>";
                        }
                    }
                }
                echo "</table>";
            }
            echo "<br /><br />";
        }
        //end of written by allen
        //cart contents display starts here;
        echo "  <strong class='form_group'>" . __('Order Details', 'wpsc') . ":</strong>\n\r";
        $cartsql = $wpdb->prepare("SELECT * FROM `" . WPSC_TABLE_CART_CONTENTS . "` WHERE `purchaseid`= %d", $purchase['id']);
        $cart_log = $wpdb->get_results($cartsql, ARRAY_A);
        $j = 0;
        // /*
        if ($cart_log != null) {
            echo "<table class='logdisplay'>";
            echo "<tr class='toprow2'>";
            echo " <th class='details_name'>";
            _e('Name', 'wpsc');
            echo " </th>";
            echo " <th class='details_quantity'>";
            _e('Quantity', 'wpsc');
            echo " </th>";
            echo " <th class='details_price'>";
            _e('Price', 'wpsc');
            echo " </th>";
            echo " <th class='details_tax'>";
            _e('GST', 'wpsc');
            echo " </th>";
            echo " <th class='details_shipping'>";
            _e('Shipping', 'wpsc');
            echo " </th>";
            echo " <th class='details_total'>";
            _e('Total', 'wpsc');
            echo " </th>";
            echo "</tr>";
            $gsttotal = false;
            $endtotal = $total_shipping = 0;
            foreach ((array) $cart_log as $cart_row) {
                $alternate = "";
                $j++;
                if ($j % 2 != 0) {
                    $alternate = "alt";
                }
                $variation_list = '';
                $billing_country = !empty($country_data[0]['value']) ? $country_data[0]['value'] : '';
                $shipping_country = !empty($country_data[0]['value']) ? $country_data[0]['value'] : '';
                $shipping = $cart_row['pnp'];
                $total_shipping += $shipping;
                echo "<tr class='{$alternate}'>";
                echo " <td class='details_name'>";
                echo apply_filters('the_title', $cart_row['name']);
                echo $variation_list;
                echo " </td>";
                echo " <td class='details_quantity'>";
                echo $cart_row['quantity'];
                echo " </td>";
                echo " <td class='details_price'>";
                $price = $cart_row['price'] * $cart_row['quantity'];
                echo wpsc_currency_display($price);
                echo " </td>";
                echo " <td class='details_tax'>";
                $gst = $cart_row['tax_charged'];
                if ($gst > 0) {
                    $gsttotal += $gst;
                }
                echo wpsc_currency_display($gst, array('display_as_html' => false));
                echo " </td>";
                echo " <td class='details_shipping'>";
                echo wpsc_currency_display($shipping, array('display_as_html' => false));
                echo " </td>";
                echo " <td class='details_total'>";
                $endtotal += $price;
                echo wpsc_currency_display($shipping + $price, array('display_as_html' => false));
                echo " </td>";
                echo '</tr>';
            }
            echo "<tr>";
            echo " <td>";
            echo " </td>";
            echo " <td>";
            echo " </td>";
            echo " <td>";
            echo " <td>";
            echo " </td>";
            echo " </td>";
            echo " <td class='details_totals_labels'>";
            echo "<strong>" . __('Total Shipping', 'wpsc') . ":</strong><br />";
            echo "<strong>" . __('Total Tax', 'wpsc') . ":</strong><br />";
            echo "<strong>" . __('Final Total', 'wpsc') . ":</strong>";
            echo " </td>";
            echo " <td class='details_totals_labels'>";
            $total_shipping += $purchase['base_shipping'];
            $endtotal += $total_shipping;
            $endtotal += $purchase['wpec_taxes_total'];
            echo wpsc_currency_display($total_shipping, array('display_as_html' => false)) . "<br />";
            if ($gsttotal) {
                //if false then must be exclusive.. doesnt seem too reliable needs more testing
                echo wpsc_currency_display($gsttotal, array('display_as_html' => false)) . "<br />";
            } else {
                echo wpsc_currency_display($purchase['wpec_taxes_total'], array('display_as_html' => false)) . "<br />";
            }
            echo wpsc_currency_display($endtotal, array('display_as_html' => false));
            echo " </td>";
            echo '</tr>';
            echo "</table>";
            echo "<br />";
            echo "<strong>" . __('Customer Details', 'wpsc') . ":</strong>";
            echo "<table class='customer_details'>";
            $usersql = $wpdb->prepare("SELECT `" . WPSC_TABLE_SUBMITTED_FORM_DATA . "`.value, `" . WPSC_TABLE_CHECKOUT_FORMS . "`.* FROM `" . WPSC_TABLE_CHECKOUT_FORMS . "` LEFT JOIN `" . WPSC_TABLE_SUBMITTED_FORM_DATA . "` ON `" . WPSC_TABLE_CHECKOUT_FORMS . "`.id = `" . WPSC_TABLE_SUBMITTED_FORM_DATA . "`.`form_id` WHERE `" . WPSC_TABLE_SUBMITTED_FORM_DATA . "`.log_id = %d OR `" . WPSC_TABLE_CHECKOUT_FORMS . "`.type = 'heading' ORDER BY `" . WPSC_TABLE_CHECKOUT_FORMS . "`.`checkout_set`, `" . WPSC_TABLE_CHECKOUT_FORMS . "`.`checkout_order`", $purchase['id']);
            $formfields = $wpdb->get_results($usersql, ARRAY_A);
            if (!empty($formfields)) {
                foreach ((array) $formfields as $form_field) {
                    // If its a heading display the Name otherwise continue on
                    if ('heading' == $form_field['type']) {
                        echo "  <tr><td colspan='2'>" . esc_html($form_field['name']) . ":</td></tr>";
                        continue;
                    }
                    switch ($form_field['unique_name']) {
                        case 'shippingcountry':
                        case 'billingcountry':
                            $country = maybe_unserialize($form_field['value']);
                            if (is_array($country)) {
                                $country = $country[0];
                            } else {
                                $country = $form_field['value'];
                            }
                            echo "  <tr><td>" . esc_html($form_field['name']) . ":</td><td>" . esc_html($country) . "</td></tr>";
                            break;
                        case 'billingstate':
                        case 'shippingstate':
                            if (is_numeric($form_field['value'])) {
                                $state = wpsc_get_state_by_id($form_field['value'], 'name');
                            } else {
                                $state = $form_field['value'];
                            }
                            echo "  <tr><td>" . esc_html($form_field['name']) . ":</td><td>" . esc_html($state) . "</td></tr>";
                            break;
                        default:
                            echo "  <tr><td>" . esc_html($form_field['name']) . ":</td><td>" . esc_html($form_field['value']) . "</td></tr>";
                    }
                }
            }
            $payment_gateway_names = '';
            $payment_gateway_names = get_option('payment_gateway_names');
            foreach ((array) $payment_gateway_names as $gatewayname) {
                //if the gateway has a custom name
                if (!empty($gatewayname)) {
                    $display_name = $payment_gateway_names[$purchase_log[0]['gateway']];
                } else {
                    //if not fall back on default name
                    foreach ((array) $nzshpcrt_gateways as $gateway) {
                        if ($gateway['internalname'] == $purchase['gateway']) {
                            $display_name = $gateway['name'];
                        }
                    }
                }
            }
            echo "  <tr><td>" . __('Payment Method', 'wpsc') . ":</td><td>" . $display_name . "</td></tr>";
            echo "  <tr><td>" . __('Purchase #', 'wpsc') . ":</td><td>" . $purchase['id'] . "</td></tr>";
            if ($purchase['transactid'] != '') {
                echo "  <tr><td>" . __('Transaction Id', 'wpsc') . ":</td><td>" . $purchase['transactid'] . "</td></tr>";
            }
            echo "</table>";
        }
        echo "  </div>\n\r";
        echo "  </div>\n\r";
        echo " </td>\n\r";
        echo "</tr>\n\r";
    }
}
Ejemplo n.º 2
0
 function _parseXml($doc)
 {
     $parser = new xml2array($doc);
     $result = $parser->parse();
     if (!is_array($result)) {
         return debugError(4, $result);
     } else {
         // vi gider ikke have SOAP:ENVELOPE med...
         $this->result = $result[0]["children"];
         return null;
     }
 }
Ejemplo n.º 3
0
 echo "  </ul>\n\r";
 echo "  </form>\n\r";
 //written by allen
 $usps_id = get_option('usps_user_id');
 if ($usps_id != null) {
     $XML1 = "<TrackFieldRequest USERID=\"{$usps_id}\"><TrackID ID=\"" . $purchase['track_id'] . "\"></TrackID></TrackFieldRequest>";
     //eecho cho  "--->".$purchase['track_id'];
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, "http://secure.shippingapis.com/ShippingAPITest.dll?");
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($ch, CURLOPT_POST, 1);
     curl_setopt($ch, CURLOPT_HEADER, 0);
     $postdata = "API=TrackV2&XML=" . $XML1;
     curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
     $result = curl_exec($ch);
     $parser = new xml2array();
     $parsed = $parser->parse($result);
     $parsed = $parsed[0]['children'][0]['children'];
     if ($purchase['track_id'] != null) {
         echo "<br /><br />";
         echo " <strong class='form_group'>" . TXT_WPSC_SHIPPING_DETAILS . "</strong>\n\r";
         echo "<table>";
         foreach ((array) $parsed as $parse) {
             if ($parse['name'] == "TRACKSUMMARY") {
                 foreach ((array) $parse['children'] as $attrs) {
                     if ($attrs['name'] != "EVENT") {
                         $attrs['name'] = str_replace("EVENT", "", $attrs['name']);
                     }
                     $bar = ucfirst(strtolower($attrs['name']));
                     echo "<tr><td>" . $bar . "</td><td>" . $attrs['tagData'] . "</td></tr>";
                 }
 function Templates($server_id)
 {
     if (DEBUG_ENABLED) {
         debug_log('%s::__construct(): Entered with ()', 5, get_class($this));
     }
     if ($this->_template = get_cached_item($server_id, 'template', 'all')) {
         if (DEBUG_ENABLED) {
             debug_log('%s::init(): Using CACHED [%s]', 5, get_class($this), 'templates');
         }
     } else {
         $dir = opendir(TMPLDIR);
         $this->template_num = 0;
         while (($file = readdir($dir)) !== false) {
             if (!preg_match('/.xml$/', $file)) {
                 continue;
             }
             $objXML = new xml2array();
             $xmldata = $objXML->parse(TMPLDIR . $file);
             $template_name = preg_replace('/.xml$/', '', $file);
             $this->storeTemplate($template_name, $xmldata);
         }
         masort($this->_template, 'title');
         set_cached_item($server_id, 'template', 'all', $this->_template);
     }
 }
Ejemplo n.º 5
0
function GetUnitList()
{
    $vDir = 'farmville-xml';
    if (!file_exists($vDir)) {
        mkdir($vDir);
    }
    $time_limit = 7 * 24 * 60 * 60;
    // number of seconds to 'keep' the log DAYSxHOURSxMINSxSECS
    if ($df = opendir($vDir)) {
        while (false !== ($file = readdir($df))) {
            if ($file != "." && $file != "..") {
                $file1 = $vDir . '/' . $file;
                $last_modified = filemtime($file1);
                if (time() - $last_modified > $time_limit) {
                    unlink($file1);
                }
            }
        }
        closedir($df);
    }
    $vDir = 'farmville-sqlite';
    if (!file_exists($vDir)) {
        mkdir($vDir);
    }
    $time_limit = 7 * 24 * 60 * 60;
    // number of seconds to 'keep' the log DAYSxHOURSxMINSxSECS
    if ($df = opendir($vDir)) {
        while (false !== ($file = readdir($df))) {
            if ($file != "." && $file != "..") {
                $file1 = $vDir . '/' . $file;
                $last_modified = filemtime($file1);
                if (time() - $last_modified > $time_limit) {
                    unlink($file1);
                }
            }
        }
        closedir($df);
    }
    $sqlite_update = 0;
    //if 1 we are going to download new xml from server
    // check settings table
    if (@$_SESSION['vDataStoreDB']->querySingle('SELECT * FROM settings limit 1') === false) {
        $vSQL = 'CREATE TABLE
              settings (
                settings_name CHAR(25) PRIMARY KEY,
                settings_value CHAR(25)
              )';
        $_SESSION['vDataStoreDB']->exec($vSQL);
    }
    // check datastore table
    if (@$_SESSION['vDataStoreDB']->querySingle('SELECT * FROM datastore limit 1') === false) {
        $vSQL = 'CREATE TABLE
              datastore (
                userid CHAR(25),
                storetype CHAR(25),
                content BLOB,
                PRIMARY KEY (userid, storetype)
              )';
        $_SESSION['vDataStoreDB']->exec($vSQL);
    }
    // check datastore table
    if (@$_SESSION['vRewardStoreDB']->querySingle('SELECT * FROM rewardstore limit 1') === false) {
        $vSQL = 'CREATE TABLE
              rewardstore (
                userid CHAR(25),
                storetype CHAR(25),
                content BLOB,
                PRIMARY KEY (userid, storetype)
              )';
        $_SESSION['vRewardStoreDB']->exec($vSQL);
    }
    // check userids table
    if (@$_SESSION['vDataStoreDB']->querySingle('SELECT * FROM userids limit 1') === false) {
        $vSQL = 'CREATE TABLE
              userids (
                userid CHAR(25) PRIMARY KEY,
                username CHAR(25)
              )';
        $_SESSION['vDataStoreDB']->exec($vSQL);
    }
    if (@$_SESSION['vDataStoreDB']->querySingle('SELECT * FROM neighbors limit 1') === false) {
        $vSQL = 'CREATE TABLE
              neighbors (
                neighborid CHAR(25) PRIMARY KEY,
                fullname CHAR(50),
                profilepic TEXT
              )';
        $_SESSION['vDataStoreDB']->exec($vSQL);
    }
    // check units table
    if (@$_SESSION['vDataDB']->querySingle('SELECT * FROM units limit 1') === false) {
        $vSQL = 'CREATE TABLE
              units (
                name CHAR(25),
                field CHAR(25),
                content CHAR(250)
              )';
        $_SESSION['vDataDB']->exec($vSQL);
        $_SESSION['vDataDB']->exec('CREATE INDEX units_idx_1 ON units(name,field)');
        $_SESSION['vDataDB']->exec('CREATE INDEX units_idx_2 ON units(field,content)');
        $sqlite_update = 1;
    }
    // check achievements table
    if (@$_SESSION['vDataDB']->querySingle('SELECT * FROM achievements limit 1') === false) {
        $vSQL = 'CREATE TABLE
              achievements (
                name CHAR(25),
                field CHAR(25),
                content CHAR(250)
              )';
        $_SESSION['vDataDB']->exec($vSQL);
        $_SESSION['vDataDB']->exec('CREATE INDEX achievements_idx_1 ON achievements(name,field)');
        $_SESSION['vDataDB']->exec('CREATE INDEX achievements_idx_2 ON achievements(field,content)');
        $sqlite_update = 1;
    }
    // check collectables table
    if (@$_SESSION['vDataDB']->querySingle('SELECT * FROM collectables limit 1') === false) {
        $vSQL = 'CREATE TABLE
              collectables (

                name CHAR(25),
                field CHAR(25),
                content CHAR(250)
              )';
        $_SESSION['vDataDB']->exec($vSQL);
        $_SESSION['vDataDB']->exec('CREATE INDEX collectables_idx_1 ON collectables(name,field)');
        $_SESSION['vDataDB']->exec('CREATE INDEX collectables_idx_2 ON collectables(field,content)');
        $sqlite_update = 1;
    }
    // check storage table
    if (@$_SESSION['vDataDB']->query('SELECT * FROM storage limit 1') === false) {
        $vSQL = 'CREATE TABLE
              storage (
                name CHAR(25),
                field CHAR(25),
                content CHAR(250)
              )';
        $_SESSION['vDataDB']->exec($vSQL);
        $_SESSION['vDataDB']->exec('CREATE INDEX storage_idx_1 ON storage(name,field)');
        $_SESSION['vDataDB']->exec('CREATE INDEX storage_idx_2 ON storage(field,content)');
        $sqlite_update = 1;
    }
    // check crafting table
    if (@$_SESSION['vDataDB']->query('SELECT * FROM crafting limit 1') === false) {
        $vSQL = 'CREATE TABLE
              crafting (
                name CHAR(25),
                field CHAR(25),
                content CHAR(250)
              )';
        $_SESSION['vDataDB']->query($vSQL);
        $_SESSION['vDataDB']->query('CREATE INDEX crafting_idx_1 ON crafting(name,field)');
        $_SESSION['vDataDB']->query('CREATE INDEX crafting_idx_2 ON crafting(field,content)');
        $sqlite_update = 1;
    }
    // check quests table
    if (@$_SESSION['vDataDB']->query('SELECT * FROM quests limit 1') === false) {
        $vSQL = 'CREATE TABLE
              quests (
                name CHAR(25),
                field CHAR(50),
                content CHAR(250)
              )';
        $_SESSION['vDataDB']->query($vSQL);
        $_SESSION['vDataDB']->query('CREATE INDEX quests_idx_1 ON quests(name,field)');
        $_SESSION['vDataDB']->query('CREATE INDEX quests_idx_2 ON quests(field,content)');
        $sqlite_update = 1;
    }
    // Force download when key files are missing
    if (!file_exists('units.txt')) {
        $sqlite_update = 1;
    }
    if (!file_exists('collectable_info.txt')) {
        $sqlite_update = 1;
    }
    if (!file_exists('achievement_info.txt')) {
        $sqlite_update = 1;
    }
    $flashVars = parse_flashvars();
    $vGameSetting = 'farmville-xml/' . $_SESSION['flashRevision'] . '_gameSettings.xml';
    if (!file_exists($vGameSetting)) {
        $xml_units = '';
        if (!$xml_units) {
            AddLog2($flashVars['game_config_url']);
            AddLog2('DL: v' . $_SESSION['flashRevision'] . ' settings file.');
            //$geturl = 'http://static-facebook.farmville.com/v' . $_SESSION['flashRevision'] . '/gameSettings.xml.gz';
            $geturl = $flashVars['game_config_url'];
            $xml_units = gzuncompress(proxy_GET($geturl));
        }
        if (!$xml_units) {
            AddLog2('Couldn\'t find a settings xml...');
        } else {
            AddLog2('Download completed.');
            file_put_contents($vGameSetting, $xml_units);
            $sqlite_update = 1;
        }
        unset($xml_units);
    }
    $vItemsSetting = 'farmville-xml/' . $_SESSION['flashRevision'] . '_items.xml';
    if (!file_exists($vItemsSetting)) {
        $xml_items = '';
        if (!$xml_items) {
            AddLog2($flashVars['items_url']);
            AddLog2('DL: v' . $_SESSION['flashRevision'] . ' items xml.');
            //$geturl = 'http://static-facebook.farmville.com/v' . $_SESSION['flashRevision'] . '/items.xml.gz';
            $geturl = $flashVars['items_url'];
            $xml_items = gzuncompress(proxy_GET($geturl));
        }
        if (!$xml_items) {
            AddLog2('Couldn\'t find a items xml...');
        } else {
            AddLog2('Download completed.');
            file_put_contents($vItemsSetting, $xml_items);
            $sqlite_update = 1;
        }
        unset($xml_items);
    }
    $vStorageConfig = 'farmville-xml/' . $_SESSION['flashRevision'] . '_StorageConfig.xml';
    if (!file_exists($vStorageConfig)) {
        $xml_storage = '';
        AddLog2('DL: v' . $_SESSION['flashRevision'] . ' storageconfig xml');
        if (isset($flashVars['xml_url']) && !empty($flashVars['xml_url'])) {
            $geturl = $flashVars['xml_url'] . 'StorageConfig.xml.gz';
        } else {
            $geturl = $flashVars['app_url'] . 'v' . $_SESSION['flashRevision'] . '/StorageConfig.xml.gz';
        }
        $xml_storage = gzuncompress(proxy_GET($geturl));
        if (!$xml_storage) {
            AddLog2('Couldn\'t find a storageconfig xml...');
        } else {
            AddLog2('Download completed.');
            file_put_contents($vStorageConfig, $xml_storage);
            $sqlite_update = 1;
        }
        unset($xml_storage);
    }
    $vQuestsConfig = 'farmville-xml/' . $_SESSION['flashRevision'] . '_Quests.xml';
    if (!file_exists($vQuestsConfig)) {
        $xml_quests = '';
        $geturl = $flashVars['social_quest_url'];
        AddLog2('DL: v' . $_SESSION['flashRevision'] . ' quests xml');
        //$geturl = 'http://static-facebook.farmville.com/v' . $_SESSION['flashRevision'] . '/quests.xml';
        $xml_quests = gzuncompress(proxy_GET($geturl));
        if (!$xml_quests) {
            AddLog2('Couldn\'t find a quests xml...');
        } else {
            AddLog2('Download completed.');
            file_put_contents($vQuestsConfig, $xml_quests);
            $sqlite_update = 1;
        }
        unset($xml_quests);
    }
    $vCraftingConfig = 'farmville-xml/' . $_SESSION['flashRevision'] . '_Crafting.xml';
    if (!file_exists($vCraftingConfig)) {
        $xml_crafting = '';
        AddLog2('DL: v' . $_SESSION['flashRevision'] . ' crafting xml');
        if (isset($flashVars['xml_url']) && !empty($flashVars['xml_url'])) {
            $geturl = $flashVars['xml_url'] . 'crafting.xml.gz';
        } else {
            $geturl = $flashVars['app_url'] . 'v' . $_SESSION['flashRevision'] . '/crafting.xml.gz';
        }
        $xml_crafting = gzuncompress(proxy_GET($geturl));
        if (!$xml_crafting) {
            AddLog2('Couldn\'t find a crafting xml...');
        } else {
            AddLog2('Download completed.');
            file_put_contents($vCraftingConfig, $xml_crafting);
            $sqlite_update = 1;
        }
        unset($xml_crafting);
    }
    if ($sqlite_update == 1) {
        $_SESSION['vDataDB']->exec('BEGIN TRANSACTION');
        $_SESSION['vDataDB']->exec('delete from units');
        $_SESSION['vDataDB']->exec('delete from achievements');
        $_SESSION['vDataDB']->exec('delete from collectables');
        $_SESSION['vDataDB']->exec('delete from storage');
        $_SESSION['vDataDB']->exec('delete from crafting');
        $_SESSION['vDataDB']->exec('delete from quests');
        $_SESSION['vDataDB']->exec('COMMIT TRANSACTION');
        $_SESSION['vDataDB']->exec('vacuum');
        $_SESSION['vDataDB']->exec('BEGIN TRANSACTION');
        $xmlDoc = simplexml_load_file($vItemsSetting);
        $itemsarray = objectsIntoArray($xmlDoc);
        //file_put_contents('testarray.txt', print_r($array,true));
        foreach ($itemsarray['items']['item'] as $item) {
            $itemName = $item['@attributes']['name'];
            foreach ($item as $key => $field) {
                if ($key == '@attributes') {
                    foreach ($field as $key1 => $attr) {
                        $_SESSION['vDataDB']->exec('insert into units(name,field,content) values("' . $itemName . '","' . $key1 . '","' . $attr . '");');
                    }
                    continue;
                }
                if ($key == 'image') {
                    foreach ($field as $key1 => $attr) {
                        if ($attr['name'] == 'icon') {
                            $_SESSION['vDataDB']->exec('insert into units(name,field,content) values("' . $itemName . '","iconurl","' . $attr['url'] . '");');
                            break;
                        }
                        if ($attr['@attributes']['name'] == 'icon') {
                            $_SESSION['vDataDB']->exec('insert into units(name,field,content) values("' . $itemName . '","iconurl","' . $attr['@attributes']['url'] . '");');
                            break;
                        }
                    }
                    continue;
                }
                if ($key == 'masteryLevel') {
                    foreach ($field as $key1 => $attr) {
                        if (isset($attr['@attributes']['gift'])) {
                            $_SESSION['vDataDB']->exec('insert into units(name,field,content) values("' . $itemName . '","masterymax","' . $attr['@attributes']['count'] . '");');
                            break;
                        }
                        if (isset($attr['gift'])) {
                            $_SESSION['vDataDB']->exec('insert into units(name,field,content) values("' . $itemName . '","masterymax","' . $attr['count'] . '");');
                            break;
                        }
                    }
                    continue;
                }
                if (is_array($field)) {
                    $_SESSION['vDataDB']->exec("insert into units(name,field,content) values('" . $itemName . "','" . $key . "','" . serialize($field) . "');");
                } else {
                    $_SESSION['vDataDB']->exec('insert into units(name,field,content) values("' . $itemName . '","' . $key . '","' . $field . '");');
                }
            }
        }
        $xmlDoc = simplexml_load_file($vGameSetting);
        foreach ($xmlDoc->farming as $vItem) {
            foreach ($vItem->attributes() as $vField => $vContent) {
                $_SESSION['vDataDB']->exec('insert into units(name,field,content) values("_farming","' . $vField . '","' . $vContent . '");');
            }
        }
        foreach ($xmlDoc->collections->collection as $vItem) {
            $vItemName = (string) $vItem['name'];
            if (strlen($vItemName) > 0) {
                foreach ($vItem->attributes() as $vField => $vContent) {
                    $_SESSION['vDataDB']->exec('insert into collectables(name,field,content) values("' . $vItemName . '","' . $vField . '","' . $vContent . '");');
                }
                foreach ($vItem->children() as $vSubName => $vSubElement) {
                    if ($vSubName == 'collectable') {
                        $_SESSION['vDataDB']->query('insert into collectables(name,field,content) values("' . $vItemName . '","collectable","' . $vSubElement['code'] . '");');
                        if (isset($vSubElement['chance'])) {
                            $_SESSION['vDataDB']->exec('insert into collectables(name,field,content) values("' . $vSubElement['code'] . '","chance","' . $vSubElement['chance'] . '");');
                        }
                        if (isset($vSubElement['rarity'])) {
                            $_SESSION['vDataDB']->exec('insert into collectables(name,field,content) values("' . $vSubElement['code'] . '","rarity","' . $vSubElement['rarity'] . '");');
                        }
                        if (isset($vSubElement['source'])) {
                            $_SESSION['vDataDB']->exec('insert into collectables(name,field,content) values("' . $vSubElement['code'] . '","source","' . $vSubElement['source'] . '");');
                        }
                        if (isset($vSubElement['numneeded'])) {
                            $_SESSION['vDataDB']->exec('insert into collectables(name,field,content) values("' . $vSubElement['code'] . '","numneeded","' . $vSubElement['numneeded'] . '");');
                        }
                    }
                    if ($vSubName == 'tradeInReward') {
                        if (isset($vSubElement['xp'])) {
                            $_SESSION['vDataDB']->exec('insert into collectables(name,field,content) values("' . $vItemName . '","tradeInReward_xp","' . $vSubElement['xp'] . '");');
                        }
                        if (isset($vSubElement['coins'])) {
                            $_SESSION['vDataDB']->exec('insert into collectables(name,field,content) values("' . $vItemName . '","tradeInReward_coins","' . $vSubElement['coins'] . '");');
                        }
                        if (isset($vSubElement['gift'])) {
                            $_SESSION['vDataDB']->exec('insert into collectables(name,field,content) values("' . $vItemName . '","tradeInReward_gift","' . $vSubElement['gift'] . '");');
                        }
                    }
                }
            }
        }
        foreach ($xmlDoc->achievements->achievement as $vItem) {
            $vItemName = (string) $vItem['name'];
            $_SESSION['vDataDB']->exec('insert into units(name,field,content) values("' . $vItemName . '","type","achieve");');
            if (strlen($vItemName) > 0) {
                foreach ($vItem->attributes() as $vField => $vContent) {
                    $_SESSION['vDataDB']->exec('insert into achievements(name,field,content) values("' . $vItemName . '","' . $vField . '","' . $vContent . '");');
                    $_SESSION['vDataDB']->exec('insert into units(name,field,content) values("' . $vItemName . '","' . $vField . '","' . $vContent . '");');
                }
                foreach ($vItem->children() as $vSubName => $vSubElement) {
                    if ($vSubName == 'image') {
                        if ($vSubElement['name'] == 'icon_48') {
                            $_SESSION['vDataDB']->exec('insert into achievements(name,field,content) values("' . $vItemName . '","iconurl","' . $vSubElement['url'] . '");');
                            $_SESSION['vDataDB']->exec('insert into units(name,field,content) values("' . $vItemName . '","iconurl","' . $vSubElement['url'] . '");');
                        }
                    } elseif ($vSubName = 'level') {
                        $_SESSION['vDataDB']->exec('insert into achievements(name,field,content) values("' . $vItemName . '","count","' . $vSubElement['count'] . '");');
                        $_SESSION['vDataDB']->exec('insert into achievements(name,field,content) values("' . $vItemName . '","xp","' . $vSubElement['xp'] . '");');
                        $_SESSION['vDataDB']->exec('insert into achievements(name,field,content) values("' . $vItemName . '","coins","' . $vSubElement['coins'] . '");');
                    }
                }
            }
        }
        unset($xmlDoc);
        //$xmlDoc = simplexml_load_file($vStorageConfig);
        $XML_string = file_get_contents($vStorageConfig);
        $obj = new xml2array($XML_string);
        $itemsarray = $obj->getResult();
        foreach ($itemsarray['storage']['StorageBuilding'] as $item) {
            $itemName = $item['name'];
            unset($item['metadata'], $item['#comment']);
            foreach ($item as $key => $value) {
                if (is_array($value) && count($value) == 1) {
                    $_SESSION['vDataDB']->exec('insert into storage(name,field,content) values("' . $itemName . '","' . $key . '","' . implode('', $value) . '");');
                } elseif (is_string($value)) {
                    $_SESSION['vDataDB']->exec('insert into storage(name,field,content) values("' . $itemName . '","' . $key . '","' . $value . '");');
                } else {
                    $_SESSION['vDataDB']->exec("insert into storage(name,field,content) values('" . $itemName . "','" . $key . "','" . serialize($value) . "');");
                }
            }
        }
        foreach ($itemsarray['storage']['FeatureCreditStorage'] as $item) {
            $itemName = $item['name'];
            unset($item['metadata'], $item['#comment']);
            foreach ($item as $key => $value) {
                if (is_array($value) && count($value) == 1) {
                    $_SESSION['vDataDB']->exec('insert into storage(name,field,content) values("' . $itemName . '","' . $key . '","' . implode('', $value) . '");');
                } elseif (is_string($value)) {
                    $_SESSION['vDataDB']->exec('insert into storage(name,field,content) values("' . $itemName . '","' . $key . '","' . $value . '");');
                } else {
                    $_SESSION['vDataDB']->exec("insert into storage(name,field,content) values('" . $itemName . "','" . $key . "','" . serialize($value) . "');");
                }
            }
        }
        $xmlDoc = simplexml_load_file($vCraftingConfig);
        foreach ($xmlDoc->recipes->CraftingRecipe as $vRecipe) {
            $vRecipeID = (string) $vRecipe['id'];
            if (strlen($vRecipeID) > 0) {
                $vRecipeName = '';
                foreach ($vRecipe->attributes() as $vField => $vContent) {
                    $_SESSION['vDataDB']->query('insert into crafting(name,field,content) values("' . $vRecipeID . '","' . $vField . '","' . $vContent . '");');
                }
                foreach ($vRecipe->children() as $vSubName => $vSubElement) {
                    if ($vSubName == 'name') {
                        $vRecipeName = (string) $vSubElement;
                    }
                    if ($vSubName == 'image') {
                        if ($vSubElement['name'] == 'icon') {
                            $_SESSION['vDataDB']->exec('insert into crafting(name,field,content) values("' . $vRecipeID . '","iconurl","' . $vSubElement['url'] . '");');
                        }
                    } elseif ($vSubName == 'Reward') {
                        foreach ($vSubElement->children() as $vSubSubName => $vSubSubElement) {
                            foreach ($vSubSubElement->attributes() as $vField => $vContent) {
                                $_SESSION['vDataDB']->exec('insert into crafting(name,field,content) values("' . $vRecipeID . '","reward_' . $vSubSubName . '_' . $vField . '","' . (string) $vContent . '");');
                            }
                        }
                    } elseif ($vSubName == 'Ingredients') {
                        foreach ($vSubElement->children() as $vSubSubName => $vSubSubElement) {
                            $_SESSION['vDataDB']->exec('insert into crafting(name,field,content) values("' . $vRecipeID . '","Ingredient_itemCode","' . $vSubSubElement['itemCode'] . '");');
                            $_SESSION['vDataDB']->exec('insert into crafting(name,field,content) values("' . $vRecipeID . '","Ingredient_quantityRequired_' . $vSubSubElement['itemCode'] . '","' . $vSubSubElement['quantityRequired'] . '");');
                        }
                    } else {
                        $_SESSION['vDataDB']->exec('insert into crafting(name,field,content) values("' . $vRecipeID . '","' . $vSubName . '","' . (string) $vSubElement . '");');
                    }
                }
                if (strlen($vRecipeName) > 0) {
                    $_SESSION['vDataDB']->exec('update crafting set name="' . $vRecipeName . '" where name="' . $vRecipeID . '"');
                }
            }
        }
        unset($xmlDoc);
        $xmlDoc = simplexml_load_file($vQuestsConfig);
        foreach ($xmlDoc->quest as $vQuest) {
            $vQuestID = (string) $vQuest['id'];
            if (strlen($vQuestID) > 0) {
                foreach ($vQuest->attributes() as $vField => $vContent) {
                    $_SESSION['vDataDB']->exec('insert into quests(name,field,content) values("' . $vQuestID . '","' . $vField . '","' . $vContent . '");');
                }
                foreach ($vQuest->children() as $vSubName => $vSubElement) {
                    if ($vSubName == 'text') {
                        foreach ($vSubElement->attributes() as $vField => $vContent) {
                            $_SESSION['vDataDB']->exec('insert into quests(name,field,content) values("' . $vQuestID . '","' . $vField . '","' . (string) $vContent . '");');
                        }
                    } elseif ($vSubName == 'icon') {
                        $_SESSION['vDataDB']->exec('insert into quests(name,field,content) values("' . $vQuestID . '","iconurl","' . $vSubElement['url'] . '");');
                    } elseif ($vSubName == 'questGiverImage') {
                        $_SESSION['vDataDB']->exec('insert into quests(name,field,content) values("' . $vQuestID . '","questGiverImage","' . $vSubElement['url'] . '");');
                    } elseif ($vSubName == 'completionRequirements') {
                        $vCompleteName = $vSubElement['name'];
                        $_SESSION['vDataDB']->exec('insert into quests(name,field,content) values("' . $vQuestID . '","completionRequirements_' . $vCompleteName . '","' . $vCompleteName . '");');
                        $_SESSION['vDataDB']->exec('insert into quests(name,field,content) values("' . $vQuestID . '","completionRequirements_' . $vCompleteName . '_timeLimit","' . $vSubElement['timeLimit'] . '");');
                        foreach ($vSubElement->children() as $vSubSubName => $vSubSubElement) {
                            if ($vSubSubName == 'requirement') {
                                $_SESSION['vDataDB']->exec('insert into quests(name,field,content) values("' . $vQuestID . '","completionRequirements_' . $vCompleteName . '_' . (string) $vSubSubElement['action'] . '_' . (string) $vSubSubElement['type'] . '","' . (string) $vSubSubElement['many'] . '");');
                            }
                            if ($vSubSubName == 'reward') {
                                $_SESSION['vDataDB']->exec('insert into quests(name,field,content) values("' . $vQuestID . '","completionRequirements_' . $vCompleteName . '_reward_coins","' . (string) $vSubSubElement['coins'] . '");');
                                $_SESSION['vDataDB']->exec('insert into quests(name,field,content) values("' . $vQuestID . '","completionRequirements_' . $vCompleteName . '_reward_experience","' . (string) $vSubSubElement['experience'] . '");');
                            }
                        }
                    } else {
                        $_SESSION['vDataDB']->exec('insert into quests(name,field,content) values("' . $vQuestID . '","' . $vSubName . '","' . (string) $vSubElement . '");');
                    }
                }
            }
        }
        unset($xmlDoc);
        $_SESSION['vDataDB']->query('COMMIT TRANSACTION');
        $vCollectable = array();
        // create collectable_info.txt
        $vSQL = 'select * from collectables where field="code"';
        $vResult = $_SESSION['vDataDB']->query($vSQL);
        while ($vRow = $vResult->fetchArray(SQLITE3_ASSOC)) {
            $vCollectable[$vRow['content']]['name'] = $vRow['name'];
            $vCollectable[$vRow['content']]['code'] = $vRow['content'];
            $vSQL2 = 'select content from collectables where name="' . $vRow['name'] . '" and field="tradeInReward_xp"';
            $vCollectable[$vRow['content']]['tradeInReward'] = $_SESSION['vDataDB']->querySingle($vSQL2);
            $vSQL2 = 'select content from collectables where name="' . $vRow['name'] . '" and field="realname"';
            $vCollectable[$vRow['content']]['realname'] = $_SESSION['vDataDB']->querySingle($vSQL2);
            $vSQL2 = 'select content from collectables where name="' . $vRow['name'] . '" and field="collectable"';
            $vResult2 = $_SESSION['vDataDB']->query($vSQL2);
            while ($vRow2 = $vResult2->fetchArray(SQLITE3_ASSOC)) {
                $vCollectable[$vRow['content']]['collectable'][] = $vRow2['content'];
            }
        }
        file_put_contents('collectable_info.txt', serialize($vCollectable));
        unset($vCollectable);
        $vAchievements = array();
        $vSQL = 'select * from achievements where field="code"';
        $vResult = $_SESSION['vDataDB']->query($vSQL);
        while ($vRow = $vResult->fetchArray(SQLITE3_ASSOC)) {
            $vAchievements[$vRow['content']]['name'] = $vRow['name'];
            $vAchievements[$vRow['content']]['code'] = $vRow['content'];
            $vSQL2 = 'select content from achievements where name="' . $vRow['name'] . '" and field="iconurl"';
            $vAchievements[$vRow['content']]['iconurl'] = $_SESSION['vDataDB']->querySingle($vSQL2);
            $vSQL2 = 'select content from achievements where name="' . $vRow['name'] . '" and field="realname"';
            $vAchievements[$vRow['content']]['realname'] = $_SESSION['vDataDB']->querySingle($vSQL2);
            $vSQL2 = 'select content from achievements where name="' . $vRow['name'] . '" and field="desc"';
            $vAchievements[$vRow['content']]['desc'] = $_SESSION['vDataDB']->querySingle($vSQL2);
            $vSQL2 = 'select content from achievements where name="' . $vRow['name'] . '" and field="count" order by field';
            $vResult2 = $_SESSION['vDataDB']->query($vSQL2);
            while ($vRow2 = $vResult2->fetchArray(SQLITE3_ASSOC)) {
                $vAchievements[$vRow['content']]['level'][] = $vRow2['content'];
            }
        }
        file_put_contents('achievement_info.txt', serialize($vAchievements));
        unset($vAchievements);
        file_put_contents('units.txt', serialize(Units_GetAll()));
        file_put_contents('sqlite_check.txt', $_SESSION['flashRevision']);
    }
    EchoData('OK');
}
Ejemplo n.º 6
0
 function parseXML2Array($xml)
 {
     $xml2array = new xml2array();
     $data = $xml2array->parse($xml);
     return $data;
 }
Ejemplo n.º 7
0
 public function __construct($server_id, $name = null, $filename = null, $type = null, $id = null)
 {
     if (DEBUG_ENABLED && (($fargs = func_get_args()) || ($fargs = 'NOARGS'))) {
         debug_log('Entered (%%)', 5, 0, __FILE__, __LINE__, __METHOD__, $fargs);
     }
     $this->server_id = $server_id;
     $this->name = $name;
     $this->type = $type;
     $this->filename = $filename;
     $this->readtime = time();
     $this->id = $id;
     # If there is no filename, then this template is a default template.
     if (is_null($filename)) {
         return;
     }
     # If we have a filename, parse the template file and build the object.
     $objXML = new xml2array();
     $xmldata = $objXML->parseXML(file_get_contents($filename), $filename);
     $this->storeTemplate($xmldata);
 }
 function parse_videos_xml($string)
 {
     $xml_parser = new xml2array($string);
     $xml = $xml_parser->parse();
     return $xml;
 }
Ejemplo n.º 9
0
    </collection>
    <collection href="http://localhost:8080/alfresco/service/api/path/workspace/SpacesStore/Company%20Home/descendants" cmis:collectionType="root-descendants">
      <atom:title>root collection</atom:title>
    </collection>
    <collection href="http://localhost:8080/alfresco/service/api/checkedout" cmis:collectionType="checkedout">
      <atom:title>checkedout collection</atom:title>
    </collection>
    <collection href="http://localhost:8080/alfresco/service/api/unfiled" cmis:collectionType="unfiled">
      <atom:title>unfiled collection</atom:title>
    </collection>
    <collection href="http://localhost:8080/alfresco/service/api/types" cmis:collectionType="types-children">
      <atom:title>type collection</atom:title>
    </collection>
    <collection href="http://localhost:8080/alfresco/service/api/types" cmis:collectionType="types-descendants">
      <atom:title>type collection</atom:title>
    </collection>
    <collection href="http://localhost:8080/alfresco/service/api/query" cmis:collectionType="query">
      <atom:title>query collection</atom:title>
    </collection>

  </workspace>
</service>
';
$sxml = simplexml_load_string($xml);
$struct = json_decode(json_encode($sxml), true);
echo '<pre>' . htmlentities($xml) . '</pre>';
//echo '<hr /><pre>'.print_r($struct,true).'</pre>';
//echo '<hr /><pre>'.print_r($sxml,true).'</pre>';
//cho '<hr /><pre>'.print_r(xml2array($xml),true).'</pre>';
echo '<hr /><pre>' . print_r(xml2array::parse($xml), true) . '</pre>';
//echo http_get_request_headers();
Ejemplo n.º 10
0
function _get_lyric_lyricwiki($artist, $title, $file_name)
{
    $file = get_lyric_filename($artist, $title);
    $fp = fsockopen("lyricwiki.org", 80);
    if (!$fp) {
        $xml = array_to_xml(array("result" => "connectionfailed"));
        return $xml->asXML();
    }
    $out = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n";
    $out .= "<SOAP-ENV:Envelope SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" ";
    $out .= "xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" ";
    $out .= "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" ";
    $out .= "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
    $out .= "xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" ";
    $out .= "xmlns:tns=\"urn:LyricWiki\">";
    $out .= "<SOAP-ENV:Body><tns:getSong xmlns:tns=\"urn:LyricWiki\">";
    $out .= "<artist xsi:type=\"xsd:string\">";
    $out .= htmlspecialchars($artist);
    $out .= "</artist>";
    $out .= "<song xsi:type=\"xsd:string\">";
    $out .= htmlspecialchars($title);
    $out .= "</song>";
    $out .= "</tns:getSong></SOAP-ENV:Body></SOAP-ENV:Envelope>\r\n";
    $head = "POST /server.php HTTP/1.1\r\n";
    $head .= "Host: lyricwiki.org\r\n";
    $head .= "SOAPAction: urn:LyricWiki#getSong\r\n";
    $head .= "Content-Type: text/xml; charset=UTF-8\r\n";
    $head .= "User-Agent: RemissPitchfork/0.1\r\n";
    $head .= "Content-Length: " . str_byte_count($out) . "\r\n";
    $head .= "Connection: Close\r\n\r\n";
    fwrite($fp, $head . $out);
    $responseHeader = "";
    /* assume everything is dandy */
    do {
        $responseHeader .= fread($fp, 1);
    } while (!preg_match('/\\r\\n\\r\\n$/', $responseHeader));
    $ret = "";
    while (!feof($fp)) {
        $ret .= fgets($fp, 128);
    }
    fclose($fp);
    /* stupid hack to get around wrong xml declearation */
    $qmark = "?";
    if (strpos($ret, "<" . $qmark . "xml version=\"1.0\" encoding=\"ISO-8859-1\"" . $qmark . ">") === 0) {
        $ret = str_replace("<" . $qmark . "xml version=\"1.0\" encoding=\"ISO-8859-1\"" . $qmark . ">", "<" . $qmark . "xml version=\"1.0\" encoding=\"UTF-8\"" . $qmark . ">", $ret);
    }
    /*echo $ret;
    		exit();*/
    $parser = new xml2array();
    $parser->parse($ret);
    $data = find_lyrics($parser->arrOutput);
    // check that data is ok and lyrics exist
    if ($data && isset($data[2]['tagData'])) {
        $res = array();
        foreach ($data as $d) {
            if ($d['name'] == "ARTIST") {
                $res['artist'] = $d['tagData'];
            } else {
                if ($d['name'] == "SONG") {
                    $res['title'] = $d['tagData'];
                } else {
                    if ($d['name'] == "LYRICS") {
                        $res['lyric'] = $d['tagData'];
                    } else {
                        if ($d['name'] == "URL") {
                            $res['url'] = $d['tagData'];
                        }
                    }
                }
            }
        }
        $res['from'] = "lyricwiki.org";
        $res['time'] = time();
        /* this caching thing will have to be extracted if we 
         * put in another lyrics source */
        if (trim($res['lyric']) && trim($res['lyric']) != "Not found") {
            $xml = array_to_xml(array("result" => $res));
            $xml->addChild("file", htmlspecialchars($file_name));
            $res = $xml->asXML();
            @file_put_contents($file, $res);
        } else {
            $out = array("result" => "notfound");
            if (isset($res['url'])) {
                $out['url'] = $res['url'];
            }
            $res = array_to_xml($out);
            $res = $res->asXML();
        }
        return $res;
    }
    return false;
}