From 7f2c61c7bde9443b3b6beffdc216fdd7b54b94b7 Mon Sep 17 00:00:00 2001
From: Jared Hancock <jared@osticket.com>
Date: Thu, 5 Feb 2015 17:28:13 -0600
Subject: [PATCH] logo: Allow customized SCP logo

---
 assets/default/css/theme.css         |  17 ++++++--
 include/class.config.php             |  10 +++++
 include/class.file.php               |  12 ++---
 include/client/header.inc.php        |  11 ++---
 include/staff/header.inc.php         |   5 ++-
 include/staff/login.tpl.php          |   5 ++-
 include/staff/settings-pages.inc.php |  63 +++++++++++++++++++--------
 scp/css/login.css                    |  19 +++++---
 scp/css/scp.css                      |  19 ++++++--
 scp/images/header-bg.png             | Bin 296 -> 0 bytes
 scp/images/login-logo.png            | Bin 11684 -> 0 bytes
 scp/logo.php                         |  35 +++++++++++++++
 12 files changed, 152 insertions(+), 44 deletions(-)
 delete mode 100644 scp/images/header-bg.png
 delete mode 100644 scp/images/login-logo.png
 create mode 100644 scp/logo.php

diff --git a/assets/default/css/theme.css b/assets/default/css/theme.css
index e50724e19..cac01b19b 100644
--- a/assets/default/css/theme.css
+++ b/assets/default/css/theme.css
@@ -300,9 +300,20 @@ body {
   height: 71px;
   padding: 0 20px;
 }
-#header #logo {
-  width: 220px;
-  height: 71px;
+#logo {
+    height: 100%;
+}
+#header #logo img {
+  max-height: 65px;
+  max-width: 380px;
+  width: auto;
+  height: auto;
+  vertical-align: middle;
+}
+.valign-helper {
+    height: 100%;
+    display: inline-block;
+    vertical-align: middle;
 }
 #header p {
   width: 400px;
diff --git a/include/class.config.php b/include/class.config.php
index 3683399be..e61c06814 100644
--- a/include/class.config.php
+++ b/include/class.config.php
@@ -1017,6 +1017,13 @@ class OsticketConfig extends Config {
         return $this->getLogoId('client');
     }
 
+    function getStaffLogoId() {
+        return $this->getLogoId('staff');
+    }
+    function getStaffLogo() {
+        return $this->getLogo('staff');
+    }
+
     function updatePagesSettings($vars, &$errors) {
         global $ost;
 
@@ -1060,6 +1067,9 @@ class OsticketConfig extends Config {
             'client_logo_id' => (
                 (is_numeric($vars['selected-logo']) && $vars['selected-logo'])
                 ? $vars['selected-logo'] : false),
+            'staff_logo_id' => (
+                (is_numeric($vars['selected-logo-scp']) && $vars['selected-logo-scp'])
+                ? $vars['selected-logo-scp'] : false),
            ));
     }
 
diff --git a/include/class.file.php b/include/class.file.php
index 340f4a63d..99da8c53a 100644
--- a/include/class.file.php
+++ b/include/class.file.php
@@ -293,7 +293,7 @@ class AttachmentFile {
     }
 
     /* Function assumes the files types have been validated */
-    function upload($file, $ft='T') {
+    function upload($file, $ft='T', $deduplicate=true) {
 
         if(!$file['name'] || $file['error'] || !is_uploaded_file($file['tmp_name']))
             return false;
@@ -309,10 +309,10 @@ class AttachmentFile {
                     'tmp_name'=>$file['tmp_name'],
                     );
 
-        return AttachmentFile::save($info, $ft);
+        return AttachmentFile::save($info, $ft, $deduplicate);
     }
 
-    function uploadLogo($file, &$error, $aspect_ratio=3) {
+    function uploadLogo($file, &$error, $aspect_ratio=2) {
         /* Borrowed in part from
          * http://salman-w.blogspot.com/2009/04/crop-to-fit-image-using-aspphp.html
          */
@@ -337,13 +337,13 @@ class AttachmentFile {
         $source_aspect_ratio = $source_width / $source_height;
 
         if ($source_aspect_ratio >= $aspect_ratio)
-            return self::upload($file, 'L');
+            return self::upload($file, 'L', false);
 
         $error = __('Image is too square. Upload a wider image');
         return false;
     }
 
-    function save(&$file, $ft='T') {
+    function save(&$file, $ft='T', $deduplicate=true) {
 
         if (isset($file['data'])) {
             // Allow a callback function to delay or avoid reading or
@@ -365,7 +365,7 @@ class AttachmentFile {
 
             // If the record exists in the database already, a file with the
             // same hash and size is already on file -- just return its ID
-            if (list($id, $key) = db_fetch_row(db_query($sql, false))) {
+            if ($deduplicate && (list($id, $key) = db_fetch_row(db_query($sql, false)))) {
                 $file['key'] = $key;
                 return $id;
             }
diff --git a/include/client/header.inc.php b/include/client/header.inc.php
index 92e9dfe13..5d369f63e 100644
--- a/include/client/header.inc.php
+++ b/include/client/header.inc.php
@@ -51,11 +51,6 @@ if (($lang = Internationalization::getCurrentLanguage())
 <body>
     <div id="container">
         <div id="header">
-            <a class="pull-left" id="logo" href="<?php echo ROOT_PATH; ?>index.php"
-            title="<?php echo __('Support Center'); ?>"><img src="<?php
-                echo ROOT_PATH; ?>logo.php" border=0 alt="<?php
-                echo $ost->getConfig()->getTitle(); ?>"
-                style="height: 5em"></a>
             <div class="pull-right flush-right">
             <p>
              <?php
@@ -95,6 +90,12 @@ if (($all_langs = Internationalization::availableLanguages())
 } ?>
             </p>
             </div>
+            <a class="pull-left" id="logo" href="<?php echo ROOT_PATH; ?>index.php"
+            title="<?php echo __('Support Center'); ?>">
+                <span class="valign-helper"></span>
+                <img src="<?php echo ROOT_PATH; ?>logo.php" border=0 alt="<?php
+                echo $ost->getConfig()->getTitle(); ?>">
+            </a>
         </div>
         <div class="clear"></div>
         <?php
diff --git a/include/staff/header.inc.php b/include/staff/header.inc.php
index 60079586d..d1c885cf8 100644
--- a/include/staff/header.inc.php
+++ b/include/staff/header.inc.php
@@ -61,7 +61,6 @@ if (($lang = Internationalization::getCurrentLanguage())
         echo sprintf('<div id="notice_bar">%s</div>', $ost->getNotice());
     ?>
     <div id="header">
-        <a href="index.php" class="no-pjax pull-left" id="logo">osTicket &mdash; <?php echo __('Customer Support System'); ?></a>
         <p id="info" class="pull-right"><?php echo sprintf(__('Welcome, %s.'), '<strong>'.$thisstaff->getFirstName().'</strong>'); ?>
            <?php
             if($thisstaff->isAdmin() && !defined('ADMINPAGE')) { ?>
@@ -72,6 +71,10 @@ if (($lang = Internationalization::getCurrentLanguage())
             | <a href="profile.php"><?php echo __('My Preferences'); ?></a>
             | <a href="logout.php?auth=<?php echo $ost->getLinkToken(); ?>" class="no-pjax"><?php echo __('Log Out'); ?></a>
         </p>
+        <a href="index.php" class="no-pjax" id="logo">
+            <span class="valign-helper"></span>
+            <img src="logo.php" alt="osTicket &mdash; <?php echo __('Customer Support System'); ?>"/>
+        </a>
     </div>
     <div id="pjax-container" class="<?php if ($_POST) echo 'no-pjax'; ?>">
 <?php } else {
diff --git a/include/staff/login.tpl.php b/include/staff/login.tpl.php
index eb2bf80d0..b8a4a8601 100644
--- a/include/staff/login.tpl.php
+++ b/include/staff/login.tpl.php
@@ -3,7 +3,10 @@ include_once(INCLUDE_DIR.'staff/login.header.php');
 $info = ($_POST && $errors)?Format::htmlchars($_POST):array();
 ?>
 <div id="loginBox">
-    <h1 id="logo"><a href="index.php">osTicket :: <?php echo __('Staff Control Panel');?></a></h1>
+    <h1 id="logo"><a href="index.php">
+        <span class="valign-helper"></span>
+        <img src="logo.php?login" alt="osTicket :: <?php echo __('Staff Control Panel');?>" />
+    </a></h1>
     <h3><?php echo Format::htmlchars($msg); ?></h3>
     <div class="banner"><small><?php echo ($content) ? Format::display($content->getBody()) : ''; ?></small></div>
     <form action="login.php" method="post">
diff --git a/include/staff/settings-pages.inc.php b/include/staff/settings-pages.inc.php
index 3bf1c7877..4d9910b4e 100644
--- a/include/staff/settings-pages.inc.php
+++ b/include/staff/settings-pages.inc.php
@@ -107,49 +107,74 @@ $pages = Page::getPages();
     <tbody>
         <tr>
         <td colspan="2">
-                <label style="display:block">
+<table style="width:100%">
+    <thead><tr>
+        <th>Client</th>
+        <th>Staff</th>
+        <th>Logo</th>
+    </tr></thead>
+    <tbody>
+        <tr>
+            <td>
                 <input type="radio" name="selected-logo" value="0"
                     style="margin-left: 1em"
                     <?php if (!$ost->getConfig()->getClientLogoId())
                         echo 'checked="checked"'; ?>/>
-                <img src="../assets/default/images/logo.png"
+            </td><td>
+                <input type="radio" name="selected-logo-scp" value="0"
+                    style="margin-left: 1em"
+                    <?php if (!$ost->getConfig()->getStaffLogoId())
+                        echo 'checked="checked"'; ?>/>
+            </td><td>
+                <img src="<?php echo ROOT_PATH; ?>assets/default/images/logo.png"
                     alt="Default Logo" valign="middle"
                     style="box-shadow: 0 0 0.5em rgba(0,0,0,0.5);
                         margin: 0.5em; height: 5em;
                         vertical-align: middle"/>
-                </label>
-        </td></tr>
-        <tr>
-            <th colspan="2">
-                <em><?php echo __('Use a custom logo'); ?>&nbsp;<i class="help-tip icon-question-sign" href="#upload_a_new_logo"></i></em>
-            </th>
+                <img src="<?php echo ROOT_PATH; ?>scp/images/ost-logo.png"
+                    alt="Default Logo" valign="middle"
+                    style="box-shadow: 0 0 0.5em rgba(0,0,0,0.5);
+                        margin: 0.5em; height: 5em;
+                        vertical-align: middle"/>
+            </td>
         </tr>
-        <tr><td colspan="2">
-            <?php
-            $current = $ost->getConfig()->getClientLogoId();
-            foreach (AttachmentFile::allLogos() as $logo) { ?>
-                <div>
-                <label>
+        <tr><th colspan="3">
+            <em><?php echo __('Use a custom logo'); ?>&nbsp;<i class="help-tip icon-question-sign" href="#upload_a_new_logo"></i></em>
+        </th></tr>
+    <?php
+    $current = $ost->getConfig()->getClientLogoId();
+    $currentScp = $ost->getConfig()->getStaffLogoId();
+    foreach (AttachmentFile::allLogos() as $logo) { ?>
+        <tr>
+            <td>
                 <input type="radio" name="selected-logo"
                     style="margin-left: 1em" value="<?php
                     echo $logo->getId(); ?>" <?php
                     if ($logo->getId() == $current)
                         echo 'checked="checked"'; ?>/>
+            </td><td>
+                <input type="radio" name="selected-logo-scp"
+                    style="margin-left: 1em" value="<?php
+                    echo $logo->getId(); ?>" <?php
+                    if ($logo->getId() == $currentScp)
+                        echo 'checked="checked"'; ?>/>
+            </td><td>
                 <img src="<?php echo $logo->getDownloadUrl(); ?>"
                     alt="Custom Logo" valign="middle"
                     style="box-shadow: 0 0 0.5em rgba(0,0,0,0.5);
                         margin: 0.5em; height: 5em;
                         vertical-align: middle;"/>
-                </label>
-                <?php if ($logo->getId() != $current) { ?>
+                <?php if ($logo->getId() != $current && $logo->getId() != $currentScp) { ?>
                 <label>
                 <input type="checkbox" name="delete-logo[]" value="<?php
                     echo $logo->getId(); ?>"/> <?php echo __('Delete'); ?>
                 </label>
                 <?php } ?>
-                </div>
-            <?php } ?>
-            <br/>
+            </td>
+        </tr>
+<?php } ?>
+    </tbody>
+</table>
             <b><?php echo __('Upload a new logo'); ?>:</b>
             <input type="file" name="logo[]" size="30" value="" />
             <font class="error"><br/><?php echo $errors['logo']; ?></font>
diff --git a/scp/css/login.css b/scp/css/login.css
index 99f8f1220..8998e3883 100644
--- a/scp/css/login.css
+++ b/scp/css/login.css
@@ -69,12 +69,21 @@ h1 {
 
 #logo a {
     display:block;
-    width:180px;
-    height:72px;
     text-decoration:none;
-    text-indent:-9999px;
-    background:url(../images/login-logo.png);
-    margin:0 auto 1em auto;
+    height: 100px;
+}
+
+#logo a img {
+    max-height:72px;
+    max-width: 300px;
+    height: auto;
+    width: auto;
+    vertical-align: middle;
+}
+.valign-helper {
+    height: 100%;
+    display: inline-block;
+    vertical-align: middle;
 }
 
 h3 {
diff --git a/scp/css/scp.css b/scp/css/scp.css
index 2fe63818d..27599c269 100644
--- a/scp/css/scp.css
+++ b/scp/css/scp.css
@@ -100,12 +100,23 @@ div#header a {
 
 #logo {
     display:block;
-    width:190px;
-    height:76px;
     text-decoration:none;
     outline:none;
-    text-indent:-9999px;
-    background:url(../images/ost-logo.png) top left no-repeat;
+    height: 76px;
+    max-width: 400px;
+}
+#logo img {
+    max-height: 76px;
+    max-width: 300px;
+    height: auto;
+    width: auto;
+    padding-left: 10px;
+    vertical-align: middle;
+}
+.valign-helper {
+    height: 100%;
+    display: inline-block;
+    vertical-align: middle;
 }
 
 #header p {
diff --git a/scp/images/header-bg.png b/scp/images/header-bg.png
deleted file mode 100644
index dc3e1d5c51f1a9c7b58c5a5b8c423a0152c72767..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 296
zcmeAS@N?(olHy`uVBq!ia0y~yVDMpJVDRN&VqjosUMYH$fq{Xuz$3Dlfq`2Xgc%uT
z&5>YWU|>mi^mSxl*w|O|J8&`s1A{`cN02WALzOB6LqjtI!_WT=3=J<C7)lKo7+xhX
zFj&oCU=Yur6o1r>fq`M3r;B4q#jQ6tZwfXj@HjX!e~DL+FF6$0z?%_aeWUWBRC3S9
zl>bqhs`f@omy|!J?_s@}wbskY%1K7iON%ozMzMFbbpIqTt<3VRYQ5SjDogH$db*!j
z{p4P>rw0tI7f@A10+;ux=l>9A;{2)pB#Qge4y~0-CQX=NzW$`;@<P*fUUeKdtNr_J
g7#JA-|7T{H@y<rWRBZK01_lNOPgg&ebxsLQ0J_0mF8}}l

diff --git a/scp/images/login-logo.png b/scp/images/login-logo.png
deleted file mode 100644
index 6526ebe0a15f393382e0339b38cef8422d7ff471..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 11684
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
B9ohf@

diff --git a/scp/logo.php b/scp/logo.php
new file mode 100644
index 000000000..ab6bacdf5
--- /dev/null
+++ b/scp/logo.php
@@ -0,0 +1,35 @@
+<?php
+/*********************************************************************
+    logo.php
+
+    Simple logo to facilitate serving a customized client-side logo from
+    osTicet. The logo is configurable in Admin Panel -> Settings -> Pages
+
+    Peter Rotich <peter@osticket.com>
+    Jared Hancock <jared@osticket.com>
+    Copyright (c)  2006-2013 osTicket
+    http://www.osticket.com
+
+    Released under the GNU General Public License WITHOUT ANY WARRANTY.
+    See LICENSE.TXT for details.
+
+    vim: expandtab sw=4 ts=4 sts=4:
+**********************************************************************/
+
+// Don't update the session for inline image fetches
+if (!function_exists('noop')) { function noop() {} }
+session_set_save_handler('noop','noop','noop','noop','noop','noop');
+define('DISABLE_SESSION', true);
+
+require_once('../main.inc.php');
+
+if (($logo = $ost->getConfig()->getStaffLogo())) {
+    $logo->display();
+} else {
+    if (isset($_GET['login']))
+        header('Location: images/login-logo.png');
+    else
+        header('Location: images/ost-logo.png');
+}
+
+?>
-- 
GitLab