]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - classes/Design.php
Merge branch '0.9.x' of git@gitorious.org:laconica/mainline into 0.9.x
[quix0rs-gnu-social.git] / classes / Design.php
index bb1e917e3e4322baa1776657f0e3b35968e551e8..0927fcda70e729ef70e6fa8c8132d38882a8dba2 100644 (file)
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-if (!defined('LACONICA')) { exit(1); }
+if (!defined('LACONICA')) {
+    exit(1);
+}
+
+define('BACKGROUND_ON', 1);
+define('BACKGROUND_OFF', 2);
+define('BACKGROUND_TILE', 4);
 
 /**
  * Table Definition for design
  */
 
-require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
+require_once INSTALLDIR . '/classes/Memcached_DataObject.php';
+require_once INSTALLDIR . '/lib/webcolor.php';
 
 class Design extends Memcached_DataObject
 {
@@ -38,6 +45,7 @@ class Design extends Memcached_DataObject
     public $textcolor;                       // int(4)
     public $linkcolor;                       // int(4)
     public $backgroundimage;                 // varchar(255)
+    public $disposition;                     // tinyint(1)   default_1
 
     /* Static get */
     function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Design',$k,$v); }
@@ -47,11 +55,101 @@ class Design extends Memcached_DataObject
 
     function showCSS($out)
     {
-        $out->element('stylesheet', array('type' => 'text/css'),
-                      'body { background-color: #' . dechex($this->backgroundcolor) . '} '."\n".
-                      '#content { background-color #' . dechex($this->contentcolor) . '} '."\n".
-                      '#aside_primary { background-color #'. dechex($this->sidebarcolor) .'} '."\n".
-                      'html body { color: #'. dechex($this->textcolor) .'} '."\n".
-                      'a { color: #' . dechex($this->linkcolor) . '} '."\n");
+        try {
+
+            $bgcolor = new WebColor($this->backgroundcolor);
+            $ccolor  = new WebColor($this->contentcolor);
+            $sbcolor = new WebColor($this->sidebarcolor);
+            $tcolor  = new WebColor($this->textcolor);
+            $lcolor  = new WebColor($this->linkcolor);
+
+        } catch (WebColorException $e) {
+            // This shouldn't happen
+            common_log(LOG_ERR, "Unable to create color for design $id.",
+                __FILE__);
+        }
+
+        $css  = 'body { background-color: #' . $bgcolor->hexValue() . ' }' . "\n";
+        $css .= '#content, #site_nav_local_views .current a { background-color: #';
+        $css .= $ccolor->hexValue() . '} '."\n";
+        $css .= '#aside_primary { background-color: #'. $sbcolor->hexValue() . ' }' . "\n";
+        $css .= 'html body { color: #'. $tcolor->hexValue() . ' }'. "\n";
+        $css .= 'a { color: #' . $lcolor->hexValue() . ' }' . "\n";
+
+        if (!empty($this->backgroundimage) &&
+            $this->disposition & BACKGROUND_ON) {
+
+           $repeat = ($this->disposition & BACKGROUND_TILE) ?
+               'background-repeat:repeat;' :
+               'background-repeat:no-repeat;';
+
+            $css .= 'body { background-image:url(' .
+                Design::url($this->backgroundimage) .
+                '); ' . $repeat . ' background-attachment:fixed; }' . "\n";
+        }
+
+        $out->element('style', array('type' => 'text/css'), $css);
+
+    }
+
+    static function filename($id, $extension, $extra=null)
+    {
+        return $id . (($extra) ? ('-' . $extra) : '') . $extension;
     }
+
+    static function path($filename)
+    {
+        $dir = common_config('background', 'dir');
+
+        if ($dir[strlen($dir)-1] != '/') {
+            $dir .= '/';
+        }
+
+        return $dir . $filename;
+    }
+
+    static function url($filename)
+    {
+        $path = common_config('background', 'path');
+
+        if ($path[strlen($path)-1] != '/') {
+            $path .= '/';
+        }
+
+        if ($path[0] != '/') {
+            $path = '/'.$path;
+        }
+
+        $server = common_config('background', 'server');
+
+        if (empty($server)) {
+            $server = common_config('site', 'server');
+        }
+
+        // XXX: protocol
+
+        return 'http://'.$server.$path.$filename;
+    }
+
+    function setDisposition($on, $off, $tile)
+    {
+        if ($on) {
+            $this->disposition |= BACKGROUND_ON;
+        } else {
+            $this->disposition &= ~BACKGROUND_ON;
+        }
+
+        if ($off) {
+            $this->disposition |= BACKGROUND_OFF;
+        } else {
+            $this->disposition &= ~BACKGROUND_OFF;
+        }
+
+        if ($tile) {
+            $this->disposition |= BACKGROUND_TILE;
+        } else {
+            $this->disposition &= ~BACKGROUND_TILE;
+        }
+    }
+
 }