From d0a1cbff13ddc1f2891e634a700116c0bb37a057 Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Mon, 22 Oct 2012 05:45:22 -0400
Subject: [PATCH] Fixed: FS#2491 - dns_soa.tform.php Also Notify option validation is commented!

---
 interface/lib/classes/aps_crawler.inc.php |   33 ++++++++++++++++++++++++++-------
 1 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/interface/lib/classes/aps_crawler.inc.php b/interface/lib/classes/aps_crawler.inc.php
index 39375f5..25a700f 100644
--- a/interface/lib/classes/aps_crawler.inc.php
+++ b/interface/lib/classes/aps_crawler.inc.php
@@ -34,6 +34,9 @@
 
 class ApsCrawler extends ApsBase
 {
+   
+   public $app_download_url_list = array();
+   
    /**
     * Constructor
     *
@@ -58,7 +61,7 @@
             // Check if the cURL module is available
             if(!function_exists('curl_version')) throw new Exception('cURL is not available');
             
-            // Check if used folders are writable (chmod 777)
+            // Check if used folders are writable
             if($this->interface_mode)
             {
                 if(!is_writable($this->interface_pkg_dir)) 
@@ -197,11 +200,12 @@
      * A method to build query URLs out of a list of vendors
      *
     */
-    private function formatVendorCallback(&$array_item, $key)
+    private function formatVendorCallback($array_item)
     {
         $array_item = str_replace(' ', '%20', $array_item);
         $array_item = str_replace('http://', '', $array_item);
         $array_item = '/'.$this->aps_version.'.atom?vendor='.$array_item.'&pageSize=100';
+		return($array_item);
     }
     
     /**
@@ -224,7 +228,12 @@
             if(!$vendors) throw new Exception('Unable to fetch vendors. Aborting');
 
             // Format all vendors for further processing (i.e. typo3.org -> /1.atom?vendor=typo3.org&pageSize=100
-            array_walk($vendors, array($this, 'formatVendorCallback'));
+            //array_walk($vendors, array($this, 'formatVendorCallback'));
+			if(is_array($vendors)) {
+				foreach($vendors as $key => $array_item) {
+					$vendors[$key] = $this->formatVendorCallback($array_item);
+				}
+			}
             
             // Process all vendors in chunks of 50 entries
             $vendor_chunks = array_chunk($vendors, 50);
@@ -270,9 +279,16 @@
                         
                         // Find out a (possibly) existing package version
                         $ex_ver = '';
+						/*
                         array_walk($existing_apps, 
                             create_function('$v, $k, $ex_ver', 'if($v["Name"] == "'.$app_name.'") $ex_ver = $v["CurrentVersion"];'), &$ex_ver);
-                        
+                        */
+						if(is_array($existing_apps)) {
+							foreach($existing_apps as $k => $v) {
+								if($v["Name"] == $app_name) $ex_ver = $v["CurrentVersion"];
+							}
+						}
+						
                         $new_ver = $app_version.'-'.$app_release;
                         $local_intf_folder = $this->interface_pkg_dir.'/'.$app_name.'-'.$new_ver.'.app.zip/';
 
@@ -290,6 +306,8 @@
                             $app_dl = parent::getXPathValue($sxe, "entry[position()=1]/link[@a:type='aps']/@href");
                             $app_filesize = parent::getXPathValue($sxe, "entry[position()=1]/link[@a:type='aps']/@length");
                             $app_metafile = parent::getXPathValue($sxe, "entry[position()=1]/link[@a:type='meta']/@href");
+							
+							$this->app_download_url_list[$app_name.'-'.$new_ver.'.app.zip'] = $app_dl;
 
                             // Skip ASP.net packages because they can't be used at all
                             $asp_handler = parent::getXPathValue($sxe, '//aspnet:handler');
@@ -476,12 +494,13 @@
             $path_query = $this->db->queryAllRecords('SELECT path AS Path FROM aps_packages;');
             foreach($path_query as $path) $existing_packages[] = $path['Path']; 
             $diff = array_diff($existing_packages, $pkg_list);
-            foreach($diff as $todelete)
+            foreach($diff as $todelete) {
                 /*$this->db->query("UPDATE aps_packages SET package_status = '".PACKAGE_ERROR_NOMETA."' 
                     WHERE path = '".$this->db->quote($todelete)."';");*/
 				$tmp = $this->db->queryOneRecord("SELECT id FROM aps_packages WHERE path = '".$this->db->quote($todelete)."';");
 				$this->db->datalogUpdate('aps_packages', "package_status = ".PACKAGE_ERROR_NOMETA, 'id', $tmp['id']);
 				unset($tmp);
+			}
             
             // Register all new packages
             $new_packages = array_diff($pkg_list, $existing_packages);
@@ -515,10 +534,10 @@
                     ".$this->db->quote($pkg_release).", ".PACKAGE_ENABLED.");");
 				*/
 				
-				$insert_data = "(`path`, `name`, `category`, `version`, `release`, `package_status`) VALUES 
+				$insert_data = "(`path`, `name`, `category`, `version`, `release`, `package_url`, `package_status`) VALUES 
                     ('".$this->db->quote($pkg)."', '".$this->db->quote($pkg_name)."',
                     '".$this->db->quote($pkg_category)."', '".$this->db->quote($pkg_version)."',
-                    ".$this->db->quote($pkg_release).", ".PACKAGE_ENABLED.");";
+                    ".$this->db->quote($pkg_release).", '".$this->db->quote($this->app_download_url_list[$pkg])."', ".PACKAGE_ENABLED.");";
 				
 				$this->app->db->datalogInsert('aps_packages', $insert_data, 'id');
             }

--
Gitblit v1.9.1