setQuery($query);
if($db->query()){
$results = $db->loadAssoc();
return $results;
} else {
return false;
}
}// End function: getSettings()
/**
* Returns the location of the gallery images folder e.x. /images/jlrotator
*
* @return String location of gallery image folder
*/
public function getGalleryImageFolder(){
return $gallery_image_folder;
} // End function: getGalleryImageFolder
/**
*
* @return unknown_type
*/
public function getRotatorImageDetails(){
$db =& JFactory::getDBO();
$query = "SELECT * FROM `#__jlrotator_images` ORDER BY `order` ASC";
$db->setQuery($query);
if($db->query()){
return $db->loadAssocList();
} else {
return false;
}
} // End function: getRotatorImageDetails
/**
*
* @param Int $image_w
* @param Int $image_h
* @param Int $rotation_speed
* @return Int '1' on full settings save, 2 on settings save (minus image width, height), 0 on fail
*/
public function saveRotatorSettings($image_w, $image_h, $rotation_speed){
$db =& JFactory::getDBO();
$return_status = 1;
// If there are images within the Rotator we must not update the width and heigh
if($this->getAmountImagesInGallery() >= 1){
$query = "UPDATE `#__jlrotator` SET `rotation_speed` = '$rotation_speed' WHERE `id` = '1'";
$return_status = 2;
} else {
$query = "UPDATE `#__jlrotator` SET `image_width` = '$image_w', `image_height` = '$image_h', `rotation_speed` = '$rotation_speed' WHERE `id` = '1'";
}
$db->setQuery($query);
if($db->query()){
return $return_status;
} else {
return 0;
}
} // End function: saveRotatorSettings
/**
* This method will look through file uploads, and error check the uplaods.
*
* @return String feedback String
*/
public function proccessImageUpload(){
$upload_dir = JPATH_BASE . $this->rotator_image_folder;
// possible PHP upload errors
$errors = array(1 => 'php.ini max file size exceeded',
2 => 'html form max file size exceeded',
3 => 'file upload was only partial',
4 => 'no file was attached');
$fieldname = 'file';
// check if any files were uploaded and if
// so store the active $_FILES array keys
$active_keys = array();
foreach($_FILES[$fieldname]['name'] as $key => $filename)
{
if(!empty($filename))
{
$active_keys[] = $key;
}
}
// Check that at least one file was uploaded
if(count($active_keys) == 0){
// Set error message
$message = 'Please select at least 1 image to upload';
// Redirect back
return $message;
}
$captured_errors = Array();
// Error checking
foreach($active_keys as $key)
{
$captured_errors[$key] = Array();
// Check for standard error messages
if($_FILES[$fieldname]['error'][$key] != 0){
// Set Error message
$captured_errors[$key][] = $errors[$_FILES[$fieldname]['error'][$key]];
//$_FILES[$fieldname]['tmp_name'][$key].': '.$errors[$_FILES[$fieldname]['error'][$key]], $uploadForm;
}
// check that the file we are working on really was an HTTP upload
if(!is_uploaded_file($_FILES[$fieldname]['tmp_name'][$key])){
// Set Error Message
$captured_errors[$key][] = 'File accessed was not an upload.';
}
// Run a check to make sure the upload is an image
$imagesizefailed = false;
if(!getimagesize($_FILES[$fieldname]['tmp_name'][$key])){
$imagesizefailed = true;
// Set Error Message
$captured_errors[$key][] = 'Upload was not an image.';
}
// Check to ensure that the image meets the dimensions set in the database
if(!$imagesizefailed){
$rotator_settings = $this->getSettings();
$settings_width = $rotator_settings['image_width'];
$settings_height = $rotator_settings['image_height'];
$image_properties = getimagesize($_FILES[$fieldname]['tmp_name'][$key]);
$image_width = $image_properties[0];
$image_height = $image_properties[1];
if( ( $image_width != $settings_width ) || ( $image_height != $settings_height ) ){
$captured_errors[$key][] = 'Image must be the same width and height as what is set in the image rotator settings.';
}
}
}
// make a unique filename for the uploaded file and check it is
// not taken... if it is keep trying until we find a vacant one
foreach($active_keys as $key)
{
// If image does not exist with original filename, use original filename.
// Otherwise create a unique modified filename.
if(!file_exists($upload_dir . $_FILES[$fieldname]['name'][$key])){
$uploadFilename[$key] = $upload_dir . $_FILES[$fieldname]['name'][$key];
} else {
$now = 1;
while(file_exists($uploadFilename[$key] = $upload_dir . $now . '-' . $_FILES[$fieldname]['name'][$key]))
{
$now++;
}
$_FILES[$fieldname]['name'][$key] = $now . '-' . $_FILES[$fieldname]['name'][$key];
}
}
// now let's move the file to its final and allocate it with the new filename
foreach($active_keys as $key)
{
// Attempt to move the image from its tmp location to the gallery folder
if(empty($captured_errors[$key])){
$uploaded = move_uploaded_file($_FILES[$fieldname]['tmp_name'][$key], $uploadFilename[$key]);
if(!$uploaded){
// Assign an error message
$captured_errors[$key][] = 'Error moving image from temporary storage to image rotator folder.';
}
}
}
// Create feedback message
$feedback = '';
foreach($active_keys as $key){
$image_name_full = $_FILES[$fieldname]['name'][$key];
$feedback .= 'Image Name: ' . $image_name_full . '
';
$feedback .= '
';
if(empty($captured_errors[$key])){
// Prepare image details for database (name, url, width, height, alt text)
$image_url = $uploadFilename[$key];
$image_alt = $_POST['image_' . ($key + 1) . '_alt'];
$image_properties = getimagesize($uploadFilename[$key]);
$image_width = $image_properties[0];
$image_height = $image_properties[1];
// There have been no errors copyinh image to gallery folder, we should now store the image
// data in the database.
$db_store_res = $this->storeImageInDB($image_name_full, $image_url, $image_width, $image_height, $image_alt);
if($db_store_res){
$feedback .= '- Image was successfully added to the image rotator.
';
} else {
$feedback .= '- Image was successfully transferred, but image details were not successfully stored in database.
';
}
} else {
foreach($captured_errors[$key] as $error_message){
$feedback .= '- ' . $error_message . '
';
}
}
$feedback .= '
';
}
return $feedback;
} // End function: proccessImageUpload
/**
* This function will delete an image from the gallery. It will make a function call to delete the
* database record, and then another to delete the image file. The function assumes that the $id
* has been checked to be an integer.
*
* @param $id
* @return unknown_type
*/
public function deleteImageFromRotator($id){
// Firstly retrieve the image data from the database
$image_data = $this->getImageData((int)$id);
if($image_data === false){
$feedback = 'Error accessing image information from the database.';
return $feedback;
}
// Delete from the database first
$db_delete_res = $this->deleteImageDatabaseRecord($image_data['id']);
if(!$db_delete_res){
$feedback = 'Error removing image from the database.';
return $feedback;
}
// Delete the image file
$file_delete_res = $this->deleteImageFile($image_data['image_location']);
if($file_delete_res){
$feedback = 'Image successfully removed.';
return $feedback;
} else {
$feedback = 'Image removed from database, but not from server.';
return $feedback;
}
} // End function: deleteImageFromRotator
/**
* Deletes image data from the database
*
* @param Int ID of image in database
* @return Boolean true on success, false on failure
*/
private function deleteImageDatabaseRecord($id){
$db =& JFactory::getDBO();
$query = "DELETE FROM `#__jlrotator_images` WHERE `id` = " . (int)$id . " LIMIT 1";
$db->setQuery($query);
if($db->query()){
return true;
} else {
return false;
}
} // End function: deleteImageDatabaseRecord()
/**
* Increases an images order by one
*
* @return String feedback string
*/
public function moveImageUp($id){
// Get the image details
$image_data = $this->getImageData((int)$id);
// If the image has an order value of 1 it is already top of the list
if($image_data['order'] == 1){
$feedback = 'Image already top of order list';
return $feedback;
}
// Get the image with an order value of +1, to swap details. If it does not exist
// that is ok.
$swap_image_data = $this->getImageByOrderValue($image_data['order'] - 1);
if($swap_image_data !== false){
$this->updateImageOder($swap_image_data['id'], $image_data['order']);
}
// Update the requested image order
$update_res = $this->updateImageOder($image_data['id'], ($image_data['order'] - 1));
if($update_res){
$feedback = 'Image order successfully amended.';
return $feedback;
} else {
$feedback = 'Image order could not be amended.';
return $feedback;
}
} // End function: moveImageUp
/**
* Decreases an images order by one
*
* @return unknown_type
*/
public function moveImageDown($id){
// Get the image details
$image_data = $this->getImageData((int)$id);
// If the image has an order value of 1 it is already top of the list
if($image_data['order'] == $this->getAmountImagesInGallery()){
$feedback = 'Image already bottom of order list';
return $feedback;
}
// Get the image with an order value of +1, to swap details. If it does not exist
// that is ok.
$swap_image_data = $this->getImageByOrderValue($image_data['order'] + 1);
if($swap_image_data !== false){
$this->updateImageOder($swap_image_data['id'], $image_data['order']);
}
// Update the requested image order
$update_res = $this->updateImageOder($image_data['id'], ($image_data['order'] + 1));
if($update_res){
$feedback = 'Image order successfully amended.';
return $feedback;
} else {
$feedback = 'Image order could not be amended.';
return $feedback;
}
} // End function: moveImageDown
/**
* Deletes an image from te images folder
*
* @return Boolean true on success, false on failure
*/
private function deleteImageFile($location){
if(file_exists($location)){
$res = unlink($location);
return $res;
} else {
// for whatever reason the image file is not there, so same as deleted
return true;
}
} // End function: deleteImageFile
private function getImageData($id){
$db =& JFactory::getDBO();
$query = "SELECT * FROM `#__jlrotator_images` WHERE `id` = " . (int)$id;
$db->setQuery($query);
if($db->query()){
$res = $db->loadAssoc();
if(!empty($res)){
return $res;
} else {
return false;
}
} else {
return false;
}
} // End function: getImageData
/**
* Will return the first database result for images with the supplied order. False if no record found.
*
* @return Associative array of result, or false on failure
*/
private function getImageByOrderValue($order) {
$db =& JFactory::getDBO();
$query = "SELECT * FROM `#__jlrotator_images` WHERE `order` = " . (int)$order;
$db->setQuery($query);
if($db->query()){
$res = $db->loadAssoc();
if(!empty($res)){
return $res;
} else {
return false;
}
} else {
return false;
}
}// End function: getImageByOrderValue
/**
* Updates the 'order' value for an image in the database.
*
* @param Int ID of image
* @param Int order value
* @return Boolean true on success, false otherwise
*/
private function updateImageOder($id, $order){
$db =& JFactory::getDBO();
$query = "UPDATE `#__jlrotator_images` SET `order` = '" . (int)$order . "' WHERE `id` = '" . (int)$id . "' LIMIT 1 ;";
$db->setQuery($query);
if($db->query()){
return true;
} else {
return false;
}
} // End function: updateImageOder
/**
*
* @param $name
* @param $url
* @param $width
* @param $height
* @param $alt
* @return unknown_type
*/
private function storeImageInDB($name, $location, $width, $height, $alt){
$db =& JFactory::getDBO();
$order = $this->getAmountImagesInGallery() + 1;
$query = "
INSERT INTO `#__jlrotator_images` ( `id` , `name` , `image_location` , `width` , `height` , `alt` , `order` )
VALUES (
'', '$name', '$location', '$width', '$height', '$alt', '$order'
);
";
$db->setQuery($query);
if($db->query()){
return true;
} else {
return false;
}
} // End function: storeImageInDB
/**
*
* @return unknown_type
*/
private function getAmountImagesInGallery(){
$db =& JFactory::getDBO();
$query = "SELECT COUNT(id) as imagetotal FROM `#__jlrotator_images`";
$db->setQuery($query);
if($db->query()){
$res = $db->loadAssoc();
return $res['imagetotal'];
}
} // End function: getAmountImagesInGallery
}
?>