]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/location.php
Added type-hint for constructor of NoticeTreeItem class
[quix0rs-gnu-social.git] / lib / location.php
index c9411b55df5ebff2916caf3676768b85418c4835..54e0d07acf61575fff990cf2d9f56c8123fabcc6 100644 (file)
@@ -52,9 +52,27 @@ class Location
     public  $location_id;
     public  $location_ns;
     private $_url;
+    private $_rdfurl;
 
     var $names = array();
 
+    /**
+     * Constructor that makes a Location from Notice::locationOptions(...)
+     *
+     * @param array $options    an array for example provided by Notice::locationOptions(...)
+     *
+     * @return Location Location with the given options (lat, lon, id, name)
+     */
+    static function fromOptions(array $options) {
+        $location = new Location();
+        foreach (['lat', 'lon', 'location_id', 'location_ns'] as $opt) {
+            if (isset($options[$opt])) {
+                $location->$opt = $options[$opt];
+            }
+        }
+        return $location;
+    }
+
     /**
      * Constructor that makes a Location from a string name
      *
@@ -91,6 +109,10 @@ class Location
 
     static function fromId($id, $ns, $language=null)
     {
+        if (is_null($language)) {
+            $language = common_language();
+        }
+
         $location = null;
 
         // Let a third-party handle it
@@ -167,9 +189,9 @@ class Location
 
     function getURL()
     {
-        if ($this->_url == false) { // cached failure
-            return null;
-        } else if (is_string($this->_url)) { // cached value
+        // Keep one cached
+
+        if (is_string($this->_url)) {
             return $this->_url;
         }
 
@@ -177,14 +199,31 @@ class Location
 
         Event::handle('LocationUrl', array($this, &$url));
 
-        // Save it for later
+        $this->_url = $url;
 
-        if (is_null($url)) {
-            $this->_url = false;
-        } else {
-            $this->_url = $url;
+        return $url;
+    }
+
+    /**
+     * Get an URL for this location, suitable for embedding in RDF
+     *
+     * @return string URL for this location or NULL
+     */
+
+    function getRdfURL()
+    {
+        // Keep one cached
+
+        if (is_string($this->_rdfurl)) {
+            return $this->_rdfurl;
         }
 
-        return $this->_url;
+        $url = null;
+
+        Event::handle('LocationRdfUrl', array($this, &$url));
+
+        $this->_rdfurl = $url;
+
+        return $url;
     }
 }