2014-01-22 10:12:51 +00:00
< ? php
2014-10-21 11:45:11 +00:00
###
# @name Misc Module
2015-02-01 21:08:37 +00:00
# @copyright 2015 by Tobias Reich
2014-10-21 11:45:11 +00:00
###
2014-01-22 10:12:51 +00:00
if ( ! defined ( 'LYCHEE' )) exit ( 'Error: Direct access is not allowed!' );
2014-04-19 18:27:53 +00:00
function search ( $database , $settings , $term ) {
2014-01-22 10:12:51 +00:00
2014-04-19 18:27:53 +00:00
if ( ! isset ( $database , $settings , $term )) return false ;
2014-01-22 10:12:51 +00:00
2014-02-09 21:30:16 +00:00
$return [ 'albums' ] = '' ;
2014-01-22 10:12:51 +00:00
2015-02-27 21:39:07 +00:00
# Initialize return var
$return = array (
'photos' => null ,
'albums' => null ,
'hash' => ''
);
2015-03-13 20:32:39 +00:00
###
2014-10-21 11:45:11 +00:00
# Photos
2015-03-13 20:32:39 +00:00
###
2015-03-11 23:11:16 +00:00
$query = Database :: prepare ( $database , " SELECT id, title, tags, public, star, album, thumbUrl, takestamp, url FROM ? WHERE title LIKE '%?%' OR description LIKE '%?%' OR tags LIKE '%?%' " , array ( LYCHEE_TABLE_PHOTOS , $term , $term , $term ));
2014-08-29 19:25:41 +00:00
$result = $database -> query ( $query );
2015-03-13 20:32:39 +00:00
2015-03-11 23:11:16 +00:00
while ( $photo = $result -> fetch_assoc ()) {
$photo = Photo :: prepareData ( $photo );
$return [ 'photos' ][ $photo [ 'id' ]] = $photo ;
2014-02-17 16:01:46 +00:00
}
2014-01-22 10:12:51 +00:00
2015-03-13 20:32:39 +00:00
###
2014-10-21 11:45:11 +00:00
# Albums
2015-03-13 20:32:39 +00:00
###
2014-08-30 05:05:26 +00:00
$query = Database :: prepare ( $database , " SELECT id, title, public, sysstamp, password FROM ? WHERE title LIKE '%?%' OR description LIKE '%?%' " , array ( LYCHEE_TABLE_ALBUMS , $term , $term ));
2014-08-29 19:25:41 +00:00
$result = $database -> query ( $query );
2014-01-22 10:12:51 +00:00
2015-03-13 20:32:39 +00:00
while ( $album = $result -> fetch_assoc ()) {
# Turn data from the database into a front-end friendly format
$album = Album :: prepareData ( $album );
2014-01-22 10:12:51 +00:00
2014-10-21 11:45:11 +00:00
# Thumbs
2015-05-14 15:47:17 +00:00
$query = Database :: prepare ( $database , " SELECT thumbUrl FROM ? WHERE album = '?' " . $settings [ 'sortingPhotos' ] . " LIMIT 0, 3 " , array ( LYCHEE_TABLE_PHOTOS , $album [ 'id' ]));
2015-03-13 20:32:39 +00:00
$thumbs = $database -> query ( $query );
# For each thumb
$k = 0 ;
while ( $thumb = $thumbs -> fetch_object ()) {
$album [ 'thumbs' ][ $k ] = LYCHEE_URL_UPLOADS_THUMB . $thumb -> thumbUrl ;
2014-02-17 16:01:46 +00:00
$k ++ ;
}
2014-01-22 10:12:51 +00:00
2015-03-13 20:32:39 +00:00
# Add to return
$return [ 'albums' ][ $album [ 'id' ]] = $album ;
2014-01-22 10:12:51 +00:00
2014-02-17 16:01:46 +00:00
}
2015-02-27 21:39:07 +00:00
# Hash
$return [ 'hash' ] = md5 ( json_encode ( $return ));
2014-02-17 16:01:46 +00:00
return $return ;
2014-01-22 10:12:51 +00:00
2014-05-20 10:44:08 +00:00
}
function getGraphHeader ( $database , $photoID ) {
if ( ! isset ( $database , $photoID )) return false ;
2015-04-13 19:08:26 +00:00
$photo = new Photo ( $database , null , null , $photoID );
if ( $photo -> getPublic ( '' ) === false ) return false ;
2014-11-28 22:22:30 +00:00
$query = Database :: prepare ( $database , " SELECT title, description, url, medium FROM ? WHERE id = '?' " , array ( LYCHEE_TABLE_PHOTOS , $photoID ));
2014-08-29 19:25:41 +00:00
$result = $database -> query ( $query );
2014-05-20 10:44:08 +00:00
$row = $result -> fetch_object ();
2015-04-06 19:09:26 +00:00
if ( ! $result ||! $row ) return false ;
2014-11-28 22:22:30 +00:00
if ( $row -> medium === '1' ) $dir = 'medium' ;
else $dir = 'big' ;
$parseUrl = parse_url ( 'http://' . $_SERVER [ 'HTTP_HOST' ] . $_SERVER [ 'REQUEST_URI' ]);
2015-01-31 21:28:25 +00:00
$url = $parseUrl [ 'scheme' ] . '://' . $parseUrl [ 'host' ] . $parseUrl [ 'path' ] . '?' . $parseUrl [ 'query' ];
2014-11-28 22:22:30 +00:00
$picture = $parseUrl [ 'scheme' ] . '://' . $parseUrl [ 'host' ] . $parseUrl [ 'path' ] . '/../uploads/' . $dir . '/' . $row -> url ;
2014-05-20 10:44:08 +00:00
2015-06-03 20:10:38 +00:00
$url = htmlentities ( $url );
$picture = htmlentities ( $picture );
$row -> title = htmlentities ( $row -> title );
$row -> description = htmlentities ( $row -> description );
2014-05-20 10:44:08 +00:00
$return = '<!-- General Meta Data -->' ;
2015-06-03 20:10:38 +00:00
$return .= '<meta name="title" content="' . $row -> title . '">' ;
$return .= '<meta name="description" content="' . $row -> description . ' - via Lychee">' ;
$return .= '<link rel="image_src" type="image/jpeg" href="' . $picture . '">' ;
2014-05-20 10:44:08 +00:00
$return .= '<!-- Twitter Meta Data -->' ;
$return .= '<meta name="twitter:card" content="photo">' ;
2015-06-03 20:10:38 +00:00
$return .= '<meta name="twitter:title" content="' . $row -> title . '">' ;
$return .= '<meta name="twitter:image:src" content="' . $picture . '">' ;
2014-05-20 10:44:08 +00:00
$return .= '<!-- Facebook Meta Data -->' ;
2015-06-03 20:10:38 +00:00
$return .= '<meta property="og:title" content="' . $row -> title . '">' ;
$return .= '<meta property="og:description" content="' . $row -> description . ' - via Lychee">' ;
$return .= '<meta property="og:image" content="' . $picture . '">' ;
$return .= '<meta property="og:url" content="' . $url . '">' ;
2014-05-20 10:44:08 +00:00
return $return ;
}
function getExtension ( $filename ) {
$extension = strpos ( $filename , '.' ) !== false
? strrchr ( $filename , '.' )
: '' ;
return $extension ;
2014-01-22 10:12:51 +00:00
}
2015-02-08 14:36:13 +00:00
function getHashedString ( $password ) {
2014-04-21 00:19:23 +00:00
2014-04-21 12:18:13 +00:00
# Inspired by http://alias.io/2010/01/store-passwords-safely-with-php-and-mysql/
2014-04-21 00:19:23 +00:00
2014-04-21 12:18:13 +00:00
# A higher $cost is more secure but consumes more processing power
2014-04-21 00:19:23 +00:00
$cost = 10 ;
# Create a random salt
2014-04-21 22:36:02 +00:00
if ( extension_loaded ( 'openssl' )) {
$salt = strtr ( substr ( base64_encode ( openssl_random_pseudo_bytes ( 17 )), 0 , 22 ), '+' , '.' );
} elseif ( extension_loaded ( 'mcrypt' )) {
$salt = strtr ( substr ( base64_encode ( mcrypt_create_iv ( 17 , MCRYPT_DEV_URANDOM )), 0 , 22 ), '+' , '.' );
} else {
$salt = " " ;
for ( $i = 0 ; $i < 22 ; $i ++ ) {
$salt .= substr ( " ./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 " , mt_rand ( 0 , 63 ), 1 );
}
}
2014-04-21 00:19:23 +00:00
# Prefix information about the hash so PHP knows how to verify it later.
# "$2a$" Means we're using the Blowfish algorithm. The following two digits are the cost parameter.
$salt = sprintf ( " $ 2a $ %02d $ " , $cost ) . $salt ;
# Hash the password with the salt
return crypt ( $password , $salt );
2014-04-21 12:18:13 +00:00
2014-04-21 00:19:23 +00:00
}
2014-11-04 09:08:04 +00:00
function hasPermissions ( $path ) {
2014-05-16 21:23:49 +00:00
2014-11-06 20:31:21 +00:00
// Check if the given path is readable and writable
// Both functions are also verifying that the path exists
2014-11-05 18:50:02 +00:00
if ( is_readable ( $path ) === true &&
is_writeable ( $path ) === true ) return true ;
2014-11-04 09:08:04 +00:00
return false ;
2014-05-16 21:23:49 +00:00
}
2014-04-28 09:47:30 +00:00
function fastimagecopyresampled ( & $dst_image , $src_image , $dst_x , $dst_y , $src_x , $src_y , $dst_w , $dst_h , $src_w , $src_h , $quality = 4 ) {
###
# Plug-and-Play fastimagecopyresampled function replaces much slower imagecopyresampled.
# Just include this function and change all "imagecopyresampled" references to "fastimagecopyresampled".
# Typically from 30 to 60 times faster when reducing high resolution images down to thumbnail size using the default quality setting.
# Author: Tim Eckel - Date: 09/07/07 - Version: 1.1 - Project: FreeRingers.net - Freely distributable - These comments must remain.
#
# Optional "quality" parameter (defaults is 3). Fractional values are allowed, for example 1.5. Must be greater than zero.
# Between 0 and 1 = Fast, but mosaic results, closer to 0 increases the mosaic effect.
# 1 = Up to 350 times faster. Poor results, looks very similar to imagecopyresized.
# 2 = Up to 95 times faster. Images appear a little sharp, some prefer this over a quality of 3.
# 3 = Up to 60 times faster. Will give high quality smooth results very close to imagecopyresampled, just faster.
# 4 = Up to 25 times faster. Almost identical to imagecopyresampled for most images.
# 5 = No speedup. Just uses imagecopyresampled, no advantage over imagecopyresampled.
###
if ( empty ( $src_image ) || empty ( $dst_image ) || $quality <= 0 ) { return false ; }
if ( $quality < 5 && (( $dst_w * $quality ) < $src_w || ( $dst_h * $quality ) < $src_h )) {
$temp = imagecreatetruecolor ( $dst_w * $quality + 1 , $dst_h * $quality + 1 );
imagecopyresized ( $temp , $src_image , 0 , 0 , $src_x , $src_y , $dst_w * $quality + 1 , $dst_h * $quality + 1 , $src_w , $src_h );
imagecopyresampled ( $dst_image , $temp , $dst_x , $dst_y , 0 , 0 , $dst_w , $dst_h , $dst_w * $quality , $dst_h * $quality );
imagedestroy ( $temp );
} else imagecopyresampled ( $dst_image , $src_image , $dst_x , $dst_y , $src_x , $src_y , $dst_w , $dst_h , $src_w , $src_h );
return true ;
}
2014-06-26 12:25:23 +00:00
?>