diff --git a/plugins/ktcore/KTWidgets.php b/plugins/ktcore/KTWidgets.php
index ac53e4c..99890d7 100755
--- a/plugins/ktcore/KTWidgets.php
+++ b/plugins/ktcore/KTWidgets.php
@@ -1047,15 +1047,8 @@ class KTCoreImageCropWidget extends KTWidget {
return $res;
}
- // FIXME make required *either* per-action property
- // FIXME or a global pref.
- $global_required_default = true;
- $this->bRequired = (KTUtil::arrayGet($aOptions, 'required', $global_required_default, false) == true);
-
- $this->src = $aOptions['src'];
- $this->alt = $aOptions['alt'];
- $this->title = $aOptions['title'];
-
+ $this->aOptions['init_width'] = KTUtil::arrayGet($aOptions, 'init_width', '313');
+ $this->aOptions['init_height'] = KTUtil::arrayGet($aOptions, 'init_height', '50');
}
function render() {
@@ -1069,7 +1062,7 @@ class KTCoreImageCropWidget extends KTWidget {
$this->aJavascript[] = 'thirdpartyjs/jquery/jquery-1.3.2.js';
$this->aJavascript[] = 'thirdpartyjs/jquery/plugins/imageareaselect/scripts/jquery.imgareaselect.pack.js';
- $this->aJavascript[] = 'resources/js/kt_image_crop.js';
+ //$this->aJavascript[] = 'resources/js/kt_image_crop.js';
if (!empty($this->aJavascript)) {
// grab our inner page.
diff --git a/plugins/ktcore/admin/manageBranding.php b/plugins/ktcore/admin/manageBranding.php
index a69239a..795b459 100755
--- a/plugins/ktcore/admin/manageBranding.php
+++ b/plugins/ktcore/admin/manageBranding.php
@@ -1,892 +1,1001 @@
-.
- *
- * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
- * California 94120-7775, or email info@knowledgetree.com.
- *
- * The interactive user interfaces in modified source and object code versions
- * of this program must display Appropriate Legal Notices, as required under
- * Section 5 of the GNU General Public License version 3.
- *
- * In accordance with Section 7(b) of the GNU General Public License version 3,
- * these Appropriate Legal Notices must retain the display of the "Powered by
- * KnowledgeTree" logo and retain the original copyright notice. If the display of the
- * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
- * must display the words "Powered by KnowledgeTree" and retain the original
- * copyright notice.
- * Contributor( s): ______________________________________
- */
-
-require_once(KT_LIB_DIR . '/dispatcher.inc.php');
-require_once(KT_LIB_DIR . '/templating/templating.inc.php');
-require_once(KT_LIB_DIR . '/browse/columnregistry.inc.php');
-require_once(KT_LIB_DIR . '/widgets/reorderdisplay.inc.php');
-require_once(KT_LIB_DIR . '/widgets/fieldWidgets.php');
-require_once(KT_LIB_DIR . "/widgets/FieldsetDisplayRegistry.inc.php");
-require_once(KT_LIB_DIR . "/widgets/fieldsetDisplay.inc.php");
-require_once(KT_LIB_DIR . "/widgets/widgetfactory.inc.php");
-require_once(KT_LIB_DIR . "/validation/dispatchervalidation.inc.php");
-require_once(KT_LIB_DIR . "/metadata/fieldsetregistry.inc.php");
-require_once(KT_LIB_DIR . "/validation/validatorfactory.inc.php");
-
-
-class ManageBrandDispatcher extends KTAdminDispatcher {
-
- private $maxLogoWidth = 313;
- private $maxLogoHeight = 50;
- public $supportedTypes = array('gif', 'png', 'pjpeg', 'jpe', 'jpeg', 'jpg', 'jfif', 'jfif-tbnl');
-
- function check() {
-
- $this->aBreadcrumbs[] = array('url' => $_SERVER['PHP_SELF'], 'name' => _kt('Manage Branding'));
- return parent::check();
- }
-
- function do_main() {
- $uploadLogoForm = $this->getUploadLogoForm();
- return $uploadLogoForm->render();
- }
-
-
- /**
- * Returns the upload logo form
- * @return KTForm
- *
- */
-
- function getUploadLogoForm() {
- $this->oPage->setBreadcrumbDetails(_kt("Upload Logo"));
-
- $oForm = new KTForm;
- $oForm->setOptions(array(
- 'identifier' => 'ktcore.folder.branding',
- 'label' => _kt('Upload Logo'),
- 'submit_label' => _kt('Upload'),
- 'action' => 'upload',
- 'fail_action' => 'main',
- 'encoding' => 'multipart/form-data',
- 'context' => &$this,
- 'extraargs' => $this->meldPersistQuery("","",true),
- 'description' => _kt('You can upload a logo to brand your KnowledgeTree site.')
- ));
-
- $oWF =& KTWidgetFactory::getSingleton();
-
- $widgets = array();
- $validators = array();
-
- // Adding the File Upload Widget
- $widgets[] = $oWF->get('ktcore.widgets.file', array(
- 'label' => _kt('Logo File'),
- 'required' => true,
- 'name' => 'file',
- 'id' => 'file',
- 'value' => '',
- 'description' => _kt("The logo's dimensions should be 313px width by 50px height. If your logo doesn't fit these dimensions, you can choose to crop or scale it."),
- ));
-
- $aVocab['crop'] = 'Crop - Cut out a selection';
- $aVocab['scale'] = 'Scale - Stretch or Shrink to fit';
- $aVocab['nothing'] = 'Don\'t do anything (My image has the correct dimensions)';
-
- //Adding document type lookup widget
- $widgets[] = $oWF->get('ktcore.widgets.selection',array(
- 'label' => _kt('Fitting Image'),
- 'id' => 'logo_action',
- 'description' => _kt('How would you like to resize the image?'),
- 'name' => 'resize_method',
- 'vocab' => $aVocab,
- 'selected' => 'crop',
- 'label_method' => 'getName',
- 'simple_select' => true,
- ));
-
- $oForm->setWidgets($widgets);
- $oForm->setValidators($validators);
-
- // TODO: Should electronic signature be implemented for this?
- // Implement an electronic signature for accessing the admin section, it will appear every 10 minutes
- /* //Have to instanciate the oFolder
- global $default;
- $iFolderId = $this->oFolder->getId();
- if($default->enableESignatures){
- $sUrl = KTPluginUtil::getPluginPath('electronic.signatures.plugin', true);
- $heading = _kt('You are attempting to perform a bulk upload');
- $submit['type'] = 'button';
- $submit['onclick'] = "javascript: showSignatureForm('{$sUrl}', '{$heading}', 'ktcore.transactions.bulk_upload', 'bulk', 'bulk_upload_form', 'submit', {$iFolderId});";
- }else{
- $submit['type'] = 'submit';
- $submit['onclick'] = '';
- }
- */
-
- return $oForm;
- }
-
-
- /**
- * Returns the scale logo form
- *
- * This form will display a preview of all the possible sclaled combinations.
- * This includes:
- *
- * Stretched, Top Left Cropped, Proportional Stretch, Proportional Top Left Cropped
- *
- * @return KTForm
- *
- */
-
- function getScaleLogoForm($logoItems = array()) {
- $this->oPage->setBreadcrumbDetails(_kt("Scale Logo"));
-
- $oForm = new KTForm;
- $oForm->setOptions(array(
- 'identifier' => 'ktcore.folder.branding',
- 'label' => _kt('Choose Logo'),
- 'submit_label' => _kt('Select'),
- 'action' => 'selectLogo',
- 'fail_action' => 'main',
- 'encoding' => 'multipart/form-data',
- 'context' => &$this,
- 'extraargs' => $this->meldPersistQuery("","",true),
- 'description' => _kt('Choose a logo by clicking on one of the images')
- ));
-
- $oWF =& KTWidgetFactory::getSingleton();
-
- $widgets = array();
- $validators = array();
-
- $logoFileName = 'var'.DIRECTORY_SEPARATOR.'branding'.DIRECTORY_SEPARATOR.'logo'.DIRECTORY_SEPARATOR.$logoFileName;
-
- // Adding the image select widget (User will select the best image)
- $widgets[] = $oWF->get('ktcore.widgets.imageselect', array(
- 'label' => _kt('Logo Preview'),
- 'name' => $logoFileName,
- 'value' => $logoItems,
- ));
-
- // Adding the Hidden FileName Input String
- $widgets[] = $oWF->get('ktcore.widgets.hidden', array(
- 'name' => 'kt_imageselect',
- 'value' => $logoItems[0],
- ));
-
- $oForm->setWidgets($widgets);
- $oForm->setValidators($validators);
-
- return $oForm;
- }
-
-
- /**
- * Returns the crop logo form
- *
- * This form will assist the user in selecting an area of the image to use as the logo
- * within predefined dimensions required for the logo to fit properly into the page header.
- *
- * @return KTForm
- *
- */
-
- function getCropLogoForm($logoFileName = '') {
- $this->oPage->setBreadcrumbDetails(_kt("Crop Logo"));
-
- $oForm = new KTForm;
- $oForm->setOptions(array(
- 'identifier' => 'ktcore.folder.branding',
- 'name' => 'crop_form',
- 'label' => _kt('Crop Logo'),
- 'submit_label' => _kt('Crop'),
- 'action' => 'crop',
- 'fail_action' => 'main',
- 'encoding' => 'multipart/form-data',
- 'context' => &$this,
- 'extraargs' => $this->meldPersistQuery("","",true),
- 'description' => _kt('Use this facility to ensure that the logo meets the required dimensions for the header.')
- ));
-
- $oWF =& KTWidgetFactory::getSingleton();
-
- $widgets = array();
- $validators = array();
-
- $logoFile = 'var'.DIRECTORY_SEPARATOR.'branding'.DIRECTORY_SEPARATOR.'logo'.DIRECTORY_SEPARATOR.$logoFileName;
-
- // Adding the Image Crop Widget
- $widgets[] = $oWF->get('ktcore.widgets.imagecrop', array(
- 'label' => _kt('Crop Logo'),
- //'name' => 'Logo',
- 'value' => $logoFile,
- 'description' => _kt('To crop an area of the logo, click and drag the resizable rectangle over the image.'),
- ));
-
- // Adding the Hidden FileName Input String
- $widgets[] = $oWF->get('ktcore.widgets.hidden', array(
- 'name' => 'logo_file_name',
- 'value' => $logoFileName,
- ));
-
- // Adding the Hidden Coordinates X1
- $widgets[] = $oWF->get('ktcore.widgets.hidden', array(
- 'name' => 'crop_x1',
- 'value' => 'x1test',
- ));
-
- // Adding the Hidden Coordinates Y1
- $widgets[] = $oWF->get('ktcore.widgets.hidden', array(
- 'name' => 'crop_y1',
- 'value' => '',
- ));
-
- // Adding the Hidden Coordinates X2
- $widgets[] = $oWF->get('ktcore.widgets.hidden', array(
- 'name' => 'crop_x2',
- 'value' => '',
- ));
-
- // Adding the Hidden Coordinates Y2
- $widgets[] = $oWF->get('ktcore.widgets.hidden', array(
- 'name' => 'crop_y2',
- 'value' => '',
- ));
-
- $oForm->setWidgets($widgets);
- $oForm->setValidators($validators);
-
- return $oForm;
- }
-
- /**
- * Returns the apply logo form
- *
- * This form will display a preview of the correctly sized logo and prompt the user to apply it.
- *
- * @return KTForm
- *
- */
-
- function getApplyLogoForm($logoFileName = '') {
- $this->oPage->setBreadcrumbDetails(_kt("Apply Logo"));
-
- $oForm = new KTForm;
- $oForm->setOptions(array(
- 'identifier' => 'ktcore.folder.branding',
- 'label' => _kt('Apply Logo'),
- 'submit_label' => _kt('Apply'),
- 'action' => 'apply',
- 'fail_action' => 'main',
- 'encoding' => 'multipart/form-data',
- 'context' => &$this,
- 'extraargs' => $this->meldPersistQuery("","",true),
- 'description' => _kt('Applying the logo will activate it in the header making it visible to all who access this site.')
- ));
-
- $oWF =& KTWidgetFactory::getSingleton();
-
- $widgets = array();
- $validators = array();
-
- $logoFileName = 'var'.DIRECTORY_SEPARATOR.'branding'.DIRECTORY_SEPARATOR.'logo'.DIRECTORY_SEPARATOR.$logoFileName;
-
- // Adding the Image Widget
- $widgets[] = $oWF->get('ktcore.widgets.image', array(
- 'label' => _kt('Logo Preview'),
- 'name' => $logoFileName, // title and alt attributes get set to this.
- 'value' => $logoFileName,
- 'width' => $this->maxLogoWidth,
- 'height' => $this->maxLogoHeight,
- 'widgetwidth' => 20
- ));
-
- // Adding the Hidden FileName Input String
- $widgets[] = $oWF->get('ktcore.widgets.hidden', array(
- 'name' => 'logo_file_name',
- 'value' => $logoFileName,
- ));
-
- $oForm->setWidgets($widgets);
- $oForm->setValidators($validators);
-
- return $oForm;
- }
-
-
- /*
- * Action responsible for uploading the logo
- *
- */
-
- function do_upload(){
- global $default;
-
- $oForm = $this->getUploadLogoForm();
- $res = $oForm->validate();
- if (!empty($res['errors'])) {
- return $oForm->handleError();
- }
-
- // Setting up the branding directory, logos will be stored in var/branding/
- $brandDir = $default->varDirectory.DIRECTORY_SEPARATOR.'branding';
-
- if (stristr(PHP_OS,'WIN')) {
- $brandDir = str_replace('/', '\\', $brandDir);
- }
-
- //if branding dir does not exist, generate one and add an index file to block access
- if (!file_exists($brandDir)) {
- mkdir($brandDir, 0755);
- touch($brandDir.DIRECTORY_SEPARATOR.'index.html');
- file_put_contents($brandDir.DIRECTORY_SEPARATOR.'index.html', 'You do not have permission to access this directory.');
- }
-
- $logoDir = $brandDir.DIRECTORY_SEPARATOR."logo";
- //if branding dir does not exist, generate one and add an index file to block access
- if (!file_exists($logoDir)) {
- mkdir($logoDir, 0755);
- touch($logoDir.DIRECTORY_SEPARATOR.'index.html');
- file_put_contents($logoDir.DIRECTORY_SEPARATOR.'index.html', 'You do not have permission to access this directory.');
- }
-
- $logoFileName = $_FILES['_kt_attempt_unique_file']['name'];
-
- //Changing to logo.jpg (Need to preserve extention as GD requires the exact image type to work)
- $ext = end(explode('.', $logoFileName));
-
- $type = $_FILES['_kt_attempt_unique_file']['type'];
-
- //Stage 1 filename based ext check:
- if (!$this->isSupportedExtension($ext)) {
- //If filename based extension isn't supported will try and guess based on mime type
- $default->log->error("Stage 1: Unsupported file type: '".$type."' for file: ':".$_FILES['_kt_attempt_unique_file']['name']."'");
- $ext = $this->getExtension($type);
-
- if (!$this->isSupportedExtension($ext)) {
- $default->log->error("Unsupported file type: '".$type."' for file: ':".$_FILES['_kt_attempt_unique_file']['name']."'");
- $this->errorRedirectToMain("The file you tried to upload is not supported.");
- }
- }
-
- $logoFileName = 'logo_tmp_'.md5(Date('ymd-hms')).'.'.$ext; //Fighting the browser cache here
- $logoFile = $logoDir.DIRECTORY_SEPARATOR.$logoFileName;
-
- // deleting old tmp file
- if (file_exists($logoFile)) {
- @unlink($logoFile);
- }
-
- //TODO: Test Upload Failure by setting the $logoFile to ''
-
- if(!move_uploaded_file($_FILES['_kt_attempt_unique_file']['tmp_name'], $logoFile)) {
- $default->log->error("Couldn't upload file from '".$_FILES['_kt_attempt_unique_file']['tmp_name']."' to '$logoFile'");
- $this->errorRedirectToMain("Couldn't upload file");
- exit(0);
- }
-
- $resizeMethod = $_REQUEST['data']['resize_method'];
-
- $relDir = 'var'.DIRECTORY_SEPARATOR.'branding'.DIRECTORY_SEPARATOR.'logo'.DIRECTORY_SEPARATOR;
-
- switch ($resizeMethod) {
- case 'crop':
-
- if ($this->isImageCroppable($logoFile, $this->maxLogoWith, $this->maxLogoHeight, $type)) {
-
- $retForm = $this->getCropLogoForm($logoFileName);
- } else {
- $_SESSION['KTErrorMessage'][] = _kt("The image was too small to be cropped.");
- $retForm = $this->getApplyLogoForm($logoFileName);
- }
-
- return $retForm->render();
-
- case 'scale':
-
- $logoFileNameStretched = 'logo_tmp_stretched_'.md5(Date('ymd-hms')).'.'.$ext; //Fighting the browser cache here
- $logoFileStretched = $logoDir.DIRECTORY_SEPARATOR.$logoFileNameStretched;
-
- $logoFileNameCropped = 'logo_tmp_cropped_'.md5(Date('ymd-hms')).'.'.$ext; //Fighting the browser cache here
- $logoFileCropped = $logoDir.DIRECTORY_SEPARATOR.$logoFileNameCropped;
-
- //Creating stretched image
- $res = $this->scaleImage($logoFile, $logoFileStretched, $this->maxLogoWidth, $this->maxLogoHeight, $type, false, false);
-
- //Creating top-left cropped image
- $res = $this->scaleImage($logoFile, $logoFileCropped, $this->maxLogoWidth, $this->maxLogoHeight, $type, false, true);
- $res = $this->cropImage($logoFileCropped, $logoFileCropped, 0, 0, $this->maxLogoWidth, $this->maxLogoHeight, $type);
-
- $logoItem[] = $relDir.$logoFileNameStretched;
- $logoItem[] = $relDir.$logoFileNameCropped;
-
- $form = $this->getScaleLogoForm($logoItem);
- return $form->render();
-
- default:
- $form = $this->getApplyLogoForm($logoFileName);
- return $form->render();
- }
-
- }
-
-
- /**
- * Returns the MIME of the filename, deducted from its extension
- * If the extension is unknown, returns "image/jpeg"
- */
- function getMime($filename)
- {
- $pos = strrpos($filename, '.');
- $extension = "";
- if ($pos !== false) {
- $extension = strtolower(substr($filename, $pos+1));
- }
-
- switch($extension) {
- case 'gif':
- return 'image/gif';
- case 'jfif':
- return 'image/jpeg';
- case 'jfif-tbnl':
- return 'image/jpeg';
- case 'png':
- return 'image/png';
- case 'jpe':
- return 'image/jpeg';
- case 'jpeg':
- return 'image/jpeg';
- case 'jpg':
- return 'image/jpeg';
- default:
- return 'image/jpeg';
- }
- }
-
-
- /**
- * Returns the MIME of the filename, deducted from its extension
- * If the extension is unknown, returns "image/jpeg"
- */
- function getExtension($type)
- {
-
- switch($type) {
- case 'image/gif':
- return 'gif';
- case 'image/jpeg':
- return 'jfif';
- case 'image/jpeg':
- return 'jfif-tbnl';
- case 'image/png':
- return 'png';
- case 'image/jpeg':
- return 'jpe';
- case 'image/jpeg':
- return 'jpeg';
- case 'image/jpeg':
- return 'jpg';
- case 'image/pjpeg':
- return 'jpg';
- default:
- return 'image/jpeg';
- }
- }
-
-
- /**
- * Returns TRUE of the extension is supported
- */
- function isSupportedExtension($extension)
- {
- if (in_array($extension, $this->supportedTypes)) {
- return TRUE;
- }
+.
+ *
+ * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
+ * California 94120-7775, or email info@knowledgetree.com.
+ *
+ * The interactive user interfaces in modified source and object code versions
+ * of this program must display Appropriate Legal Notices, as required under
+ * Section 5 of the GNU General Public License version 3.
+ *
+ * In accordance with Section 7(b) of the GNU General Public License version 3,
+ * these Appropriate Legal Notices must retain the display of the "Powered by
+ * KnowledgeTree" logo and retain the original copyright notice. If the display of the
+ * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
+ * must display the words "Powered by KnowledgeTree" and retain the original
+ * copyright notice.
+ * Contributor( s): ______________________________________
+ */
+
+require_once(KT_LIB_DIR . '/dispatcher.inc.php');
+require_once(KT_LIB_DIR . '/templating/templating.inc.php');
+require_once(KT_LIB_DIR . '/browse/columnregistry.inc.php');
+require_once(KT_LIB_DIR . '/widgets/reorderdisplay.inc.php');
+require_once(KT_LIB_DIR . '/widgets/fieldWidgets.php');
+require_once(KT_LIB_DIR . "/widgets/FieldsetDisplayRegistry.inc.php");
+require_once(KT_LIB_DIR . "/widgets/fieldsetDisplay.inc.php");
+require_once(KT_LIB_DIR . "/widgets/widgetfactory.inc.php");
+require_once(KT_LIB_DIR . "/validation/dispatchervalidation.inc.php");
+require_once(KT_LIB_DIR . "/metadata/fieldsetregistry.inc.php");
+require_once(KT_LIB_DIR . "/validation/validatorfactory.inc.php");
+
+
+class ManageBrandDispatcher extends KTAdminDispatcher {
+
+ private $maxLogoWidth = 313;
+ private $maxLogoHeight = 50;
+ public $supportedTypes = array('gif', 'png', 'pjpeg', 'jpe', 'jpeg', 'jpg', 'jfif', 'jfif-tbnl');
+
+ function check() {
+
+ $this->aBreadcrumbs[] = array('url' => $_SERVER['PHP_SELF'], 'name' => _kt('Manage Branding'));
+ return parent::check();
+ }
+
+ function do_main() {
+ $uploadLogoForm = $this->getUploadLogoForm();
+ return $uploadLogoForm->render();
+ }
+
+
+ /**
+ * Returns the upload logo form
+ * @return KTForm
+ *
+ */
+
+ function getUploadLogoForm() {
+ $this->oPage->setBreadcrumbDetails(_kt("Upload Logo"));
+
+ $oForm = new KTForm;
+ $oForm->setOptions(array(
+ 'identifier' => 'ktcore.folder.branding',
+ 'label' => _kt('Upload Logo'),
+ 'submit_label' => _kt('Upload'),
+ 'action' => 'upload',
+ 'fail_action' => 'main',
+ 'encoding' => 'multipart/form-data',
+ 'context' => &$this,
+ 'extraargs' => $this->meldPersistQuery("","",true),
+ 'description' => _kt('You can upload a logo to brand your KnowledgeTree site.')
+ ));
+
+ $oWF =& KTWidgetFactory::getSingleton();
+
+ $widgets = array();
+ $validators = array();
+
+ // Adding the File Upload Widget
+ $widgets[] = $oWF->get('ktcore.widgets.file', array(
+ 'label' => _kt('Logo File'),
+ 'required' => true,
+ 'name' => 'file',
+ 'id' => 'file',
+ 'value' => '',
+ 'description' => _kt("The logo's dimensions should be 313px width by 50px height. If your logo doesn't fit these dimensions, you can choose to crop or scale it."),
+ ));
+
+ $aVocab['crop'] = 'Crop - Cut out a selection';
+ $aVocab['scale'] = 'Scale - Stretch or Shrink to fit';
+ $aVocab['nothing'] = 'Don\'t do anything (My image has the correct dimensions)';
+
+ //Adding document type lookup widget
+ $widgets[] = $oWF->get('ktcore.widgets.selection',array(
+ 'label' => _kt('Fitting Image'),
+ 'id' => 'logo_action',
+ 'description' => _kt('How would you like to resize the image?'),
+ 'name' => 'resize_method',
+ 'vocab' => $aVocab,
+ 'selected' => 'crop',
+ 'label_method' => 'getName',
+ 'simple_select' => true,
+ ));
+
+ $oForm->setWidgets($widgets);
+ $oForm->setValidators($validators);
+
+ // TODO: Should electronic signature be implemented for this?
+ // Implement an electronic signature for accessing the admin section, it will appear every 10 minutes
+ /* //Have to instanciate the oFolder
+ global $default;
+ $iFolderId = $this->oFolder->getId();
+ if($default->enableESignatures){
+ $sUrl = KTPluginUtil::getPluginPath('electronic.signatures.plugin', true);
+ $heading = _kt('You are attempting to perform a bulk upload');
+ $submit['type'] = 'button';
+ $submit['onclick'] = "javascript: showSignatureForm('{$sUrl}', '{$heading}', 'ktcore.transactions.bulk_upload', 'bulk', 'bulk_upload_form', 'submit', {$iFolderId});";
+ }else{
+ $submit['type'] = 'submit';
+ $submit['onclick'] = '';
+ }
+ */
+
+ return $oForm;
+ }
+
+
+ /**
+ * Returns the scale logo form
+ *
+ * This form will display a preview of all the possible sclaled combinations.
+ * This includes:
+ *
+ * Stretched, Top Left Cropped, Proportional Stretch, Proportional Top Left Cropped
+ *
+ * @return KTForm
+ *
+ */
+
+ function getScaleLogoForm($logoItems = array()) {
+ $this->oPage->setBreadcrumbDetails(_kt("Scale Logo"));
+
+ $oForm = new KTForm;
+ $oForm->setOptions(array(
+ 'identifier' => 'ktcore.folder.branding',
+ 'label' => _kt('Choose Logo'),
+ 'submit_label' => _kt('Select'),
+ 'action' => 'selectLogo',
+ 'fail_action' => 'main',
+ 'encoding' => 'multipart/form-data',
+ 'context' => &$this,
+ 'extraargs' => $this->meldPersistQuery("","",true),
+ 'description' => _kt('Choose a logo by clicking on one of the images')
+ ));
+
+ $oWF =& KTWidgetFactory::getSingleton();
+
+ $widgets = array();
+ $validators = array();
+
+ $logoFileName = 'var'.DIRECTORY_SEPARATOR.'branding'.DIRECTORY_SEPARATOR.'logo'.DIRECTORY_SEPARATOR.$logoFileName;
+
+ // Adding the image select widget (User will select the best image)
+ $widgets[] = $oWF->get('ktcore.widgets.imageselect', array(
+ 'label' => _kt('Logo Preview'),
+ 'name' => $logoFileName,
+ 'value' => $logoItems,
+ ));
+
+ // Adding the Hidden FileName Input String
+ $widgets[] = $oWF->get('ktcore.widgets.hidden', array(
+ 'name' => 'kt_imageselect',
+ 'value' => $logoItems[0],
+ ));
+
+ $oForm->setWidgets($widgets);
+ $oForm->setValidators($validators);
+
+ return $oForm;
+ }
+
+
+ /**
+ * Returns the crop logo form
+ *
+ * This form will assist the user in selecting an area of the image to use as the logo
+ * within predefined dimensions required for the logo to fit properly into the page header.
+ *
+ * @return KTForm
+ *
+ */
+
+ function getCropLogoForm($logoFileName = '') {
+ $this->oPage->setBreadcrumbDetails(_kt("Crop Logo"));
+
+ $oForm = new KTForm;
+ $oForm->setOptions(array(
+ 'identifier' => 'ktcore.folder.branding',
+ 'name' => 'crop_form',
+ 'label' => _kt('Crop Logo'),
+ 'submit_label' => _kt('Crop'),
+ 'action' => 'crop',
+ 'fail_action' => 'main',
+ 'encoding' => 'multipart/form-data',
+ 'context' => &$this,
+ 'extraargs' => $this->meldPersistQuery("","",true),
+ 'description' => _kt('Use this facility to ensure that the logo meets the required dimensions for the header.')
+ ));
+
+ $oWF =& KTWidgetFactory::getSingleton();
+
+ $widgets = array();
+ $validators = array();
+
+ $logoFile = 'var'.DIRECTORY_SEPARATOR.'branding'.DIRECTORY_SEPARATOR.'logo'.DIRECTORY_SEPARATOR.$logoFileName;
+ $ext = end(explode('.', end(explode(DIRECTORY_SEPARATOR, $logoFile))));
+ $type = $this->getMime($ext);
- return FALSE;
- }
+ $imageWidth = $this->getImageWidth($logoFile, $type);
+ $imageHeight = $this->getImageHeight($logoFile, $type);
-
- /*
- * This method uses the GD library to scale an image.
- * - Supported images are jpeg, png and gif
- *
- */
- public function scaleImage( $origFile, $destFile, $width, $height, $type = 'image/jpeg', $scaleUp = false, $keepProportion = true) {
- global $default;
-
- //Requires the GD library if not exit gracefully
- if (!extension_loaded('gd')) {
- $default->log->error("The GD library isn't loaded");
- return false;
- }
-
- switch($type) {
- case 'image/jpeg':
- $orig = imagecreatefromjpeg($origFile);
- break;
- case 'image/pjpeg':
- $orig = imagecreatefromjpeg($origFile);
- break;
- case 'image/png':
- $orig = imagecreatefrompng($origFile);
- break;
- case 'image/gif':
- $orig = imagecreatefromgif($origFile);
- break;
- default:
- //Handle Error
- $default->log->error("Tried to scale an unsupported file type: $type");
- return false;
+ if ($imageWidth > $this->maxLogoWidth) {
+ $imageWidth = $this->maxLogoWidth;
}
- if($orig) {
- /*
- * calculate the size of the new image.
- */
- $orig_x = imagesx($orig);
- $orig_y = imagesy($orig);
-
- if (($orig_x < $width) && ($orig_y < $height)) {
- //Image Qualifies for Upscaling
- //If we're not going to scale up then exit here.
- if (!$scaleUp) {
- return true;
- }
- }
-
- $image_x = $width;
- $image_y = $height;
-
- //Constraining proportion
- if ($keepProportion) {
- $image_y = round(($orig_y * $image_x) / $orig_x); //Preserve proportion
- }
-
- /*
- * create the new image, and scale the original into it.
- */
- $image = imagecreatetruecolor($image_x, $image_y);
- imagecopyresampled($image, $orig, 0, 0, 0, 0, $image_x, $image_y, $orig_x, $orig_y);
-
- switch($type) {
- case 'image/jpeg':
- imagejpeg($image, $destFile);
- break;
- case 'image/pjpeg':
- imagejpeg($image, $destFile);
- break;
- case 'image/png':
- imagepng($image, $destFile);
- break;
- case 'image/gif':
- imagegif($image, $destFile);
- break;
- default:
- //Handle Error
- $default->log->error("Tried to scale an unsupported file type: $type");
- return false;
- }
-
- } else {
- //Handle Error
- $default->log->error("Couldn't obtain a valid GD resource");
- $default->log->error($sourceFile);
- $default->log->error($destFile);
- return false;
- }
-
- return true;
- }
-
-
- /*
- * Action responsible for cropping the logo
- *
- */
- function do_crop(){
- global $default;
-
- $logoFileName = $_REQUEST['data']['logo_file_name'];
- $logoFile = 'var'.DIRECTORY_SEPARATOR.'branding'.DIRECTORY_SEPARATOR.'logo'.DIRECTORY_SEPARATOR.$logoFileName;
-
- $ext = end(explode('.', $logoFileName));
- $destFileName = 'logo_tmp_'.md5(Date('ymd-hms')).'.'.$ext;
- $destFile = 'var'.DIRECTORY_SEPARATOR.'branding'.DIRECTORY_SEPARATOR.'logo'.DIRECTORY_SEPARATOR.$destFileName;
-
- $x1 = $_REQUEST['data']['crop_x1'];
- $y1 = $_REQUEST['data']['crop_y1'];
-
- $x2 = $_REQUEST['data']['crop_x2'];
- $y2 = $_REQUEST['data']['crop_y2'];
-
- $type = $this->getMime($logoFileName);
-
- //GD Crop
- $res = $this->cropImage($logoFile, $destFile, $x1, $y1, $x2, $y2, $type);
-
- //If dimensions don't conform then will scale it further
- $width = $x2 - $x1;
- $height = $y2 - $y1;
-
- if (($width > $this->maxLogoWidth) || ($height > $this->maxLogoHeight)) {
- $default->log->info('SCALING IMAGE AFTER CROP');
- $res = $this->scaleImage($destFile, $destFile, $this->maxLogoWidth, $this->maxLogoHeight, $type, false, false);
- }
-
- // ImageMagick Crop
- /*
- // do generation
- $pathConvert = (!empty($default->convertPath)) ? $default->convertPath : 'convert';
-
- // windows path may contain spaces
- if (stristr(PHP_OS,'WIN')) {
- $cmd = "\"{$pathConvert}\" \"{$logoFileName}" . $pageNumber . "\" -crop 313x50+110+110 \"$logoFileName\"";
- }
- else {
- $cmd = "{$pathConvert} {$logoFileName}" . $pageNumber . " -resize 313x50 $logoFileName";
- }
-
- $result = KTUtil::pexec($cmd);
- */
-
- $applyLogoForm = $this->getApplyLogoForm($destFileName);
- return $applyLogoForm->render();
-
- }
-
- /*
- * This method is used to determine if the image actually can be cropped
- * - Supported images are jpeg, png and gif
- *
- */
- public function isImageCroppable( $origFile, $width, $height, $type) {
- global $default;
-
- //Requires the GD library if not exit gracefully
- if (!extension_loaded('gd')) {
- $default->log->error("The GD library isn't loaded");
- return false;
- }
-
- switch($type) {
- case 'image/jpeg':
- $orig = imagecreatefromjpeg($origFile);
- break;
- case 'image/pjpeg':
- $orig = imagecreatefromjpeg($origFile);
- break;
- case 'image/png':
- $orig = imagecreatefrompng($origFile);
- break;
- case 'image/gif':
- $orig = imagecreatefromgif($origFile);
- break;
- default:
- //Handle Error
- $default->log->error("Tried to determine crop for an unsupported file type: $type");
- return false;
+ if ($imageHeight > $this->maxLogoHeight) {
+ $imageHeight = $this->maxLogoHeight;
}
- if($orig) {
- /*
- * calculate the size of the new image.
- */
+ // Adding the Image Crop Widget
+ $widgets[] = $oWF->get('ktcore.widgets.imagecrop', array(
+ 'label' => _kt('Crop Logo'),
+ //'name' => 'Logo',
+ 'value' => $logoFile,
+ 'init_width' => $imageWidth,
+ 'init_height' => $imageHeight,
+ 'description' => _kt('To crop an area of the logo, click and drag the resizable rectangle over the image.'),
+ ));
+
+ // Adding the Hidden FileName Input String
+ $widgets[] = $oWF->get('ktcore.widgets.hidden', array(
+ 'name' => 'logo_file_name',
+ 'value' => $logoFileName,
+ ));
+
+ // Adding the Hidden Coordinates X1
+ $widgets[] = $oWF->get('ktcore.widgets.hidden', array(
+ 'name' => 'crop_x1',
+ 'value' => 'x1test',
+ ));
+
+ // Adding the Hidden Coordinates Y1
+ $widgets[] = $oWF->get('ktcore.widgets.hidden', array(
+ 'name' => 'crop_y1',
+ 'value' => '',
+ ));
+
+ // Adding the Hidden Coordinates X2
+ $widgets[] = $oWF->get('ktcore.widgets.hidden', array(
+ 'name' => 'crop_x2',
+ 'value' => '',
+ ));
+
+ // Adding the Hidden Coordinates Y2
+ $widgets[] = $oWF->get('ktcore.widgets.hidden', array(
+ 'name' => 'crop_y2',
+ 'value' => '',
+ ));
+
+ $oForm->setWidgets($widgets);
+ $oForm->setValidators($validators);
+
+ return $oForm;
+ }
+
+ /**
+ * Returns the apply logo form
+ *
+ * This form will display a preview of the correctly sized logo and prompt the user to apply it.
+ *
+ * @return KTForm
+ *
+ */
+
+ function getApplyLogoForm($logoFileName = '') {
+ $this->oPage->setBreadcrumbDetails(_kt("Apply Logo"));
+
+ $oForm = new KTForm;
+ $oForm->setOptions(array(
+ 'identifier' => 'ktcore.folder.branding',
+ 'label' => _kt('Apply Logo'),
+ 'submit_label' => _kt('Apply'),
+ 'action' => 'apply',
+ 'fail_action' => 'main',
+ 'encoding' => 'multipart/form-data',
+ 'context' => &$this,
+ 'extraargs' => $this->meldPersistQuery("","",true),
+ 'description' => _kt('Applying the logo will activate it in the header making it visible to all who access this site.')
+ ));
+
+ $oWF =& KTWidgetFactory::getSingleton();
+
+ $widgets = array();
+ $validators = array();
+
+ $logoFileName = 'var'.DIRECTORY_SEPARATOR.'branding'.DIRECTORY_SEPARATOR.'logo'.DIRECTORY_SEPARATOR.$logoFileName;
+
+ // Adding the Image Widget
+ $widgets[] = $oWF->get('ktcore.widgets.image', array(
+ 'label' => _kt('Logo Preview'),
+ 'name' => $logoFileName, // title and alt attributes get set to this.
+ 'value' => $logoFileName,
+ 'width' => $this->maxLogoWidth,
+ 'height' => $this->maxLogoHeight,
+ 'widgetwidth' => 20
+ ));
+
+ // Adding the Hidden FileName Input String
+ $widgets[] = $oWF->get('ktcore.widgets.hidden', array(
+ 'name' => 'logo_file_name',
+ 'value' => $logoFileName,
+ ));
+
+ $oForm->setWidgets($widgets);
+ $oForm->setValidators($validators);
+
+ return $oForm;
+ }
+
+ /*
+ * Action responsible for uploading the logo
+ *
+ */
+
+ function do_upload(){
+ global $default;
+
+ $oForm = $this->getUploadLogoForm();
+ $res = $oForm->validate();
+ if (!empty($res['errors'])) {
+ return $oForm->handleError();
+ }
+
+ // Setting up the branding directory, logos will be stored in var/branding/
+ $brandDir = $default->varDirectory.DIRECTORY_SEPARATOR.'branding';
+
+ if (stristr(PHP_OS,'WIN')) {
+ $brandDir = str_replace('/', '\\', $brandDir);
+ }
+
+ //if branding dir does not exist, generate one and add an index file to block access
+ if (!file_exists($brandDir)) {
+ mkdir($brandDir, 0755);
+ touch($brandDir.DIRECTORY_SEPARATOR.'index.html');
+ file_put_contents($brandDir.DIRECTORY_SEPARATOR.'index.html', 'You do not have permission to access this directory.');
+ }
+
+ $logoDir = $brandDir.DIRECTORY_SEPARATOR."logo";
+ //if branding dir does not exist, generate one and add an index file to block access
+ if (!file_exists($logoDir)) {
+ mkdir($logoDir, 0755);
+ touch($logoDir.DIRECTORY_SEPARATOR.'index.html');
+ file_put_contents($logoDir.DIRECTORY_SEPARATOR.'index.html', 'You do not have permission to access this directory.');
+ }
+
+ $logoFileName = $_FILES['_kt_attempt_unique_file']['name'];
+
+ //Changing to logo.jpg (Need to preserve extention as GD requires the exact image type to work)
+ $ext = end(explode('.', $logoFileName));
+
+ $type = $_FILES['_kt_attempt_unique_file']['type'];
+
+ //Stage 1 filename based ext check:
+ if (!$this->isSupportedExtension($ext)) {
+ //If filename based extension isn't supported will try and guess based on mime type
+ $default->log->error("Stage 1: Unsupported file type: '".$type."' for file: ':".$_FILES['_kt_attempt_unique_file']['name']."'");
+ $ext = $this->getExtension($type);
+
+ if (!$this->isSupportedExtension($ext)) {
+ $default->log->error("Unsupported file type: '".$type."' for file: ':".$_FILES['_kt_attempt_unique_file']['name']."'");
+ $this->errorRedirectToMain("The file you tried to upload is not supported.");
+ }
+ }
+
+ $logoFileName = 'logo_tmp_'.md5(Date('ymd-hms')).'.'.$ext; //Fighting the browser cache here
+ $logoFile = $logoDir.DIRECTORY_SEPARATOR.$logoFileName;
+
+ // deleting old tmp file
+ if (file_exists($logoFile)) {
+ @unlink($logoFile);
+ }
+
+ //TODO: Test Upload Failure by setting the $logoFile to ''
+
+ if(!move_uploaded_file($_FILES['_kt_attempt_unique_file']['tmp_name'], $logoFile)) {
+ $default->log->error("Couldn't upload file from '".$_FILES['_kt_attempt_unique_file']['tmp_name']."' to '$logoFile'");
+ $this->errorRedirectToMain("Couldn't upload file");
+ exit(0);
+ }
+
+ $resizeMethod = $_REQUEST['data']['resize_method'];
+
+ $relDir = 'var'.DIRECTORY_SEPARATOR.'branding'.DIRECTORY_SEPARATOR.'logo'.DIRECTORY_SEPARATOR;
+
+ switch ($resizeMethod) {
+ case 'crop':
+
+ if ($this->isImageCroppable($logoFile, $this->maxLogoWith, $this->maxLogoHeight, $type)) {
+
+ $retForm = $this->getCropLogoForm($logoFileName);
+ } else {
+ $_SESSION['KTErrorMessage'][] = _kt("The image was too small to be cropped.");
+ $retForm = $this->getApplyLogoForm($logoFileName);
+ }
+
+ return $retForm->render();
+
+ case 'scale':
+
+ $logoFileNameStretched = 'logo_tmp_stretched_'.md5(Date('ymd-hms')).'.'.$ext; //Fighting the browser cache here
+ $logoFileStretched = $logoDir.DIRECTORY_SEPARATOR.$logoFileNameStretched;
+
+ $logoFileNameCropped = 'logo_tmp_cropped_'.md5(Date('ymd-hms')).'.'.$ext; //Fighting the browser cache here
+ $logoFileCropped = $logoDir.DIRECTORY_SEPARATOR.$logoFileNameCropped;
+
+ //Creating stretched image
+ $res = $this->scaleImage($logoFile, $logoFileStretched, $this->maxLogoWidth, $this->maxLogoHeight, $type, false, false);
+
+ //Creating top-left cropped image
+ $res = $this->scaleImage($logoFile, $logoFileCropped, $this->maxLogoWidth, $this->maxLogoHeight, $type, false, true);
+ $res = $this->cropImage($logoFileCropped, $logoFileCropped, 0, 0, $this->maxLogoWidth, $this->maxLogoHeight, $type);
+
+ $logoItem[] = $relDir.$logoFileNameStretched;
+ $logoItem[] = $relDir.$logoFileNameCropped;
+
+ $form = $this->getScaleLogoForm($logoItem);
+ return $form->render();
+
+ default:
+ $form = $this->getApplyLogoForm($logoFileName);
+ return $form->render();
+ }
+
+ }
+
+
+ /**
+ * Returns the MIME of the filename, deducted from its extension
+ * If the extension is unknown, returns "image/jpeg"
+ */
+ function getMime($filename)
+ {
+ $pos = strrpos($filename, '.');
+ $extension = "";
+ if ($pos !== false) {
+ $extension = strtolower(substr($filename, $pos+1));
+ }
+
+ switch($extension) {
+ case 'gif':
+ return 'image/gif';
+ case 'jfif':
+ return 'image/jpeg';
+ case 'jfif-tbnl':
+ return 'image/jpeg';
+ case 'png':
+ return 'image/png';
+ case 'jpe':
+ return 'image/jpeg';
+ case 'jpeg':
+ return 'image/jpeg';
+ case 'jpg':
+ return 'image/jpeg';
+ default:
+ return 'image/jpeg';
+ }
+ }
+
+
+ /**
+ * Returns the MIME of the filename, deducted from its extension
+ * If the extension is unknown, returns "image/jpeg"
+ */
+ function getExtension($type)
+ {
+
+ switch(strtolower($type)) {
+ case 'image/gif':
+ return 'gif';
+ case 'image/jpeg':
+ return 'jfif';
+ case 'image/jpeg':
+ return 'jfif-tbnl';
+ case 'image/png':
+ return 'png';
+ case 'image/jpeg':
+ return 'jpe';
+ case 'image/jpeg':
+ return 'jpeg';
+ case 'image/jpeg':
+ return 'jpg';
+ case 'image/pjpeg':
+ return 'jpg';
+ default:
+ return 'image/jpeg';
+ }
+ }
+
+
+ /**
+ * Returns TRUE of the extension is supported
+ */
+ function isSupportedExtension($extension)
+ {
+ if (in_array(strtolower($extension), $this->supportedTypes)) {
+ return TRUE;
+ }
+
+ return FALSE;
+ }
+
+
+ /*
+ * This method uses the GD library to scale an image.
+ * - Supported images are jpeg, png and gif
+ *
+ */
+ public function scaleImage( $origFile, $destFile, $width, $height, $type = 'image/jpeg', $scaleUp = false, $keepProportion = true) {
+ global $default;
+
+ //Requires the GD library if not exit gracefully
+ if (!extension_loaded('gd')) {
+ $default->log->error("The GD library isn't loaded");
+ return false;
+ }
+
+ switch($type) {
+ case 'image/jpeg':
+ $orig = imagecreatefromjpeg($origFile);
+ break;
+ case 'image/pjpeg':
+ $orig = imagecreatefromjpeg($origFile);
+ break;
+ case 'image/png':
+ $orig = imagecreatefrompng($origFile);
+ break;
+ case 'image/gif':
+ $orig = imagecreatefromgif($origFile);
+ break;
+ default:
+ //Handle Error
+ $default->log->error("Tried to scale an unsupported file type: $type");
+ return false;
+ }
+
+ if($orig) {
+ /*
+ * calculate the size of the new image.
+ */
+ $orig_x = imagesx($orig);
+ $orig_y = imagesy($orig);
+
+ if (($orig_x < $width) && ($orig_y < $height)) {
+ //Image Qualifies for Upscaling
+ //If we're not going to scale up then exit here.
+ if (!$scaleUp) {
+ return true;
+ }
+ }
+
+ $image_x = $width;
+ $image_y = $height;
+
+ //Constraining proportion
+ if ($keepProportion) {
+ $image_y = round(($orig_y * $image_x) / $orig_x); //Preserve proportion
+ }
+
+ /*
+ * create the new image, and scale the original into it.
+ */
+ $image = imagecreatetruecolor($image_x, $image_y);
+ imagecopyresampled($image, $orig, 0, 0, 0, 0, $image_x, $image_y, $orig_x, $orig_y);
+
+ switch($type) {
+ case 'image/jpeg':
+ imagejpeg($image, $destFile);
+ break;
+ case 'image/pjpeg':
+ imagejpeg($image, $destFile);
+ break;
+ case 'image/png':
+ imagepng($image, $destFile);
+ break;
+ case 'image/gif':
+ imagegif($image, $destFile);
+ break;
+ default:
+ //Handle Error
+ $default->log->error("Tried to scale an unsupported file type: $type");
+ return false;
+ }
+
+ } else {
+ //Handle Error
+ $default->log->error("Couldn't obtain a valid GD resource");
+ $default->log->error($sourceFile);
+ $default->log->error($destFile);
+ return false;
+ }
+
+ return true;
+ }
+
+
+ /*
+ * Action responsible for cropping the logo
+ *
+ */
+ function do_crop(){
+ global $default;
+
+ $logoFileName = $_REQUEST['data']['logo_file_name'];
+ $logoFile = 'var'.DIRECTORY_SEPARATOR.'branding'.DIRECTORY_SEPARATOR.'logo'.DIRECTORY_SEPARATOR.$logoFileName;
+
+ $ext = end(explode('.', $logoFileName));
+ $destFileName = 'logo_tmp_'.md5(Date('ymd-hms')).'.'.$ext;
+ $destFile = 'var'.DIRECTORY_SEPARATOR.'branding'.DIRECTORY_SEPARATOR.'logo'.DIRECTORY_SEPARATOR.$destFileName;
+
+ $x1 = $_REQUEST['data']['crop_x1'];
+ $y1 = $_REQUEST['data']['crop_y1'];
+
+ $x2 = $_REQUEST['data']['crop_x2'];
+ $y2 = $_REQUEST['data']['crop_y2'];
+
+ $type = $this->getMime($logoFileName);
+
+ //GD Crop
+ $res = $this->cropImage($logoFile, $destFile, $x1, $y1, $x2, $y2, $type);
+
+ //If dimensions don't conform then will scale it further
+ $width = $x2 - $x1;
+ $height = $y2 - $y1;
+
+ if (($width > $this->maxLogoWidth) || ($height > $this->maxLogoHeight)) {
+ $default->log->info('SCALING IMAGE AFTER CROP');
+ $res = $this->scaleImage($destFile, $destFile, $this->maxLogoWidth, $this->maxLogoHeight, $type, false, false);
+ }
+
+ // ImageMagick Crop
+ /*
+ // do generation
+ $pathConvert = (!empty($default->convertPath)) ? $default->convertPath : 'convert';
+
+ // windows path may contain spaces
+ if (stristr(PHP_OS,'WIN')) {
+ $cmd = "\"{$pathConvert}\" \"{$logoFileName}" . $pageNumber . "\" -crop 313x50+110+110 \"$logoFileName\"";
+ }
+ else {
+ $cmd = "{$pathConvert} {$logoFileName}" . $pageNumber . " -resize 313x50 $logoFileName";
+ }
+
+ $result = KTUtil::pexec($cmd);
+ */
+
+ $applyLogoForm = $this->getApplyLogoForm($destFileName);
+ return $applyLogoForm->render();
+
+ }
+
+ /*
+ * This method is used to determine if the image actually can be cropped
+ * - Supported images are jpeg, png and gif
+ *
+ */
+ public function isImageCroppable( $origFile, $width, $height, $type) {
+ global $default;
+
+ //Requires the GD library if not exit gracefully
+ if (!extension_loaded('gd')) {
+ $default->log->error("The GD library isn't loaded");
+ return false;
+ }
+
+ switch($type) {
+ case 'image/jpeg':
+ $orig = imagecreatefromjpeg($origFile);
+ break;
+ case 'image/pjpeg':
+ $orig = imagecreatefromjpeg($origFile);
+ break;
+ case 'image/png':
+ $orig = imagecreatefrompng($origFile);
+ break;
+ case 'image/gif':
+ $orig = imagecreatefromgif($origFile);
+ break;
+ default:
+ //Handle Error
+ $default->log->error("Tried to determine crop for an unsupported file type: $type");
+ return false;
+ }
+
+ if($orig) {
+ /*
+ * calculate the size of the new image.
+ */
+ $orig_x = imagesx($orig);
+ $orig_y = imagesy($orig);
+
+ if (($orig_x > $width) || ($orig_y > $height)) {
+ return true;
+ }
+
+ } else {
+ //Handle Error
+ $default->log->error("Couldn't obtain a valid GD resource $origFile");
+ return false;
+ }
+
+ return true;
+ }
+
+
+ /*
+ * This method uses GD library to return the image width
+ * - Supported images are jpeg, png and gif
*
+ */
+ public function getImageWidth( $origFile, $type) {
+ global $default;
+
+ //Requires the GD library if not exit gracefully
+ if (!extension_loaded('gd')) {
+ $default->log->error("The GD library isn't loaded");
+ return false;
+ }
+
+ switch($type) {
+ case 'image/jpeg':
+ $orig = imagecreatefromjpeg($origFile);
+ break;
+ case 'image/pjpeg':
+ $orig = imagecreatefromjpeg($origFile);
+ break;
+ case 'image/png':
+ $orig = imagecreatefrompng($origFile);
+ break;
+ case 'image/gif':
+ $orig = imagecreatefromgif($origFile);
+ break;
+ default:
+ //Handle Error
+ $default->log->error("Tried to determine crop for an unsupported file type: $type");
+ return false;
+ }
+
+ if($orig) {
+ /*
+ * calculate the size of the new image.
*/
+
$orig_x = imagesx($orig);
+ return $orig_x;
+
+ } else {
+ //Handle Error
+ $default->log->error("Couldn't obtain a valid GD resource $origFile");
+ return false;
+ }
+
+ return false;
+ }
+
+
+ /*
+ * This method uses GD library to return the image height
+ * - Supported images are jpeg, png and gif
*
+ */
+ public function getImageHeight( $origFile, $type) {
+ global $default;
+
+ //Requires the GD library if not exit gracefully
+ if (!extension_loaded('gd')) {
+ $default->log->error("The GD library isn't loaded");
+ return false;
+ }
+
+ switch($type) {
+ case 'image/jpeg':
+ $orig = imagecreatefromjpeg($origFile);
+ break;
+ case 'image/pjpeg':
+ $orig = imagecreatefromjpeg($origFile);
+ break;
+ case 'image/png':
+ $orig = imagecreatefrompng($origFile);
+ break;
+ case 'image/gif':
+ $orig = imagecreatefromgif($origFile);
+ break;
+ default:
+ //Handle Error
+ $default->log->error("Tried to determine crop for an unsupported file type: $type");
+ return false;
+ }
+
+ if($orig) {
+ /*
+ * calculate the size of the new image.
*/
+
$orig_y = imagesy($orig);
-
- $default->log->info("ORIG_X : $orig_x");
- $default->log->info("ORIG_Y : $orig_y");
-
- if (($orig_x > $width) || ($orig_y > $height)) {
- return true;
- }
-
- } else {
- //Handle Error
- $default->log->error("Couldn't obtain a valid GD resource $origFile");
- return false;
- }
-
- return true;
- }
-
-
- /*
- * This method uses the GD library to crop an image.
- * - Supported images are jpeg, png and gif
- *
- */
- public function cropImage( $origFile, $destFile, $x1, $y1, $x2, $y2, $type = 'image/jpeg', $scaleUp = true) {
- global $default;
-
- $width = $x2 - $x1;
- $height = $y2 - $y1;
-
- //Requires the GD library if not exit gracefully
- if (!extension_loaded('gd')) {
- $default->log->error("The GD library isn't loaded");
- return false;
- }
-
- switch($type) {
- case 'image/jpeg':
- $orig = imagecreatefromjpeg($origFile);
- break;
- case 'image/pjpeg':
- $orig = imagecreatefromjpeg($origFile);
- break;
- case 'image/png':
- $orig = imagecreatefrompng($origFile);
- break;
- case 'image/gif':
- $orig = imagecreatefromgif($origFile);
- break;
- default:
- //Handle Error
- $default->log->error("Tried to crop an unsupported file type: $type");
- return false;
- }
-
- if($orig) {
- /*
- * create the new image, and crop it.
- */
- $image = imagecreatetruecolor($width, $height);
- //imagecopyresampled($image, $orig, 0, 0, 0, 0, $image_x, $image_y, $orig_x, $orig_y);
-
- // Generate the cropped image
- imagecopyresampled($image, $orig, 0, 0, $x1, $y1, $width, $height, $width, $height);
- //imagecopyresized($canvas, $piece, 0,0, $cropLeft, $cropHeight,$newwidth, $newheight, $width, $height);
-
- switch($type) {
- case 'image/jpeg':
- imagejpeg($image, $destFile);
- break;
- case 'image/pjpeg':
- imagejpeg($image, $destFile);
- break;
- case 'image/png':
- imagepng($image, $destFile);
- break;
- case 'image/gif':
- imagegif($image, $destFile);
- break;
- default:
- //Handle Error
- $default->log->error("Tried to crop an unsupported file type: $type");
- return false;
- }
-
-
- } else {
- //Handle Error
- $default->log->error("Couldn't obtain a valid GD resource $sourceFile $destFile");
- return false;
- }
-
- return true;
- }
-
-
- /*
- * Action responsible for selecting the logo after it has been scaled.
- *
- */
- function do_selectLogo(){
- global $default;
-
- $tmpLogoFileName = end(explode(DIRECTORY_SEPARATOR, $_REQUEST['kt_imageselect']));
-
- $form = $this->getApplyLogoForm($tmpLogoFileName);
- return $form->render();
-
- }
-
-
-
- /*
- * Action responsible for applying the logo
- *
- */
- function do_apply(){
- global $default;
-
- $rootPath = $default->varDirectory . '/';
-
- $tmpLogoFileName = $_REQUEST['data']['logo_file_name'];
- $tmpLogoFileName = end(explode(DIRECTORY_SEPARATOR, $tmpLogoFileName));
- $tmpLogoFile = $default->varDirectory.DIRECTORY_SEPARATOR.'branding'.DIRECTORY_SEPARATOR.'logo'.DIRECTORY_SEPARATOR.$tmpLogoFileName;
-
- $ext = end(explode('.', $tmpLogoFileName));
- $logoFileName = 'logo_'.md5(Date('ymd-hms')).'.'.$ext;
- $logoFile = $default->varDirectory.DIRECTORY_SEPARATOR.'branding'.DIRECTORY_SEPARATOR.'logo'.DIRECTORY_SEPARATOR.$logoFileName;
-
- $logoFileRel = end(explode(DIRECTORY_SEPARATOR, $default->varDirectory)).DIRECTORY_SEPARATOR.'branding'.DIRECTORY_SEPARATOR.'logo'.DIRECTORY_SEPARATOR.$logoFileName;
-
- // Applying the new logo
- if(!@copy($tmpLogoFile, $logoFile)){
- $default->log->info("Couldn't copy logo ".$tmpLogoFile." to ".$logoFile);
- } else {
- //Cleaning stale files
- $brandDir = $default->varDirectory.DIRECTORY_SEPARATOR.'branding'.DIRECTORY_SEPARATOR.'logo'.DIRECTORY_SEPARATOR;
- $handle = opendir($brandDir);
- while (false !== ($file = readdir($handle))) {
- if (!is_dir($file) && $file != $tmpLogoFileName && $file != $logoFileName) {
- if (!@unlink($brandDir.$file)) {
- $default->log->error("Couldn't delete '".$brandDir.$file."'");
- } else {
- $default->log->error("Cleaning Brand Logo Dir: Deleted '".$brandDir.$file."'");
- }
- }
- }
- }
-
- //
- // Updating Config Settings with the new Logo Location
- //
-
- $sql = "SELECT id from config_settings WHERE item = 'companyLogo'";
- $companyLogoId = DBUtil::getOneResultKey($sql,'id');
- if (PEAR::isError($companyLogoId))
- {
- if (PEAR::isError($res)) {
- $default->log->error(sprintf(_kt("Failed to apply logo: %s"), $res->getMessage()));
- $this->errorRedirectToMain(sprintf(_kt("Failed to apply logo: %s"), $res->getMessage()));
- exit();
- }
- }
-
- $res = DBUtil::autoUpdate('config_settings', array('value' => $logoFileRel), $companyLogoId);
- if (PEAR::isError($res)) {
- $default->log->error(sprintf(_kt("Failed to apply logo: %s"), $res->getMessage()));
- $this->errorRedirectToMain(sprintf(_kt("Failed to apply logo: %s"), $res->getMessage()));
- exit();
- }
-
- // Clear the cached settings
- $oKTConfig = new KTConfig();
- $oKTConfig->clearCache();
-
- $this->successRedirectTo('', _kt("Logo succesfully applied."));
- }
-
-}
-
-?>
+ return $orig_y;
+
+ } else {
+ //Handle Error
+ $default->log->error("Couldn't obtain a valid GD resource $origFile");
+ return false;
+ }
+
+ return false;
+ }
+
+
+ /*
+ * This method uses the GD library to crop an image.
+ * - Supported images are jpeg, png and gif
+ *
+ */
+ public function cropImage( $origFile, $destFile, $x1, $y1, $x2, $y2, $type = 'image/jpeg', $scaleUp = true) {
+ global $default;
+
+ $width = $x2 - $x1;
+ $height = $y2 - $y1;
+
+ //Requires the GD library if not exit gracefully
+ if (!extension_loaded('gd')) {
+ $default->log->error("The GD library isn't loaded");
+ return false;
+ }
+
+ switch($type) {
+ case 'image/jpeg':
+ $orig = imagecreatefromjpeg($origFile);
+ break;
+ case 'image/pjpeg':
+ $orig = imagecreatefromjpeg($origFile);
+ break;
+ case 'image/png':
+ $orig = imagecreatefrompng($origFile);
+ break;
+ case 'image/gif':
+ $orig = imagecreatefromgif($origFile);
+ break;
+ default:
+ //Handle Error
+ $default->log->error("Tried to crop an unsupported file type: $type");
+ return false;
+ }
+
+ if($orig) {
+ /*
+ * create the new image, and crop it.
+ */
+ $image = imagecreatetruecolor($width, $height);
+ //imagecopyresampled($image, $orig, 0, 0, 0, 0, $image_x, $image_y, $orig_x, $orig_y);
+
+ // Generate the cropped image
+ imagecopyresampled($image, $orig, 0, 0, $x1, $y1, $width, $height, $width, $height);
+ //imagecopyresized($canvas, $piece, 0,0, $cropLeft, $cropHeight,$newwidth, $newheight, $width, $height);
+
+ switch($type) {
+ case 'image/jpeg':
+ imagejpeg($image, $destFile);
+ break;
+ case 'image/pjpeg':
+ imagejpeg($image, $destFile);
+ break;
+ case 'image/png':
+ imagepng($image, $destFile);
+ break;
+ case 'image/gif':
+ imagegif($image, $destFile);
+ break;
+ default:
+ //Handle Error
+ $default->log->error("Tried to crop an unsupported file type: $type");
+ return false;
+ }
+
+
+ } else {
+ //Handle Error
+ $default->log->error("Couldn't obtain a valid GD resource $sourceFile $destFile");
+ return false;
+ }
+
+ return true;
+ }
+
+
+ /*
+ * Action responsible for selecting the logo after it has been scaled.
+ *
+ */
+ function do_selectLogo(){
+ global $default;
+
+ $tmpLogoFileName = end(explode(DIRECTORY_SEPARATOR, $_REQUEST['kt_imageselect']));
+
+ $form = $this->getApplyLogoForm($tmpLogoFileName);
+ return $form->render();
+
+ }
+
+
+
+ /*
+ * Action responsible for applying the logo
+ *
+ */
+ function do_apply(){
+ global $default;
+
+ $rootPath = $default->varDirectory . '/';
+
+ $tmpLogoFileName = $_REQUEST['data']['logo_file_name'];
+ $tmpLogoFileName = end(explode(DIRECTORY_SEPARATOR, $tmpLogoFileName));
+ $tmpLogoFile = $default->varDirectory.DIRECTORY_SEPARATOR.'branding'.DIRECTORY_SEPARATOR.'logo'.DIRECTORY_SEPARATOR.$tmpLogoFileName;
+
+ $ext = end(explode('.', $tmpLogoFileName));
+ $logoFileName = 'logo_'.md5(Date('ymd-hms')).'.'.$ext;
+ $logoFile = $default->varDirectory.DIRECTORY_SEPARATOR.'branding'.DIRECTORY_SEPARATOR.'logo'.DIRECTORY_SEPARATOR.$logoFileName;
+
+ $logoFileRel = end(explode(DIRECTORY_SEPARATOR, $default->varDirectory)).DIRECTORY_SEPARATOR.'branding'.DIRECTORY_SEPARATOR.'logo'.DIRECTORY_SEPARATOR.$logoFileName;
+
+ // Applying the new logo
+ if(!@copy($tmpLogoFile, $logoFile)){
+ $default->log->info("Couldn't copy logo ".$tmpLogoFile." to ".$logoFile);
+ } else {
+ //Cleaning stale files
+ $brandDir = $default->varDirectory.DIRECTORY_SEPARATOR.'branding'.DIRECTORY_SEPARATOR.'logo'.DIRECTORY_SEPARATOR;
+ $handle = opendir($brandDir);
+ while (false !== ($file = readdir($handle))) {
+ if (!is_dir($file) && $file != $tmpLogoFileName && $file != $logoFileName) {
+ if (!@unlink($brandDir.$file)) {
+ $default->log->error("Couldn't delete '".$brandDir.$file."'");
+ } else {
+ $default->log->error("Cleaning Brand Logo Dir: Deleted '".$brandDir.$file."'");
+ }
+ }
+ }
+ }
+
+ //
+ // Updating Config Settings with the new Logo Location
+ //
+
+ $sql = "SELECT id from config_settings WHERE item = 'companyLogo'";
+ $companyLogoId = DBUtil::getOneResultKey($sql,'id');
+ if (PEAR::isError($companyLogoId))
+ {
+ if (PEAR::isError($res)) {
+ $default->log->error(sprintf(_kt("Failed to apply logo: %s"), $res->getMessage()));
+ $this->errorRedirectToMain(sprintf(_kt("Failed to apply logo: %s"), $res->getMessage()));
+ exit();
+ }
+ }
+
+ $res = DBUtil::autoUpdate('config_settings', array('value' => $logoFileRel), $companyLogoId);
+ if (PEAR::isError($res)) {
+ $default->log->error(sprintf(_kt("Failed to apply logo: %s"), $res->getMessage()));
+ $this->errorRedirectToMain(sprintf(_kt("Failed to apply logo: %s"), $res->getMessage()));
+ exit();
+ }
+
+ // Clear the cached settings
+ $oKTConfig = new KTConfig();
+ $oKTConfig->clearCache();
+
+ $this->successRedirectTo('', _kt("Logo succesfully applied."));
+ }
+
+}
+
+?>
diff --git a/templates/ktcore/forms/widgets/imagecrop.smarty b/templates/ktcore/forms/widgets/imagecrop.smarty
index 2549474..bb18025 100755
--- a/templates/ktcore/forms/widgets/imagecrop.smarty
+++ b/templates/ktcore/forms/widgets/imagecrop.smarty
@@ -1 +1,26 @@
-
+
+{$options.init_width}
+{$options.init_height}
+