mirror of
https://github.com/Ekokumppanit/ystavakylaecard.git
synced 2026-01-26 03:04:00 +00:00
478 lines
15 KiB
PHP
478 lines
15 KiB
PHP
<?php
|
|
|
|
/**
|
|
* lnk helps return anchor tag with class when current_url() is site_url($match)
|
|
*
|
|
* @param string $url Your link inside the application, not for outside links
|
|
* @param string $text Link text
|
|
* @param string $baseclass What classes should be included
|
|
* @param string $match What url to match against, use like $url
|
|
* @param string $class What class should be added if urls match
|
|
*
|
|
* @author Ismo Vuorinen <ismo.vuorinen@tampere.fi>
|
|
*
|
|
* @return string Formatted anchor tag with everything needed
|
|
*/
|
|
function lnk($url = null, $text = null, $baseclass = '', $match = null, $class = ' active')
|
|
{
|
|
// $url should be "controller/action", no need to give full url
|
|
$url = site_url($url);
|
|
|
|
// Test matching, are we on the page we want to match against?
|
|
if (empty($match)) {
|
|
$match = current_url();
|
|
} else {
|
|
$match = site_url($match);
|
|
}
|
|
|
|
// Return correctly formatted link
|
|
if ($url == $match) {
|
|
return '<a class="' . $baseclass . $class . '" href="' . $url . '">' . $text . '</a>';
|
|
} else {
|
|
if (! empty($baseclass)) {
|
|
$baseclass = 'class="' . $baseclass . '" ';
|
|
}
|
|
return '<a ' . $baseclass . 'href="'. $url .'">' . $text . '</a>';
|
|
}
|
|
}
|
|
|
|
function checkboxed(
|
|
$name,
|
|
$data,
|
|
$value,
|
|
$label,
|
|
$data_id = null,
|
|
$disabled = false,
|
|
$disabletext = null
|
|
) {
|
|
$fieldname = null;
|
|
$labelname = null;
|
|
$string = null;
|
|
|
|
$fieldname = 'data['.$data_id.']['.$name.']';
|
|
$labelname = $fieldname .'['. $data .']';
|
|
|
|
$string = '<input type="radio" '
|
|
. 'name="' . $fieldname .'" '
|
|
. 'id="' . $labelname . '" '
|
|
. 'value="'. $value.'"';
|
|
|
|
if ($data == $value) {
|
|
$string .= ' checked';
|
|
}
|
|
|
|
if (empty($disabletext)) {
|
|
$disabletext = 'Ei voida julkaista lähettäjän päätöksestä';
|
|
}
|
|
|
|
if ($disabled) {
|
|
$string .= ' disabled';
|
|
$label = '<span data-tooltip class="has-tip tip-top" '
|
|
. 'data-width="180" title="' . $disabletext . '">' . $label . '</span>';
|
|
}
|
|
|
|
$string .= '>';
|
|
|
|
if (!empty($label)) {
|
|
$string = '<label>' . $string . $label . '</label>';
|
|
}
|
|
|
|
return $string;
|
|
}
|
|
|
|
/*
|
|
* imagettftextblur v1.0.0
|
|
*
|
|
* Copyright (c) 2013 Andrew G. Johnson <andrew@andrewgjohnson.com>
|
|
* Permission is hereby granted, free of charge, to any person obtaining
|
|
* a copy of this software and associated documentation files (the "Software"),
|
|
* to deal in the Software without restriction, including without limitation
|
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
* and/or sell copies of the Software, and to permit persons to whom the
|
|
* Software is furnished to do so, subject to the following conditions:
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
|
|
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
*
|
|
* @author Andrew G. Johnson <andrew@andrewgjohnson.com>
|
|
* @copyright Copyright (c) 2013 Andrew G. Johnson <andrew@andrewgjohnson.com>
|
|
* @link http://github.com/andrewgjohnson/imagettftextblur
|
|
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
|
|
* @version 1.0.0
|
|
* @package imagettftextblur
|
|
*
|
|
*/
|
|
if (!function_exists('imagettftextblur')) {
|
|
|
|
/**
|
|
* imagettftextblur
|
|
*
|
|
* @author Andrew G. Johnson <andrew@andrewgjohnson.com>
|
|
* @link http://github.com/andrewgjohnson/imagettftextblur
|
|
*
|
|
* @param resource $image Image resource
|
|
* @param integer $size Font size
|
|
* @param integer $angle Text angle
|
|
* @param integer $x First letter x cordinate
|
|
* @param integer $y First letter baseline y cordinate
|
|
* @param integer $color Color index
|
|
* @param string $fontfile Path to font file (.ttf)
|
|
* @param string $text Text on image
|
|
* @param integer $blur_intensity Blur intensity, more the blurrier
|
|
* @return [type] [description]
|
|
*/
|
|
function imagettftextblur(
|
|
&$image,
|
|
$size,
|
|
$angle,
|
|
$x,
|
|
$y,
|
|
$color,
|
|
$fontfile,
|
|
$text,
|
|
$blur_intensity = null
|
|
) {
|
|
$blur_intensity = !is_null($blur_intensity) && is_numeric($blur_intensity)
|
|
? (int)$blur_intensity : 0;
|
|
if ($blur_intensity > 0) {
|
|
$text_shadow_image = imagecreatetruecolor(
|
|
imagesx($image),
|
|
imagesy($image)
|
|
);
|
|
imagefill(
|
|
$text_shadow_image,
|
|
0,
|
|
0,
|
|
imagecolorallocate(
|
|
$text_shadow_image,
|
|
0x00,
|
|
0x00,
|
|
0x00
|
|
)
|
|
);
|
|
imagettftext(
|
|
$text_shadow_image,
|
|
$size,
|
|
$angle,
|
|
$x,
|
|
$y,
|
|
imagecolorallocate(
|
|
$text_shadow_image,
|
|
0xFF,
|
|
0xFF,
|
|
0xFF
|
|
),
|
|
$fontfile,
|
|
$text
|
|
);
|
|
for ($blur = 1; $blur <= $blur_intensity; $blur++) {
|
|
imagefilter($text_shadow_image, IMG_FILTER_GAUSSIAN_BLUR);
|
|
}
|
|
for ($x_offset = 0; $x_offset < imagesx($text_shadow_image); $x_offset++) {
|
|
for ($y_offset = 0; $y_offset < imagesy($text_shadow_image); $y_offset++) {
|
|
$visibility = (imagecolorat($text_shadow_image, $x_offset, $y_offset) & 0xFF) / 255;
|
|
if ($visibility > 0) {
|
|
imagesetpixel(
|
|
$image,
|
|
$x_offset,
|
|
$y_offset,
|
|
imagecolorallocatealpha(
|
|
$image,
|
|
($color >> 16) & 0xFF,
|
|
($color >> 8) & 0xFF,
|
|
$color & 0xFF,
|
|
(1 - $visibility) * 127
|
|
)
|
|
);
|
|
}
|
|
|
|
}
|
|
}
|
|
imagedestroy($text_shadow_image);
|
|
} else {
|
|
return imagettftext(
|
|
$image,
|
|
$size,
|
|
$angle,
|
|
$x,
|
|
$y,
|
|
$color,
|
|
$fontfile,
|
|
$text
|
|
);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
function fetchBaseCards($from = null)
|
|
{
|
|
if (empty($from)) {
|
|
$from = APPPATH . '../assets/basecards/';
|
|
}
|
|
$map = directory_map($from, 1);
|
|
|
|
if (! empty($map)) {
|
|
$images = array();
|
|
foreach ($map as $image) {
|
|
$images[] = site_url('assets/basecards/' . $image);
|
|
}
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
return $images;
|
|
}
|
|
|
|
function footerAssets()
|
|
{
|
|
$assets = array(
|
|
'jquery.min.js',
|
|
'custom.modernizr.min.js', // Foundation flavored Modernizr
|
|
'foundation.min.js', // Foundation 1.4.1
|
|
'image-picker.min.js', // Image Picker 0.1.4
|
|
'jquery.validate.min.js', // jQuery Validation Plugin 1.11.1
|
|
'additional-methods.min.js',// jQuery Validation Methods
|
|
'messages_fi.js', // jQuery Validation Plugin Finnish translation
|
|
'jquery-ui.min.js', // jQuery UI 1.10.3
|
|
'scripts.js' // Our scripts
|
|
);
|
|
|
|
if (ENVIRONMENT == 'development') {
|
|
$assets[] = 'dev.js';
|
|
}
|
|
|
|
return $assets;
|
|
}
|
|
|
|
function calculateTextBox($text = '', $fontFile = null, $fontSize = null, $fontAngle = 0)
|
|
{
|
|
/************
|
|
simple function that calculates the *exact* bounding box (single pixel precision).
|
|
The function returns an associative array with these keys:
|
|
left, top: coordinates you will pass to imagettftext
|
|
width, height: dimension of the image you have to create
|
|
*************/
|
|
$rect = imagettfbbox($fontSize, $fontAngle, $fontFile, $text);
|
|
$minX = min(array($rect[0], $rect[2], $rect[4], $rect[6]));
|
|
$maxX = max(array($rect[0], $rect[2], $rect[4], $rect[6]));
|
|
$minY = min(array($rect[1], $rect[3], $rect[5], $rect[7]));
|
|
$maxY = max(array($rect[1], $rect[3], $rect[5], $rect[7]));
|
|
|
|
return array(
|
|
"left" => abs($minX) - 1,
|
|
"top" => abs($minY) - 1,
|
|
"width" => $maxX - $minX,
|
|
"height" => $maxY - $minY,
|
|
"box" => $rect
|
|
);
|
|
}
|
|
|
|
function cardSizeRatio($full_w = 0, $full_h = 0, $prev_w = 0, $prev_h = 0)
|
|
{
|
|
$ratio_w = ($full_w/$prev_w);
|
|
$ratio_h = ($full_h/$prev_h);
|
|
|
|
$results = array(
|
|
'w' => $ratio_w,
|
|
'h' => $ratio_h
|
|
);
|
|
|
|
return $results;
|
|
}
|
|
|
|
function parseImageOptions($post)
|
|
{
|
|
/*
|
|
$cardPath = null,
|
|
$cardHead = null,
|
|
$cardText = null,
|
|
$cardHeadPlace = array(),
|
|
$cardTextPlace = array(),
|
|
$cardHeadSize = array(),
|
|
$cardTextSize = 0
|
|
*/
|
|
|
|
/*
|
|
sender_name=Ismo
|
|
sender_email=ismo%40ma.com
|
|
receiver_name=ismo
|
|
receiver_email=ismo%40me.com
|
|
message_title=Moikka+täältä
|
|
message_text=aöslkdjföalkjsdfölakjsdföljk
|
|
sizeOf_message_text_w=381
|
|
sizeOf_message_text_h=18
|
|
sizeOf_message_title_w=381
|
|
sizeOf_message_title_h=30
|
|
placeOf_message_text_y=72
|
|
placeOf_message_text_x=10
|
|
placeOf_message_title_y=20
|
|
placeOf_message_title_x=10
|
|
participate=yes
|
|
publiccard=yes
|
|
submit=Lähetä+eKorttisi%21
|
|
submit=Lähetä+eKorttisi%21
|
|
*/
|
|
|
|
$message_title = (empty($post['message_title'])) ? '' : $post['message_title'];
|
|
$message_text = (empty($post['message_text'])) ? '' : $post['message_text'];
|
|
|
|
$image_url = str_replace("-:-", "/", $post['select_image']);
|
|
|
|
$card = str_replace(site_url(), FCPATH, $image_url);
|
|
|
|
$headerTextFix = -3;
|
|
//$headerTextFix = 40*(72/96); // 72dpi -> 96dpi, + 5 padding
|
|
$messageTextFix = 28*(72/96) +3; // 72dpi -> 96dpi, + 5 padding
|
|
|
|
$opts = array(
|
|
'cardPath' => $card,
|
|
'cardHead' => $message_title,
|
|
'cardText' => $message_text,
|
|
'cardHeadPlace' => array(
|
|
'x' => $post['placeOf_message_title_x'] + 3,
|
|
'y' => $post['placeOf_message_title_y'] + $headerTextFix //20
|
|
),
|
|
'cardTextPlace' => array(
|
|
'x' => $post['placeOf_message_text_x'] + 3,
|
|
'y' => $post['placeOf_message_text_y'] + $messageTextFix //40
|
|
),
|
|
'cardHeadSize' => array(
|
|
'w' => $post['sizeOf_message_title_w'],
|
|
'h' => $post['sizeOf_message_title_h']
|
|
),
|
|
'cardTextSize' => array(
|
|
'w' => $post['sizeOf_message_text_w'],
|
|
'h' => $post['sizeOf_message_text_h']
|
|
),
|
|
'cardSize' => array(
|
|
'w' => $post['sizeOf_image_w'],
|
|
'h' => $post['sizeOf_image_h']
|
|
)
|
|
);
|
|
|
|
return $opts;
|
|
}
|
|
|
|
function parseCardEntryValues($post)
|
|
{
|
|
if (empty($post)) {
|
|
return false;
|
|
}
|
|
/*
|
|
sender_name=Ismo
|
|
sender_email=ismo%40ma.com
|
|
receiver_name=ismo
|
|
receiver_email=ismo%40me.com
|
|
message_title=Moikka+täältä
|
|
message_text=aöslkdjföalkjsdfölakjsdföljk
|
|
sizeOf_message_text_w=381
|
|
sizeOf_message_text_h=18
|
|
sizeOf_message_title_w=381
|
|
sizeOf_message_title_h=30
|
|
placeOf_message_text_y=72
|
|
placeOf_message_text_x=10
|
|
placeOf_message_title_y=20
|
|
placeOf_message_title_x=10
|
|
participate=yes
|
|
publiccard=yes
|
|
submit=Lähetä+eKorttisi%21
|
|
submit=Lähetä+eKorttisi%21
|
|
*/
|
|
unset($post['submit']);
|
|
|
|
$card = str_replace(site_url(), FCPATH, $post['select_image']);
|
|
|
|
if ($post['publiccard'] == 'yes') {
|
|
$private = 'no';
|
|
} else {
|
|
$private = 'yes';
|
|
}
|
|
|
|
if ($post['participate'] == 'yes') {
|
|
$participate = 'yes';
|
|
} else {
|
|
$participate = 'no';
|
|
}
|
|
|
|
$hash = md5(
|
|
$post['sender_name'] .
|
|
$post['sender_email'] .
|
|
$post['message_title'] .
|
|
$post['message_text']
|
|
);
|
|
|
|
$values = array(
|
|
// Sender and receiver details
|
|
'uploader_name' => $post['sender_name'],
|
|
'uploader_email' => $post['sender_email'],
|
|
'receiver_name' => $post['receiver_name'],
|
|
'receiver_email' => $post['receiver_email'],
|
|
// The message on card
|
|
'message_title' => $post['message_title'],
|
|
'message_content' => $post['message_text'],
|
|
// Card and message placement details
|
|
'base_card' => $card,
|
|
'sizeof_message_title_w' => $post['sizeOf_message_title_w'],
|
|
'sizeof_message_title_h' => $post['sizeOf_message_title_h'],
|
|
'sizeof_message_text_w' => $post['sizeOf_message_text_w'],
|
|
'sizeof_message_text_h' => $post['sizeOf_message_text_h'],
|
|
'placeof_message_title_x' => $post['placeOf_message_title_x'],
|
|
'placeof_message_title_y' => $post['placeOf_message_title_y'] + 30 + 5,
|
|
'placeof_message_text_x' => $post['placeOf_message_text_x'],
|
|
'placeof_message_text_y' => $post['placeOf_message_text_y'] + 32 + 25,
|
|
'participate' => $participate,
|
|
'private' => $private,
|
|
'card_status' => 'queue',
|
|
'hash' => $hash
|
|
);
|
|
|
|
return $values;
|
|
}
|
|
|
|
/**
|
|
* debug
|
|
* handy little debugging commaind
|
|
*
|
|
* @param mixed $thing What you want to see
|
|
* @param boolean $show Should it be visible on page or only on source code
|
|
*
|
|
* @author Ismo Vuorinen <ismo.vuorinen@rotor.fi>
|
|
* @package Default
|
|
*
|
|
* @return true Script prints debugged thing, returns true always.
|
|
*/
|
|
function debug($thing = null, $show = false)
|
|
{
|
|
if (ENVIRONMENT != "development") {
|
|
return false;
|
|
}
|
|
|
|
// What triggered this?
|
|
$caller = array_shift(debug_backtrace());
|
|
$from = str_replace(dirname(BASEPATH), '', $caller['file'])
|
|
. '#' . $caller['line'];
|
|
unset($caller);
|
|
|
|
if ($show) {
|
|
$start = "\n<pre>";
|
|
$end = "\n</pre>\n";
|
|
} else {
|
|
$start = "\n<!--\n";
|
|
$end = "\n-->\n";
|
|
}
|
|
|
|
$debug = $start . $from . "\n" . print_r($thing, true) . $end;
|
|
|
|
echo $debug;
|
|
|
|
return true;
|
|
}
|
|
|