]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Left out some new user and group theming file in the previous commit
authorZach Copley <zach@controlyourself.ca>
Thu, 18 Jun 2009 09:16:39 +0000 (02:16 -0700)
committerZach Copley <zach@controlyourself.ca>
Thu, 18 Jun 2009 09:16:39 +0000 (02:16 -0700)
actions/groupdesignsettings.php [new file with mode: 0644]
actions/userdesignsettings.php [new file with mode: 0644]
lib/groupdesignaction.php [new file with mode: 0644]

diff --git a/actions/groupdesignsettings.php b/actions/groupdesignsettings.php
new file mode 100644 (file)
index 0000000..7270bc8
--- /dev/null
@@ -0,0 +1,330 @@
+<?php
+/**
+ * Laconica, the distributed open-source microblogging tool
+ *
+ * Change user password
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Settings
+ * @package   Laconica
+ * @author    Sarven Capadisli <csarven@controlyourself.ca>
+ * @author    Zach Copley <zach@controlyourself.ca>
+ * @copyright 2008-2009 Control Yourself, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://laconi.ca/
+ */
+
+if (!defined('LACONICA')) {
+    exit(1);
+}
+
+require_once INSTALLDIR . '/lib/designsettings.php';
+
+class GroupDesignSettingsAction extends DesignSettingsAction
+{
+    var $group = null;
+
+    /**
+     * Prepare to run
+     */
+
+    function prepare($args)
+    {
+        parent::prepare($args);
+
+        if (!common_config('inboxes','enabled')) {
+            $this->serverError(_('Inboxes must be enabled for groups to work'));
+            return false;
+        }
+
+        if (!common_logged_in()) {
+            $this->clientError(_('You must be logged in to edit a group.'));
+            return false;
+        }
+
+        $nickname_arg = $this->trimmed('nickname');
+        $nickname = common_canonical_nickname($nickname_arg);
+
+        // Permanent redirect on non-canonical nickname
+
+        if ($nickname_arg != $nickname) {
+            $args = array('nickname' => $nickname);
+            common_redirect(common_local_url('groupdesignsettings', $args), 301);
+            return false;
+        }
+
+        if (!$nickname) {
+            $this->clientError(_('No nickname'), 404);
+            return false;
+        }
+
+        $groupid = $this->trimmed('groupid');
+
+        if ($groupid) {
+            $this->group = User_group::staticGet('id', $groupid);
+        } else {
+            $this->group = User_group::staticGet('nickname', $nickname);
+        }
+
+        if (!$this->group) {
+            $this->clientError(_('No such group'), 404);
+            return false;
+        }
+
+        $cur = common_current_user();
+
+        if (!$cur->isAdmin($this->group)) {
+            $this->clientError(_('You must be an admin to edit the group'), 403);
+            return false;
+        }
+
+        $this->submitaction = common_local_url('groupdesignsettings',
+            array('nickname' => $this->group->nickname));
+
+        return true;
+    }
+
+    /**
+     * A design for this action
+     *
+     * if the group attribute has been set, returns that group's
+     * design.
+     *
+     * @return Design a design object to use
+     */
+
+    function getDesign()
+    {
+
+        if (empty($this->group)) {
+            return null;
+        }
+
+        return $this->group->getDesign();
+    }
+
+    /**
+     * Title of the page
+     *
+     * @return string Title of the page
+     */
+
+    function title()
+    {
+        return _('Group design');
+    }
+
+    /**
+     * Instructions for use
+     *
+     * @return instructions for use
+     */
+
+    function getInstructions()
+    {
+        return _('Customize the way your group looks ' .
+        'with a background image and a colour palette of your choice.');
+    }
+
+    /**
+     * Override to show group nav stuff
+     *
+     * @return nothing
+     */
+
+    function showLocalNav()
+    {
+        $nav = new GroupNav($this, $this->group);
+        $nav->show();
+    }
+
+    /**
+     * Get the design we want to edit
+     *
+     * @return Design
+     */
+
+    function getWorkingDesign() {
+
+        $design = null;
+
+        if (isset($this->group)) {
+            $design = $this->group->getDesign();
+        }
+
+        if (empty($design)) {
+            $design = $this->defaultDesign();
+        }
+
+        return $design;
+    }
+
+    /**
+     * Content area of the page
+     *
+     * Shows a form for changing the design
+     *
+     * @return void
+     */
+
+    function showContent()
+    {
+        $this->showDesignForm($this->getWorkingDesign());
+    }
+
+    /**
+     * Save or update the group's design settings
+     *
+     * @return void
+     */
+
+    function saveDesign()
+    {
+        try {
+
+            $bgcolor = new WebColor($this->trimmed('design_background'));
+            $ccolor  = new WebColor($this->trimmed('design_content'));
+            $sbcolor = new WebColor($this->trimmed('design_sidebar'));
+            $tcolor  = new WebColor($this->trimmed('design_text'));
+            $lcolor  = new WebColor($this->trimmed('design_links'));
+
+        } catch (WebColorException $e) {
+            $this->showForm($e->getMessage());
+            return;
+        }
+
+        $onoff = $this->arg('design_background-image_onoff');
+
+        $on   = false;
+        $off  = false;
+        $tile = false;
+
+        if ($onoff == 'on') {
+            $on = true;
+        } else {
+            $off = true;
+        }
+
+        $repeat = $this->boolean('design_background-image_repeat');
+
+        if ($repeat) {
+            $tile = true;
+        }
+
+        $design = $this->group->getDesign();
+
+        if (!empty($design)) {
+
+            // update design
+
+            $original = clone($design);
+
+            $design->backgroundcolor = $bgcolor->intValue();
+            $design->contentcolor    = $ccolor->intValue();
+            $design->sidebarcolor    = $sbcolor->intValue();
+            $design->textcolor       = $tcolor->intValue();
+            $design->linkcolor       = $lcolor->intValue();
+            $design->backgroundimage = $filepath;
+
+            $design->setDisposition($on, $off, $tile);
+
+            $result = $design->update($original);
+
+            if ($result === false) {
+                common_log_db_error($design, 'UPDATE', __FILE__);
+                $this->showForm(_('Couldn\'t update your design.'));
+                return;
+            }
+
+        } else {
+
+            $this->group->query('BEGIN');
+
+            // save new design
+
+            $design = new Design();
+
+            $design->backgroundcolor = $bgcolor->intValue();
+            $design->contentcolor    = $ccolor->intValue();
+            $design->sidebarcolor    = $sbcolor->intValue();
+            $design->textcolor       = $tcolor->intValue();
+            $design->linkcolor       = $lcolor->intValue();
+            $design->backgroundimage = $filepath;
+
+            $design->setDisposition($on, $off, $tile);
+
+            $id = $design->insert();
+
+            if (empty($id)) {
+                common_log_db_error($id, 'INSERT', __FILE__);
+                $this->showForm(_('Unable to save your design settings!'));
+                return;
+            }
+
+            $original = clone($this->group);
+            $this->group->design_id = $id;
+            $result = $this->group->update($original);
+
+            if (empty($result)) {
+                common_log_db_error($original, 'UPDATE', __FILE__);
+                $this->showForm(_('Unable to save your design settings!'));
+                $this->group->query('ROLLBACK');
+                return;
+            }
+
+            $this->group->query('COMMIT');
+
+        }
+
+        $this->saveBackgroundImage($design);
+
+        $this->showForm(_('Design preferences saved.'), true);
+    }
+
+    /**
+     * Handle input and output a page (overrided)
+     *
+     * @param array $args $_REQUEST arguments
+     *
+     * @return void
+     */
+
+    function handle($args)
+    {
+        parent::handle($args);
+        if (!common_logged_in()) {
+            $this->clientError(_('Not logged in.'));
+            return;
+        } else if (!common_is_real_login()) {
+            // Cookie theft means that automatic logins can't
+            // change important settings or see private info, and
+            // _all_ our settings are important
+            common_set_returnto($this->selfUrl());
+            $user = common_current_user();
+            if ($user->hasOpenID()) {
+                common_redirect(common_local_url('openidlogin'), 303);
+            } else {
+                common_redirect(common_local_url('login'), 303);
+            }
+        } else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
+            $this->handlePost();
+        } else {
+            $this->showForm();
+        }
+    }
+
+}
diff --git a/actions/userdesignsettings.php b/actions/userdesignsettings.php
new file mode 100644 (file)
index 0000000..d6088aa
--- /dev/null
@@ -0,0 +1,208 @@
+<?php
+/**
+ * Laconica, the distributed open-source microblogging tool
+ *
+ * Change user password
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Settings
+ * @package   Laconica
+ * @author    Sarven Capadisli <csarven@controlyourself.ca>
+ * @author    Zach Copley <zach@controlyourself.ca>
+ * @copyright 2008-2009 Control Yourself, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://laconi.ca/
+ */
+
+if (!defined('LACONICA')) {
+    exit(1);
+}
+
+require_once INSTALLDIR . '/lib/designsettings.php';
+
+class UserDesignSettingsAction extends DesignSettingsAction
+{
+    function prepare($args)
+    {
+        parent::prepare($args);
+        $this->submitaction = common_local_url('userdesignsettings');
+        return true;
+    }
+     
+    /**
+     * Title of the page
+     *
+     * @return string Title of the page
+     */
+
+    function title()
+    {
+        return _('Profile design');
+    }
+
+    /**
+     * Instructions for use
+     *
+     * @return instructions for use
+     */
+
+    function getInstructions()
+    {
+        return _('Customize the way your profile looks ' .
+        'with a background image and a colour palette of your choice.');
+    }
+
+    /**
+     * Get the design we want to edit
+     *
+     * @return Design
+     */
+     
+    function getWorkingDesign() {
+        
+        $user = common_current_user();
+        $design = $user->getDesign();
+
+        if (empty($design)) {
+            $design = $this->defaultDesign();
+        }
+     
+        return $design;
+    }
+    
+    /**
+     * Content area of the page
+     *
+     * Shows a form for changing the design
+     *
+     * @return void
+     */
+     
+    function showContent()
+    {
+        $this->showDesignForm($this->getWorkingDesign());
+    }
+
+    /**
+     * Save or update the user's design settings
+     *
+     * @return void
+     */
+
+    function saveDesign()
+    {
+        try {
+
+            $bgcolor = new WebColor($this->trimmed('design_background'));
+            $ccolor  = new WebColor($this->trimmed('design_content'));
+            $sbcolor = new WebColor($this->trimmed('design_sidebar'));
+            $tcolor  = new WebColor($this->trimmed('design_text'));
+            $lcolor  = new WebColor($this->trimmed('design_links'));
+
+        } catch (WebColorException $e) {
+            $this->showForm($e->getMessage());
+            return;
+        }
+
+        $onoff = $this->arg('design_background-image_onoff');
+
+        $on   = false;
+        $off  = false;
+        $tile = false;
+
+        if ($onoff == 'on') {
+            $on = true;
+        } else {
+            $off = true;
+        }
+
+        $repeat = $this->boolean('design_background-image_repeat');
+
+        if ($repeat) {
+            $tile = true;
+        }
+
+        $user = common_current_user();
+        $design = $user->getDesign();
+
+        if (!empty($design)) {
+
+            $original = clone($design);
+
+            $design->backgroundcolor = $bgcolor->intValue();
+            $design->contentcolor    = $ccolor->intValue();
+            $design->sidebarcolor    = $sbcolor->intValue();
+            $design->textcolor       = $tcolor->intValue();
+            $design->linkcolor       = $lcolor->intValue();
+            $design->backgroundimage = $filepath;
+
+            $design->setDisposition($on, $off, $tile);
+
+            $result = $design->update($original);
+
+            if ($result === false) {
+                common_log_db_error($design, 'UPDATE', __FILE__);
+                $this->showForm(_('Couldn\'t update your design.'));
+                return;
+            }
+
+            // update design
+        } else {
+
+            $user->query('BEGIN');
+
+            // save new design
+            $design = new Design();
+
+            $design->backgroundcolor = $bgcolor->intValue();
+            $design->contentcolor    = $ccolor->intValue();
+            $design->sidebarcolor    = $sbcolor->intValue();
+            $design->textcolor       = $tcolor->intValue();
+            $design->linkcolor       = $lcolor->intValue();
+            $design->backgroundimage = $filepath;
+
+            $design->setDisposition($on, $off, $tile);
+
+            $id = $design->insert();
+
+            if (empty($id)) {
+                common_log_db_error($id, 'INSERT', __FILE__);
+                $this->showForm(_('Unable to save your design settings!'));
+                return;
+            }
+
+            $original = clone($user);
+            $user->design_id = $id;
+            $result = $user->update($original);
+
+            if (empty($result)) {
+                common_log_db_error($original, 'UPDATE', __FILE__);
+                $this->showForm(_('Unable to save your design settings!'));
+                $user->query('ROLLBACK');
+                return;
+            }
+
+            $user->query('COMMIT');
+
+        }
+
+        $this->saveBackgroundImage($design);
+
+        $this->showForm(_('Design preferences saved.'), true);
+    }
+}
diff --git a/lib/groupdesignaction.php b/lib/groupdesignaction.php
new file mode 100644 (file)
index 0000000..bc95921
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+/**
+ * Laconica, the distributed open-source microblogging tool
+ *
+ * Base class for actions that use the current user's design
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Action
+ * @package   Laconica
+ * @author    Zach Copley <zach@controlyourself.ca>
+ * @copyright 2009 Control Yourself, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://laconi.ca/
+ */
+
+if (!defined('LACONICA')) {
+    exit(1);
+}
+
+/**
+ * Base class for actions that use a group's design
+ *
+ * Pages related to groups can be themed with a design. 
+ * This superclass returns that design.
+ *
+ * @category Action
+ * @package  Laconica
+ * @author   Zach Copley <zach@controlyourself.ca>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://laconi.ca/
+ *
+ */
+class GroupDesignAction extends Action {
+
+    /** The group in question */
+    var $group = null;
+    
+    /**
+      * Show the groups's design stylesheet
+      *
+      * @return nothing
+      */
+     function showStylesheets()
+     {
+         parent::showStylesheets();
+
+         $design = $this->getDesign();
+
+         if (!empty($design)) {
+             $design->showCSS($this);
+         }
+     }
+
+    /**
+     * A design for this action
+     *
+     * if the group attribute has been set, returns that group's
+     * design.
+     *
+     * @return Design a design object to use
+     */
+
+    function getDesign()
+    {
+
+        if (empty($this->group)) {
+            return null;
+        }
+
+        return $this->group->getDesign();
+    }
+
+}