2010-12-14 14:20:52 +00:00
< ? php
2012-04-30 10:49:46 +00:00
2010-12-14 14:20:52 +00:00
/**
* @ Author Arslan Hassan , Fawaz Tahir
* @ License : Attribution Assurance License -- http :// www . opensource . org / licenses / attribution . php
* @ Class : Photos Class
* @ date : 06 November 2010
* @ Version : v2 . 0.91
* @ Description : Well guys time to work on one of the most wanted Module . Photo Module .
* @ New Things Needed :
* - Photo Sharing Email Template
*/
2010-12-28 13:56:44 +00:00
//define('MAX_PHOTO_UPLOAD',5);
2010-12-14 14:20:52 +00:00
2012-04-30 10:49:46 +00:00
class CBPhotos {
var $action = '' ;
var $collection = '' ;
var $p_tbl = " photos " ;
var $i_tbl = " collection_items " ;
var $exts = '' ;
var $max_file_size ; // image file size. Setting from Admin area;
var $mid_width ;
var $mid_height ;
var $lar_width ;
var $thumb_width ;
var $thumb_height ;
var $position ;
var $cropping ;
var $padding = 10 ;
var $max_watermark_width = 120 ;
var $embed_types ;
var $share_email_vars ;
//var $max_uploads = MAX_PHOTO_UPLOAD; Max number of uploads at once
var $search ;
var $tagger_configs ;
var $selector_id = 'photo' ;
Added : Photo EXIF Data in insert_photo()
Added : Make Avatar from any photo
Added : Collection cover photo
Added : An array for thumb creations. Includes, code, width, height, watermark, sharpit
Added : Resizer class in common.php
Added : jquery.Jcrop.js in edit_account
Added : A common function called cb_filename. All filenames used in clipbucket follow a specific syntax
Added : Four new function for photos. get_original_photo, insert_photo_colors, insert_exif_data & add_custom_photo_size
Added : User Avatar collection functions. But they are not in use right now. This need proper thinking
Added : New files: mobile-form-class.php, resizer.class.php, exif.php, makers files for exif, jquery.Jcrop plugin, some template files
2012-05-16 07:27:54 +00:00
var $thumb_dimensions = array ();
2012-04-30 10:49:46 +00:00
/**
* __Constructor of CBPhotos
*/
function CBPhotos () {
$this -> exts = array ( 'jpg' , 'png' , 'gif' , 'jpeg' ); // This should be added from Admin Area. may be some people also want to allow BMPs;
$this -> embed_types = array ( " html " , " forum " , " email " , " direct " );
$this -> set_default_tagger_configs ();
}
/**
* Setting up Photos Section
*/
function init_photos () {
global $Cbucket ;
$this -> init_actions ();
$this -> init_collections ();
$this -> photos_admin_menu ();
$this -> setting_other_things ();
$this -> set_photo_max_size ();
Added : Photo EXIF Data in insert_photo()
Added : Make Avatar from any photo
Added : Collection cover photo
Added : An array for thumb creations. Includes, code, width, height, watermark, sharpit
Added : Resizer class in common.php
Added : jquery.Jcrop.js in edit_account
Added : A common function called cb_filename. All filenames used in clipbucket follow a specific syntax
Added : Four new function for photos. get_original_photo, insert_photo_colors, insert_exif_data & add_custom_photo_size
Added : User Avatar collection functions. But they are not in use right now. This need proper thinking
Added : New files: mobile-form-class.php, resizer.class.php, exif.php, makers files for exif, jquery.Jcrop plugin, some template files
2012-05-16 07:27:54 +00:00
$this -> thumb_dimensions = array (
't' => array (
'width' => config ( 'photo_thumb_width' ),
'height' => config ( 'photo_thumb_height' ),
'crop' => ( config ( 'photo_crop' ) == 0 ? - 1 : 4 ),
'watermark' => false ,
'shrapit' => true
),
'm' => array (
'width' => config ( 'photo_med_width' ),
'height' => config ( 'photo_med_height' ),
'crop' => ( config ( 'photo_crop' ) == 0 ? - 1 : 4 ),
'watermark' => false ,
'shrapit' => false
),
'l' => array (
'width' => config ( 'photo_lar_width' ),
'height' => 0 ,
'crop' => - 1 ,
'watermark' => true ,
'shrapit' => false
),
'o' => array (
'width' => 0 ,
'height' => 0 ,
'crop' => - 1 ,
'watermark' => true ,
'shrapit' => false
)
);
2012-04-30 10:49:46 +00:00
/* Following is a sample for custom thumbs . We will have a config called 'custom_thumbs' .
* This will be a json_encoded multi - dimensional associative array . It ' s will be following
* $custom_thumbs = [ type : 'video|user|collection|photo|group' ] => array (
* [ unique_code ] => array (
* [ name ] => 'Thumb' ,
* [ unique_code ] => 'thumb' ,
* [ abbr ] => 't' ,
* [ width ] => '120' ,
* [ height ] => '90' ,
* [ crop ] => true | false
* [ keep_aspect_ratio ] => true | false
* )
* )
*/
if ( $Cbucket -> configs [ 'custom_thumbs_dimensions' ] || $Cbucket -> configs [ 'custom_thumbs_dimensions' ] == '' ) {
}
}
/**
* Initiating Actions for Photos
*/
function init_actions () {
$this -> action = new cbactions ();
$this -> action -> init (); // Setting up reporting excuses
$this -> action -> type = 'p' ;
$this -> action -> name = 'photo' ;
$this -> action -> obj_class = 'cbphoto' ;
$this -> action -> check_func = 'photo_exists' ;
$this -> action -> type_tbl = " photos " ;
$this -> action -> type_id_field = 'photo_id' ;
}
/**
* Setting Email Settings
*/
function set_share_email ( $data ) {
$this -> share_email_vars = array (
'{photo_title}' => $data [ 'photo_title' ],
'{photo_description}' => $data [ 'photo_description' ],
'{photo_link}' => $this -> collection -> collection_links ( $data , 'view_item' ),
'{photo_thumb}' => $this -> get_image_file ( $data [ 'photo_id' ], 'm' )
);
$this -> action -> share_template_name = 'photo_share_template' ;
$this -> action -> val_array = $this -> share_email_vars ;
}
/**
* Initiating Collections for Photos
*/
function init_collections () {
$this -> collection = new Collections ;
$this -> collection -> objType = " p " ;
$this -> collection -> objClass = " cbphoto " ;
$this -> collection -> objTable = " photos " ;
$this -> collection -> objName = " Photo " ;
$this -> collection -> objFunction = " photo_exists " ;
$this -> collection -> objFieldID = " photo_id " ;
$this -> photo_register_function ( 'delete_collection_photos' );
}
/**
* Create Admin Area menu for photos
*/
function photos_admin_menu () {
2011-09-20 14:04:11 +00:00
global $Cbucket , $cbcollection , $userquery ;
2010-12-14 14:20:52 +00:00
$am = $Cbucket -> AdminMenu ;
2011-09-20 14:04:11 +00:00
$per = $userquery -> get_user_level ( userid ());
2012-04-28 20:11:43 +00:00
$menu = array (
'title' => lang ( 'Photos Manager' ),
'icon' => 'icon-picture' ,
'id' => 'photos-manager' ,
'access' => 'photos_moderation' ,
);
$sub_menu = array (
'photos-manager' => array (
array ( 'title' => lang ( 'Photo Manager' ), 'link' => 'photo_manager.php' ),
array ( 'title' => lang ( 'Flagged Photos' ), 'link' => 'flagged_photos.php' ),
array ( 'title' => lang ( 'Orphan Photos' ), 'link' => 'orphan_photos.php' ),
array ( 'title' => lang ( 'Photo Settings' ), 'link' => 'photo_settings.php' ),
array ( 'title' => lang ( 'Watermark Settings' ), 'link' => 'photo_settings.php?mode=watermark_settings' ),
array ( 'title' => lang ( 'Recreate Thumbs' ), 'link' => 'recreate_thumbs.php?mode=mass' )
)
);
add_admin_menu ( $menu );
2012-04-30 10:49:46 +00:00
add_admin_sub_menus ( $sub_menu );
}
/**
* Setting other things
*/
function setting_other_things () {
global $userquery , $Cbucket ;
// Search type
if ( isSectionEnabled ( 'photos' ) )
$Cbucket -> search_types [ 'photos' ] = " cbphoto " ;
// My account links
$accountLinks = array ();
$accountLinks = array (
lang ( 'manage_photos' ) => " manage_photos.php " ,
lang ( 'manage_favorite_photos' ) => " manage_photos.php?mode=favorite " ,
lang ( 'manage_my_album' ) => " manage_photos.php?mode=my_album " ,
);
if ( isSectionEnabled ( 'photos' ) )
$userquery -> user_account [ lang ( 'Photos' )] = $accountLinks ;
//Setting Cbucket links
$Cbucket -> links [ 'photos' ] = array ( 'photos.php' , 'photos/' );
$Cbucket -> links [ 'manage_photos' ] = array ( 'manage_photos.php' , 'manage_photos.php' );
$Cbucket -> links [ 'edit_photo' ] = array ( 'edit_photo.php?photo=' , 'edit_photo.php?photo=' );
$Cbucket -> links [ 'photo_upload' ] = array ( 'photo_upload.php' , 'photo_upload' );
$Cbucket -> links [ 'manage_favorite_photos' ] = array ( 'manage_photos.php?mode=favorite' , 'manage_photos.php?mode=favorite' );
$Cbucket -> links [ 'manage_orphan_photos' ] = array ( 'manage_photos.php?mode=orphan' , 'manage_photos.php?mode=orphan' );
$Cbucket -> links [ 'user_photos' ] = array ( 'user_photos.php?mode=uploaded&user=' , 'user_photos.php?mode=uploaded&user=' );
$Cbucket -> links [ 'user_fav_photos' ] = array ( 'user_photos.php?mode=favorite&user=' , 'user_photos.php?mode=favorite&user=' );
// Setting Home Tab
}
/**
* Initiatting Search
*/
function init_search () {
$this -> search = new cbsearch ;
$this -> search -> db_tbl = " photos " ;
$this -> search -> use_match_method = TRUE ;
$this -> search -> columns = array (
array ( " field " => " photo_title " , " type " => " LIKE " , " var " => " % { KEY}% " ),
array ( " field " => " photo_tags " , " type " => " LIKE " , " var " => " % { KEY}% " , " op " => " OR " )
);
$this -> search -> match_fields = array ( " photo_title " , " photo_tags " );
$this -> search -> cat_tbl = $this -> cat_tbl ;
$this -> search -> display_template = LAYOUT . '/blocks/photo.html' ;
$this -> search -> template_var = 'photo' ;
$this -> search -> has_user_id = true ;
$this -> search -> results_per_page = config ( 'photo_search_result' );
$this -> search -> search_type [ 'photos' ] = array ( 'title' => lang ( 'photos' ));
$this -> search -> add_cond ( tbl ( 'photos.collection_id' ) . " <> 0 " );
$sorting = array (
'date_added' => lang ( " date_added " ),
'views' => lang ( " views " ),
'total_comments' => lang ( " comments " ),
'rating' => lang ( " rating " ),
'total_favorites' => lang ( " favorites " )
);
$this -> search -> sorting = array (
'date_added' => " date_added DESC " ,
'views' => " views DESC " ,
'rating' => " rating DESC, rated_by DESC " ,
'total_comments' => " total_comments DESC " ,
'total_favorites' => " total_favorites DESC "
);
$array = $_GET ;
$uploaded = $array [ 'datemargin' ];
$sort = $array [ 'sort' ];
$forms = array (
'query' => array (
'title' => lang ( 'keywords' ),
'type' => 'textfield' ,
'name' => 'query' ,
'id' => 'query' ,
'value' => cleanForm ( $array [ 'query' ] )
),
'date_margin' => array (
'title' => lang ( 'uploaded' ),
'type' => 'dropdown' ,
'name' => 'datemargin' ,
'id' => 'datemargin' ,
'value' => $this -> search -> date_margins (),
'checked' => $uploaded ,
),
'sort' => array (
'title' => lang ( 'sort_by' ),
'type' => 'dropdown' ,
'name' => 'sort' ,
'value' => $sorting ,
'checked' => $sort
)
);
$this -> search -> search_type [ 'photos' ][ 'fields' ] = $forms ;
}
/**
* Set File Max Size
*/
function set_photo_max_size () {
global $Cbucket ;
$adminSize = $Cbucket -> configs [ 'max_photo_size' ];
if ( ! $adminSize )
$this -> max_file_size = 2 * 1024 * 1024 ;
else
$this -> max_file_size = $adminSize * 1024 * 1024 ;
}
/**
* Check if photo exists or not
*/
function photo_exists ( $id ) {
global $db ;
if ( is_numeric ( $id ) )
$result = $db -> select ( tbl ( $this -> p_tbl ), " photo_id " , " photo_id = ' $id ' " );
else
$result = $db -> select ( tbl ( $this -> p_tbl ), " photo_id " , " photo_key = ' $id ' " );
if ( $result )
return true ;
else
return false ;
}
/**
* Register function
*/
function photo_register_function ( $func ) {
global $cbcollection ;
$cbcollection -> collection_delete_functions [] = 'delete_collection_photos' ;
}
/**
* Get Photo
*/
function get_photo ( $pid ) {
global $db ;
if ( is_numeric ( $pid ) )
$result = $db -> select ( tbl ( $this -> p_tbl ), " * " , " photo_id = ' $pid ' " );
else
$result = $db -> select ( tbl ( $this -> p_tbl ), " * " , " photo_key = ' $pid ' " );
if ( $db -> num_rows > 0 )
return $result [ 0 ];
else
return false ;
}
/**
* Get Photos
*/
function get_photos ( $p ) {
global $db ;
$tables = " photos,users " ;
$order = $p [ 'order' ];
$limit = $p [ 'limit' ];
$cond = " " ;
if ( ! has_access ( 'admin_access' , TRUE ) ) {
$cond = " " . tbl ( 'photos.broadcast' ) . " = 'public' AND " . tbl ( 'photos.active' ) . " = 'yes' " ;
} else {
if ( $p [ 'active' ] )
$cond .= " " . tbl ( 'photos.active' ) . " = ' " . $p [ 'active' ] . " ' " ;
if ( $p [ 'broadcast' ] ) {
if ( $cond != " " )
$cond .= " AND " ;
$cond .= " " . tbl ( 'photos.broadcast' ) . " = ' " . $p [ 'broadcast' ] . " ' " ;
}
}
if ( $p [ 'pid' ] ) {
if ( $cond != " " )
$cond .= " AND " ;
$cond .= $this -> constructMultipleQuery ( array ( " ids " => $p [ 'pid' ], " sign " => " = " , " operator " => " OR " ) );
}
if ( $p [ 'key' ] ) {
if ( $cond != " " )
$cond .= " AND " ;
$cond .= " " . tbl ( 'photos.photo_key' ) . " = ' " . $p [ 'key' ] . " ' " ;
}
if ( $p [ 'filename' ] ) {
if ( $cond != " " )
$cond .= " AND " ;
$cond .= " " . tbl ( 'photos.filename' ) . " = ' " . $p [ 'filename' ] . " ' " ;
}
if ( $p [ 'extension' ] ) {
foreach ( $this -> exts as $ext ) {
if ( in_array ( $ext , $this -> exts ) ) {
if ( $cond != " " )
$cond .= " AND " ;
$cond .= " " . tbl ( 'photos.ext' ) . " = ' " . $p [ 'extension' ] . " ' " ;
}
}
}
if ( $p [ 'date_span' ] ) {
if ( $cond != " " )
$cond .= " AND " ;
$cond .= " " . cbsearch :: date_margin ( " date_added " , $p [ 'date_span' ] );
}
if ( $p [ 'featured' ] ) {
if ( $cond != " " )
$cond .= " AND " ;
$cond .= " " . tbl ( 'photos.featured' ) . " = ' " . $p [ 'featured' ] . " ' " ;
}
if ( $p [ 'user' ] ) {
if ( $cond != " " )
$cond .= " AND " ;
$cond .= $this -> constructMultipleQuery ( array ( " ids " => $p [ 'user' ], " sign " => " = " , " operator " => " AND " , " column " => " userid " ) );
}
if ( $p [ 'exclude' ] ) {
if ( $cond != " " )
$cond .= " AND " ;
$cond .= $this -> constructMultipleQuery ( array ( " ids " => $p [ 'exclude' ], " sign " => " <> " ) );
}
$title_tag = '' ;
if ( $p [ 'title' ] ) {
$title_tag = " " . tbl ( 'photos.photo_title' ) . " LIKE '% " . $p [ 'title' ] . " %' " ;
}
if ( $p [ 'tags' ] ) {
$tags = explode ( " , " , $p [ 'tags' ] );
if ( count ( $tags ) > 0 ) {
if ( $title_tag != '' )
$title_tag .= " OR " ;
$total = count ( $tags );
$loop = 1 ;
foreach ( $tags as $tag ) {
$title_tag .= " " . tbl ( 'photos.photo_tags' ) . " LIKE '% $tag %' " ;
if ( $loop < $total )
$title_tag .= " OR " ;
$loop ++ ;
}
} else {
if ( $title_tag != '' )
$title_tag .= " OR " ;
$title_tag .= " " . tbl ( 'photos.photo_tags' ) . " LIKE '% " . $p [ 'tags' ] . " %' " ;
}
}
if ( $title_tag != " " ) {
if ( $cond != '' )
$cond .= " AND " ;
$cond .= " ( $title_tag ) " ;
}
if ( $p [ 'ex_user' ] ) {
if ( $cond != " " )
$cond .= " AND " ;
$cond .= $this -> constructMultipleQuery ( array ( " ids " => $p [ 'ex_user' ], " sign " => " <> " , " operator " => " AND " , " column " => " userid " ) );
}
if ( $p [ 'extra_cond' ] ) {
if ( $cond != " " )
$cond .= " AND " ;
$cond .= $p [ 'extra_cond' ];
}
if ( $p [ 'get_orphans' ] )
$p [ 'collection' ] = " \0 " ;
if ( $p [ 'collection' ] ) {
if ( $cond != " " )
$cond .= " AND " ;
$cond .= $this -> constructMultipleQuery ( array ( " ids " => $p [ 'collection' ], " sign " => " = " , " operator " => " OR " , " column " => " collection_id " ) );
} else {
if ( $cond != " " )
$cond .= " AND " ;
$cond .= " " . tbl ( 'photos.collection_id' ) . " <> '0' " ;
}
if ( ! $p [ 'count_only' ] && ! $p [ 'show_related' ] ) {
if ( $cond != " " )
$cond .= " AND " ;
$result = $db -> select ( tbl ( $tables ), tbl ( " photos.*,users.userid,users.username " ), $cond . tbl ( " photos.userid " ) . " = " . tbl ( " users.userid " ), $limit , $order );
//echo $db->db_query;
}
if ( $p [ 'show_related' ] ) {
$cond = " MATCH( " . tbl ( 'photos.photo_title,photos.photo_tags' ) . " ) " ;
$cond .= " AGAINST (' " . cbsearch :: set_the_key ( $p [ 'title' ] ) . " ' IN BOOLEAN MODE) " ;
if ( $p [ 'exclude' ] ) {
if ( $cond != " " )
$cond .= " AND " ;
$cond .= $this -> constructMultipleQuery ( array ( " ids " => $p [ 'exclude' ], " sign " => " <> " ) );
}
if ( $p [ 'collection' ] ) {
if ( $cond != " " )
$cond .= " AND " ;
$cond .= $this -> constructMultipleQuery ( array ( " ids " => $p [ 'collection' ], " sign " => " <> " , " column " => " collection_id " ) );
}
if ( $p [ 'extra_cond' ] ) {
if ( $cond != " " )
$cond .= " AND " ;
$cond .= $p [ 'extra_cond' ];
}
$result = $db -> select ( tbl ( $tables ), tbl ( " photos.*,users.userid,users.username " ), $cond . " AND " . tbl ( 'photos.collection_id' ) . " <> '0' AND " . tbl ( " photos.userid " ) . " = " . tbl ( " users.userid " ), $limit , $order );
//echo $db->db_query;
// We found nothing from TITLE of Photos, let's try TAGS
if ( $db -> num_rows == 0 ) {
$tags = cbsearch :: set_the_key ( $p [ 'tags' ] );
$tags = str_replace ( '+' , '' , $tags );
$cond = " MATCH( " . tbl ( 'photos.photo_title,photos.photo_tags' ) . " ) " ;
$cond .= " AGAINST (' " . $tags . " ' IN BOOLEAN MODE) " ;
if ( $p [ 'exclude' ] ) {
if ( $cond != " " )
$cond .= " AND " ;
$cond .= $this -> constructMultipleQuery ( array ( " ids " => $p [ 'exclude' ], " sign " => " <> " ) );
}
if ( $p [ 'collection' ] ) {
if ( $cond != " " )
$cond .= " AND " ;
$cond .= $this -> constructMultipleQuery ( array ( " ids " => $p [ 'collection' ], " sign " => " <> " , " column " => " collection_id " ) );
}
if ( $p [ 'extra_cond' ] ) {
if ( $cond != " " )
$cond .= " AND " ;
$cond .= $p [ 'extra_cond' ];
}
$result = $db -> select ( tbl ( $tables ), tbl ( " photos.*,users.userid,users.username " ), $cond . " AND " . tbl ( 'photos.collection_id' ) . " <> '0' AND " . tbl ( " photos.userid " ) . " = " . tbl ( " users.userid " ), $limit , $order );
//echo $db->db_query;
}
}
if ( $p [ 'count_only' ] ) {
if ( $p [ 'extra_cond' ] ) {
if ( $cond != " " )
$cond .= " AND " ;
$cond .= $p [ 'extra_cond' ];
}
$result = $db -> count ( tbl ( " photos " ), " photo_id " , $cond );
}
if ( $p [ 'assign' ] )
assign ( $p [ 'assign' ], $result );
else
return $result ;
}
/**
* Used to construct Multi Query
* Only IDs will be excepted
*/
function constructMultipleQuery ( $params ) {
$cond = " " ;
$IDs = $params [ 'ids' ];
if ( is_array ( $IDs ) )
$IDs = $IDs ;
else
$IDs = explode ( " , " , $IDs );
$count = 0 ;
$cond .= " ( " ;
foreach ( $IDs as $id ) {
$id = str_replace ( " " , " " , $id );
if ( is_numeric ( $id ) || $params [ 'column' ] == 'collection_id' ) {
if ( $count > 0 )
$cond .= " " . ( $params [ 'operator' ] ? $params [ 'operator' ] : 'AND' ) . " " ;
$cond .= " " . tbl ( 'photos.' . ( $params [ 'column' ] ? $params [ 'column' ] : 'photo_id' ) ) . " " . ( $params [ 'sign' ] ? $params [ 'sign' ] : '=' ) . " ' " . $id . " ' " ;
$count ++ ;
}
}
$cond .= " ) " ;
return $cond ;
}
/**
* Used to construct Exclude Query
function exclude_query ( $array )
{
$cond = '' ;
if ( ! is_array ( $array ))
$ids = explode ( ',' , $array );
else
$ids = $array ;
$count = 0 ;
$cond .= " ( " ;
foreach ( $ids as $id )
{
$count ++ ;
if ( $count > 1 )
$cond .= " AND " ;
$cond .= " " . tbl ( 'photos.photo_id' ) . " <> ' " . $id . " ' " ;
}
$cond .= " ) " ;
return $cond ;
} */
/**
* Used to generate photo key
* Replica of video_keygen function
*/
function photo_key () {
global $db ;
$char_list = " ABDGHKMNORSUXWY " ;
$char_list .= " 123456789 " ;
while ( 1 ) {
$photo_key = '' ;
srand ( ( double ) microtime () * 1000000 );
for ( $i = 0 ; $i < 12 ; $i ++ ) {
$photo_key .= substr ( $char_list , ( rand () % ( strlen ( $char_list )) ), 1 );
}
if ( ! $this -> pkey_exists ( $photo_key ) )
break ;
}
return $photo_key ;
}
/**
* Used to check if key exists
*/
function pkey_exists ( $key ) {
global $db ;
$db -> select ( tbl ( " photos " ), " photo_key " , " photo_key = ' $key ' " );
if ( $db -> num_rows > 0 )
return true ;
else
return false ;
}
/**
* Used to delete photo
*/
function delete_photo ( $id , $oprhan = FALSE ) {
global $db ;
if ( $this -> photo_exists ( $id ) ) {
$photo = $this -> get_photo ( $id );
$del_photo_funcs = cb_get_functions ( 'delete_photo' );
if ( is_array ( $del_photo_funcs ) ) {
foreach ( $del_photo_funcs as $func ) {
if ( function_exists ( $func [ 'func' ] ) ) {
$func [ 'func' ]( $photo );
}
}
}
if ( $orphan == FALSE ) //removing from collection
$this -> collection -> remove_item ( $photo [ 'photo_id' ], $photo [ 'collection_id' ] );
//now removing photo files
$this -> delete_photo_files ( $photo );
//finally removing from Database
$this -> delete_from_db ( $photo );
//Decrementing User Photos
$db -> update ( tbl ( " users " ), array ( " total_photos " ), array ( " |f|total_photos-1 " ), " userid=' " . $photo [ 'userid' ] . " ' " );
//Removing Photo Comments
$db -> delete ( tbl ( " comments " ), array ( " type " , " type_id " ), array ( " p " , $photo [ 'photo_id' ]) );
//Removing Photo From Favortes
$db -> delete ( tbl ( " favorites " ), array ( " type " , " id " ), array ( " p " , $photo [ 'photo_id' ]) );
} else
e ( lang ( " photo_not_exists " ) );
}
/**
* Used to delete photo files
*/
function delete_photo_files ( $id ) {
if ( ! is_array ( $id ) )
$photo = $this -> get_photo ( $id );
else
$photo = $id ;
$pid = $photo [ 'photo_id' ];
$files = $this -> get_image_file ( $pid , 't' , TRUE , NULL , FALSE , TRUE );
if ( ! empty ( $files ) ) {
foreach ( $files as $file ) {
$file_dir = PHOTOS_DIR . " / " . $file ;
if ( file_exists ( $file_dir ) )
unlink ( $file_dir );
}
e ( sprintf ( lang ( " success_delete_file " ), $photo [ 'photo_title' ] ), " m " );
}
}
/**
* Used to delete photo from database
*/
function delete_from_db ( $id ) {
global $db ;
if ( is_array ( $id ) )
$delete_id = $id [ 'photo_id' ];
else
$delete_id = $id ;
$db -> execute ( " DELETE FROM " . tbl ( 'photos' ) . " WHERE photo_id = $delete_id " );
e ( lang ( " photo_success_deleted " ), " m " );
}
/**
* Used to get photo owner
*/
function get_photo_owner ( $id ) {
return $this -> get_photo_field ( $id , 'userid' );
}
/**
* Used to get photo any field
*/
function get_photo_field ( $id , $field ) {
global $db ;
if ( ! $field )
return false ;
else {
if ( ! is_numeric ( $id ) )
$result = $db -> select ( tbl ( $this -> p_tbl ), $field , ' photo_key = ' . $id . '' );
else
$result = $db -> select ( tbl ( $this -> p_tbl ), $field , ' photo_id = ' . $id . '' );
if ( $result )
return $result [ 0 ][ $field ];
else
return false ;
}
}
/**
* Used filter array
*/
function remove_empty_indexes ( $array ) {
$newArr = array ();
if ( is_array ( $array ) ) {
foreach ( $array as $key => $arr ) {
if ( is_array ( $arr ) ) {
foreach ( $arr as $a ) {
if ( ! empty ( $a ) ) {
$newArr [ $key ][] = $a ;
}
}
}
}
return $newArr ;
} else {
echo " No Array Provided " ;
}
}
/**
* Used to crop the image
* Image will be crop to dead - center
*/
function crop_image ( $input , $output , $ext , $width , $height ) {
$info = getimagesize ( $input );
$Swidth = $info [ 0 ];
$Sheight = $info [ 1 ];
$canvas = imagecreatetruecolor ( $width , $height );
$left_padding = $Swidth / 2 - $width / 2 ;
$top_padding = $Sheight / 2 - $height / 2 ;
switch ( $ext ) {
case " jpeg " :
case " jpg " :
case " JPG " :
case " JPEG " : {
$image = imagecreatefromjpeg ( $input );
imagecopy ( $canvas , $image , 0 , 0 , $left_padding , $top_padding , $width , $height );
imagejpeg ( $canvas , $output , 90 );
}
break ;
case " png " :
case " PNG " : {
$image = imagecreatefrompng ( $input );
imagecopy ( $canvas , $image , 0 , 0 , $left_padding , $top_padding , $width , $height );
imagepng ( $canvas , $output , 9 );
}
break ;
case " gif " :
case " GIF " : {
$image = imagecreatefromgif ( $input );
imagecopy ( $canvas , $image , 0 , 0 , $left_padding , $top_padding , $width , $height );
imagejpeg ( $canvas , $output , 90 );
}
break ;
default : {
return false ;
}
break ;
}
imagedestroy ( $canvas );
}
/**
* Used to resize and watermark image
* */
function generate_photos ( $array ) {
global $db ;
$path = PHOTOS_DIR . " / " ;
if ( ! is_array ( $array ) )
$p = $this -> get_photo ( $array );
else
$p = $array ;
$filename = $p [ 'filename' ];
$extension = $p [ 'ext' ];
$this -> createThumb ( $path . $filename . " . " . $extension , $path . $filename . " _o. " . $extension , $extension );
$this -> createThumb ( $path . $filename . " . " . $extension , $path . $filename . " _t. " . $extension , $extension , $this -> thumb_width , $this -> thumb_height );
$this -> createThumb ( $path . $filename . " . " . $extension , $path . $filename . " _m. " . $extension , $extension , $this -> mid_width , $this -> mid_height );
$this -> createThumb ( $path . $filename . " . " . $extension , $path . $filename . " _l. " . $extension , $extension , $this -> lar_width );
$should_watermark = config ( 'watermark_photo' );
if ( ! empty ( $should_watermark ) && $should_watermark == 1 ) {
$this -> watermark_image ( $path . $filename . " _l. " . $extension , $path . $filename . " _l. " . $extension );
$this -> watermark_image ( $path . $filename . " _o. " . $extension , $path . $filename . " _o. " . $extension );
}
/* GETTING DETAILS OF IMAGES AND STORING THEM IN DB */
$this -> update_image_details ( $p );
}
/**
* This function is used to get photo files and extract
* dimensions and file size of each file , put them in array
* then encode in json and finally update photo details column
*/
function update_image_details ( $photo ) {
global $db , $json ;
if ( is_array ( $photo ) && ! empty ( $photo [ 'photo_id' ] ) )
$p = $photo ;
else
$p = $this -> get_photo ( $photo );
if ( ! empty ( $photo ) ) {
$images = $this -> get_image_file ( $p , NULL , TRUE , NULL , FALSE );
if ( $images ) {
foreach ( $images as $image ) {
$imageFile = PHOTOS_DIR . " / " . $image ;
if ( file_exists ( $imageFile ) ) {
$imageDetails = getimagesize ( $imageFile );
$imageSize = filesize ( $imageFile );
$data [ $this -> get_image_type ( $image )] = array (
" width " => $imageDetails [ 0 ],
" height " => $imageDetails [ 1 ],
" attribute " => mysql_clean ( $imageDetails [ 3 ] ),
" size " => array (
" bytes " => round ( $imageSize ),
" kilobytes " => round ( $imageSize / 1024 ),
" megabytes " => round ( $imageSize / 1024 / 1024 , 2 )
)
);
}
}
if ( is_array ( $data ) && ! empty ( $data ) ) {
if ( phpversion () < " 5.2.0 " )
$encodedData = stripslashes ( $json -> json_encode ( $data ) );
else
$encodedData = stripslashes ( json_encode ( $data ) );
$db -> update ( tbl ( 'photos' ), array ( " photo_details " ), array ( " |no_mc| $encodedData " ), " photo_id = ' " . $p [ 'photo_id' ] . " ' " );
}
}
}
}
/**
* Creating resized photo
*/
function createThumb ( $from , $to , $ext , $d_width = NULL , $d_height = NULL , $force_copy = false ) {
$file = $from ;
$info = getimagesize ( $file );
$org_width = $info [ 0 ];
$org_height = $info [ 1 ];
if ( $org_width > $d_width && ! empty ( $d_width ) ) {
$ratio = $org_width / $d_width ; // We will resize it according to Width
$width = $org_width / $ratio ;
$height = $org_height / $ratio ;
$image_r = imagecreatetruecolor ( $width , $height );
if ( ! empty ( $d_height ) && $height > $d_height && $this -> cropping == 1 ) {
$crop_image = TRUE ;
}
switch ( $ext ) {
case " jpeg " :
case " jpg " :
case " JPG " :
case " JPEG " : {
$image = imagecreatefromjpeg ( $file );
imagecopyresampled ( $image_r , $image , 0 , 0 , 0 , 0 , $width , $height , $org_width , $org_height );
imagejpeg ( $image_r , $to , 90 );
if ( ! empty ( $crop_image ) )
$this -> crop_image ( $to , $to , $ext , $width , $d_height );
}
break ;
case " png " :
case " PNG " : {
$image = imagecreatefrompng ( $file );
imagecopyresampled ( $image_r , $image , 0 , 0 , 0 , 0 , $width , $height , $org_width , $org_height );
imagepng ( $image_r , $to , 9 );
if ( ! empty ( $crop_image ) )
$this -> crop_image ( $to , $to , $ext , $width , $d_height );
}
break ;
case " gif " :
case " GIF " : {
$image = imagecreatefromgif ( $file );
imagecopyresampled ( $image_r , $image , 0 , 0 , 0 , 0 , $width , $height , $org_width , $org_height );
imagegif ( $image_r , $to , 90 );
if ( ! empty ( $crop_image ) )
$this -> crop_image ( $to , $to , $ext , $width , $d_height );
}
break ;
}
imagedestroy ( $image_r );
} else {
if ( ! file_exists ( $to ) || $force_copy === true )
copy ( $from , $to );
}
}
/**
* Used to get watermark file
*/
function watermark_file () {
if ( file_exists ( BASEDIR . " /images/photo_watermark.png " ) )
return BASEURL . " /images/photo_watermark.png " ;
else
return false ;
}
/**
* Used to set watermark position
*/
function position_watermark ( $file , $watermark ) {
if ( empty ( $this -> position ) )
$info = array ( 'left' , 'top' );
else
$info = explode ( " : " , $this -> position );
$x = $info [ 0 ];
$y = $info [ 1 ];
list ( $w , $h ) = getimagesize ( $file );
list ( $ww , $wh ) = getimagesize ( $watermark );
$padding = $this -> padding ;
switch ( $x ) {
case " center " : {
$finalxPadding = $w / 2 - $ww / 2 ;
}
break ;
case " left " :
default : {
$finalxPadding = $padding ;
}
break ;
case " right " : {
$finalxPadding = $w - $ww - $padding ;
}
break ;
}
switch ( $y ) {
case " top " :
default : {
$finalyPadding = $padding ;
}
break ;
case " center " : {
$finalyPadding = $h / 2 - $wh / 2 ;
}
break ;
case " bottom " : {
$finalyPadding = $h - $wh - $padding ;
}
break ;
}
$values = array ( $finalxPadding , $finalyPadding );
return $values ;
}
/**
* Used to watermark image
*/
function watermark_image ( $input , $output ) {
$watermark_file = $this -> watermark_file ();
if ( ! $watermark_file )
return false ;
else {
list ( $Swidth , $Sheight , $Stype ) = getimagesize ( $input );
$wImage = imagecreatefrompng ( $watermark_file );
$ww = imagesx ( $wImage );
$wh = imagesy ( $wImage );
$paddings = $this -> position_watermark ( $input , $watermark_file );
switch ( $Stype ) {
case 1 : //GIF
{
$sImage = imagecreatefromgif ( $input );
imagecopy ( $sImage , $wImage , $paddings [ 0 ], $paddings [ 1 ], 0 , 0 , $ww , $wh );
imagejpeg ( $sImage , $output , 90 );
}
break ;
case 2 : //JPEG
{
$sImage = imagecreatefromjpeg ( $input );
imagecopy ( $sImage , $wImage , $paddings [ 0 ], $paddings [ 1 ], 0 , 0 , $ww , $wh );
imagejpeg ( $sImage , $output , 90 );
}
break ;
case 3 : //PNG
{
$sImage = imagecreatefrompng ( $input );
imagecopy ( $sImage , $wImage , $paddings [ 0 ], $paddings [ 1 ], 0 , 0 , $ww , $wh );
imagepng ( $sImage , $output , 9 );
}
break ;
}
}
}
/**
* Load Upload Form
*/
function loadUploadForm ( $params ) {
$p = $params ;
$should_include = $p [ 'includeHeader' ] ? $p [ 'includeHeader' ] : TRUE ;
$output = '<form action="" method="post"' ;
if ( $p [ 'formName' ] )
$output .= " name = ' " . $p [ 'formName' ] . " ' " ;
else
$output .= " name = 'photo_form' " ;
if ( $p [ 'formID' ] )
$output .= " id = ' " . $p [ 'formID' ] . " ' " ;
else
$output .= " id = 'photo_form' " ;
if ( $p [ 'formClass' ] )
$formClass = $p [ 'formClass' ];
$output .= " class = 'clearfix " . $formClass . " ' " ;
$output .= " > " ;
if ( $p [ 'class' ] )
$class = $p [ 'class' ];
if ( $should_include == TRUE )
$output .= Fetch ( " /blocks/upload_head.html " );
$output .= " <div " ;
$output .= " class = 'PhotoUploaderWrapper " . $class . " ' " ;
if ( $p [ 'WrapperID' ] )
$output .= " id = ' " . $p [ 'WrapperID' ] . " ' " ;
if ( $p [ 'WrapperExtraAttr' ] )
$output .= $p [ 'WrapperExtraAttr' ];
$output .= " > " ;
$output .= '<input type="file" name="photo_uploads" id="photo_uploads" />' ;
$output .= " </div> " ;
$output .= '<div style="clear:both;"></div>' ;
$output .= '<div id="photoUploadQueue"></div>' ;
$output .= " </form> " ;
return $output ;
}
/**
* Load Required Form
*/
function load_required_forms ( $array = NULL ) {
if ( $array == NULL )
$array = $_POST ;
$title = $array [ 'photo_title' ];
$description = $array [ 'photo_description' ];
$tags = $array [ 'photo_tags' ];
if ( $array [ 'user' ] )
$p [ 'user' ] = $array [ 'user' ];
else
$p [ 'user' ] = userid ();
$p [ 'type' ] = " photos " ;
$collections = $this -> collection -> get_collections ( $p );
$cl_array = $this -> parse_array ( $collections );
$collection = $array [ 'collection_id' ];
$this -> unique = rand ( 0 , 9999 );
$fields =
array
(
'name' => array (
'title' => lang ( 'photo_title' ),
'id' => 'photo_title' ,
'name' => 'photo_title' ,
'type' => 'textfield' ,
'value' => cleanForm ( $title ),
'db_field' => 'photo_title' ,
'required' => 'yes' ,
'invalid_err' => lang ( 'photo_title_err' )
),
'desc' => array (
'title' => lang ( 'photo_caption' ),
'id' => 'photo_description' ,
'name' => 'photo_description' ,
'type' => 'textarea' ,
'value' => cleanForm ( $description ),
'db_field' => 'photo_description' ,
'anchor_before' => 'before_desc_compose_box' ,
'required' => 'yes' ,
'invalid_err' => lang ( 'photo_caption_err' )
),
'tags' => array (
'title' => lang ( 'photo_tags' ),
'id' => 'photo_tags' ,
'name' => 'photo_tags' ,
'type' => 'textfield' ,
'value' => genTags ( $tags ),
'db_field' => 'photo_tags' ,
'required' => 'yes' ,
'invalid_err' => lang ( 'photo_tags_err' )
),
'collection' => array (
'title' => lang ( 'collection' ),
'id' => 'collection_id' ,
'name' => 'collection_id' ,
'type' => 'dropdown' ,
'value' => $cl_array ,
'db_field' => 'collection_id' ,
'required' => '' ,
'checked' => $collection ,
'invalid_err' => lang ( 'photo_collection_err' )
)
);
return $fields ;
}
function insert_photo ( $array = NULL ) {
global $db , $eh ;
if ( $array == NULL )
$array = $_POST ;
2010-12-14 14:20:52 +00:00
2012-04-30 10:49:46 +00:00
if ( is_array ( $_FILES ) )
$array = array_merge ( $array , $_FILES );
$this -> validate_form_fields ( $array );
if ( ! error () ) {
$forms = $this -> load_required_forms ( $array );
$oForms = $this -> load_other_forms ( $array );
$FullForms = array_merge ( $forms , $oForms );
foreach ( $FullForms as $field ) {
$name = formObj :: rmBrackets ( $field [ 'name' ] );
$val = $_POST [ $name ];
if ( $field [ 'use_func_val' ] )
$val = $field [ 'validate_function' ]( $val );
if ( ! empty ( $field [ 'db_field' ] ) )
$query_field [] = $field [ 'db_field' ];
if ( is_array ( $val ) ) {
$new_val = '' ;
foreach ( $val as $v ) {
$new_val .= " # " . $v . " # " ;
}
$val = $new_val ;
}
if ( ! $field [ 'clean_func' ] || ( ! function_exists ( $field [ 'clean_func' ] ) && ! is_array ( $field [ 'clean_func' ] )) )
$val = ( $val );
else
$val = apply_func ( $field [ 'clean_func' ], sql_free ( '|no_mc|' . $val ) );
if ( ! empty ( $field [ 'db_field' ] ) )
$query_val [] = $val ;
}
$query_field [] = " userid " ;
if ( ! $array [ 'userid' ] ) {
$userid = userid ();
$query_val [] = $userid ;
} else {
$query_val [] = $array [ 'userid' ];
$userid = $array [ 'userid' ];
}
$query_field [] = " date_added " ;
$query_val [] = NOW ();
$query_field [] = " owner_ip " ;
$query_val [] = $_SERVER [ 'REMOTE_ADDR' ];
$query_field [] = " ext " ;
$query_val [] = $array [ 'ext' ];
$query_field [] = " photo_key " ;
//$query_val[] = $array['photo_key'];
$query_val [] = $this -> photo_key ();
$query_field [] = " filename " ;
$query_val [] = $array [ 'filename' ];
if ( $array [ 'server_url' ] && $array [ 'server_url' ] != " undefined " ) {
$query_field [] = " server_url " ;
$query_val [] = $array [ 'server_url' ];
}
if ( $array [ 'folder' ] && $array [ 'folder' ] != " undefined " ) {
$query_field [] = " file_directory " ;
$query_val [] = $array [ 'folder' ];
}
$insert_id = $db -> insert ( tbl ( $this -> p_tbl ), $query_field , $query_val );
$photo = $this -> get_photo ( $insert_id );
$this -> collection -> add_collection_item ( $insert_id , $photo [ 'collection_id' ] );
Added : Photo EXIF Data in insert_photo()
Added : Make Avatar from any photo
Added : Collection cover photo
Added : An array for thumb creations. Includes, code, width, height, watermark, sharpit
Added : Resizer class in common.php
Added : jquery.Jcrop.js in edit_account
Added : A common function called cb_filename. All filenames used in clipbucket follow a specific syntax
Added : Four new function for photos. get_original_photo, insert_photo_colors, insert_exif_data & add_custom_photo_size
Added : User Avatar collection functions. But they are not in use right now. This need proper thinking
Added : New files: mobile-form-class.php, resizer.class.php, exif.php, makers files for exif, jquery.Jcrop plugin, some template files
2012-05-16 07:27:54 +00:00
/*
* EXIF should be added here
*/
insert_exif_data ( $photo );
2012-04-30 10:49:46 +00:00
if ( ! $array [ 'server_url' ] || $array [ 'server_url' ] == 'undefined' )
$this -> generate_photos ( $photo );
$eh -> flush ();
e ( sprintf ( lang ( " photo_is_saved_now " ), $photo [ 'photo_title' ] ), " m " );
$db -> update ( tbl ( " users " ), array ( " total_photos " ), array ( " |f|total_photos+1 " ), " userid=' " . $userid . " ' " );
//Adding Photo Feed
addFeed ( array ( 'action' => 'upload_photo' , 'object_id' => $insert_id , 'object' => 'photo' ) );
return $insert_id ;
}
}
/**
* Update watermark file
*/
function update_watermark ( $file ) {
if ( empty ( $file ) )
e ( lang ( " no_watermark_found " ) );
else {
$oldW = BASEDIR . " /images/photo_watermark.png " ;
if ( file_exists ( $oldW ) )
unset ( $oldW );
$info = getimagesize ( $file [ 'tmp_name' ] );
$width = $info [ 0 ];
$type = $info [ 2 ];
//pr($info,TRUE);
if ( $type == 3 ) {
if ( move_uploaded_file ( $file [ 'tmp_name' ], BASEDIR . " /images/photo_watermark.png " ) ) {
$wFile = BASEDIR . " /images/photo_watermark.png " ;
if ( $width > $this -> max_watermark_width )
$this -> createThumb ( $wFile , $wFile , 'png' , $this -> max_watermark_width );
}
e ( lang ( " watermark_updated " ), " m " );
} else {
e ( lang ( " upload_png_watermark " ) );
}
}
}
/**
* Load Other Form
*/
function load_other_forms ( $array = NULL ) {
if ( $array == NULL )
$array = $_POST ;
$comments = $array [ 'allow_comments' ];
$broadcast = $array [ 'broadcast' ];
$tagging = $array [ 'allow_tagging' ];
$embedding = $array [ 'allow_embedding' ];
$rating = $array [ 'allow_rating' ];
$rand = $array [ 'photo_key' ];
$Otherfields = array
(
'comments' => array (
'title' => lang ( 'comments' ),
'name' => 'allow_comments' ,
'id' => 'allow_comments' ,
'db_field' => 'allow_comments' ,
'type' => 'radiobutton' ,
'value' => array ( 'yes' => lang ( 'vdo_allow_comm' ), 'no' => lang ( 'vdo_dallow_comm' )),
'required' => 'no' ,
'checked' => $comments ,
'validate_function' => 'yes_or_no' ,
'display_function' => 'display_sharing_opt' ,
'default_value' => 'yes'
),
/* 'broadcast' => array (
'title' => lang ( " vdo_br_opt " ),
'type' => 'radiobutton' ,
'name' => 'broadcast' ,
'id' => 'broadcast' ,
'value' => array ( " public " => lang ( " collect_borad_pub " ), " private " => lang ( " collect_broad_pri " )),
'checked' => $broadcast ,
'db_field' => 'broadcast' ,
'required' => 'no' ,
'display_function' => 'display_sharing_opt' ,
'default_value' => 'public'
), */
'tagging' => array (
'title' => lang ( 'tagging' ),
'type' => 'radiobutton' ,
'id' => 'allow_tagging' ,
'name' => 'allow_tagging' ,
'db_field' => 'allow_tagging' ,
'type' => 'radiobutton' ,
'value' => array ( 'yes' => lang ( 'pic_allow_tagging' ), 'no' => lang ( 'pic_dallow_tagging' )),
'checked' => $tagging ,
'validate_function' => 'yes_or_no' ,
'display_function' => 'display_sharing_opt' ,
'default_value' => 'yes'
),
'embedding' => array (
'title' => lang ( 'vdo_embedding' ),
'type' => 'radiobutton' ,
'name' => 'allow_embedding' ,
'id' => 'allow_embedding' ,
'db_field' => 'allow_embedding' ,
'value' => array ( 'yes' => lang ( 'pic_allow_embed' ), 'no' => lang ( 'pic_dallow_embed' )),
'checked' => $embedding ,
'validate_function' => 'yes_or_no' ,
'display_function' => 'display_sharing_opt' ,
'default_value' => 'yes'
),
'rating' => array (
'title' => lang ( 'rating' ),
'id' => 'allow_rating' ,
'name' => 'allow_rating' ,
'type' => 'radiobutton' ,
'db_field' => 'allow_rating' ,
'value' => array ( 'yes' => lang ( 'pic_allow_rating' ), 'no' => lang ( 'pic_dallow_rating' )),
'checked' => $rating ,
'validate_function' => 'yes_or_no' ,
'display_function' => 'display_sharing_opt' ,
'default_value' => 'yes'
)
);
//pr($Otherfields,TRUE);
return $Otherfields ;
}
/**
* This will return a formatted array
* return @ Array
* Array Format : Multidemsional
* Array ( [ photo_id ] => array ( [ 'field_name' ] => 'value' ) )
*/
function return_formatted_post ( $arr ) {
$photoID = '' ;
foreach ( $_POST as $key => $value ) {
$parts = explode ( '_' , $key );
$total = count ( $parts );
$id = $parts [ $total - 1 ];
$name = array_splice ( $parts , 0 , $total - 1 );
$name = implode ( " _ " , $name );
if ( $photoID != $id ) {
$values = array ();
$photoID = $id ;
}
if ( is_numeric ( $id ) ) {
if ( strpos ( $key , $id ) !== FALSE ) {
$values [ $name ] = $value ;
$PhotosArray [ $id ] = $values ;
}
}
}
return $PhotosArray ;
}
/**
* This will be used to mutliple photos
* at once .
* Single update will be different .
*/
function update_multiple_photos ( $arr ) {
global $db , $cbcollection , $eh ;
foreach ( $arr as $id => $details ) {
if ( is_array ( $details ) ) {
$i = 0 ;
$query = " UPDATE " . tbl ( 'photos' ) . " SET " ;
foreach ( $details as $key => $value ) {
$i ++ ;
$query .= " $key = ' $value ' " ;
if ( $i < count ( $details ) )
$query .= " , " ;
}
$query .= " WHERE " . tbl ( 'photos.photo_id' ) . " = ' $id ' " ;
$db -> Execute ( $query );
$cbcollection -> add_collection_item ( $id , $details [ 'collection_id' ] );
}
}
$eh -> flush ();
}
/**
* Used to parse collections dropdown
*/
function parse_array ( $array ) {
if ( is_array ( $array ) ) {
foreach ( $array as $key => $v ) {
$cl_arr [ $v [ 'collection_id' ]] = $v [ 'collection_name' ];
}
return $cl_arr ;
} else {
return false ;
}
}
/**
* Used to create filename of photo
*/
function create_filename () {
$filename = time () . RandomString ( 6 );
return $filename ;
}
/**
* Construct extensions for SWF
*/
function extensions () {
$exts = $this -> exts ;
$list = '' ;
foreach ( $exts as $ext ) {
$list .= " *. " . $ext . " ; " ;
}
return $list ;
}
/**
* Function used to validate form fields
*/
function validate_form_fields ( $array = NULL ) {
$reqFileds = $this -> load_required_forms ( $array );
if ( $array == NULL )
$array = $_POST ;
if ( is_array ( $_FILES ) )
$array = array_merge ( $array , $_FILES );
$otherFields = $this -> load_other_forms ( $array );
$photo_fields = array_merge ( $reqFileds , $otherFields );
validate_cb_form ( $photo_fields , $array );
}
/**
* Update Photo
*/
function update_photo ( $array = NULL ) {
global $db ;
if ( $array == NULL )
$array = $_POST ;
$this -> validate_form_fields ( $array );
$pid = $array [ 'photo_id' ];
$cid = $this -> get_photo_field ( $pid , 'collection_id' );
if ( ! error () ) {
$reqFields = $this -> load_required_forms ( $array );
$otherFields = $this -> load_other_forms ( $array );
$fields = array_merge ( $reqFields , $otherFields );
foreach ( $fields as $field ) {
$name = formObj :: rmBrackets ( $field [ 'name' ] );
$val = $array [ $name ];
if ( $field [ 'use_func_val' ] )
$val = $field [ 'validate_function' ]( $val );
if ( ! empty ( $field [ 'db_field' ] ) )
$query_field [] = $field [ 'db_field' ];
if ( is_array ( $val ) ) {
$new_val = '' ;
foreach ( $val as $v ) {
$new_val .= " # " . $v . " # " ;
}
$val = $new_val ;
}
if ( ! $field [ 'clean_func' ] || ( ! function_exists ( $field [ 'clean_func' ] ) && ! is_array ( $field [ 'clean_func' ] )) )
$val = ( $val );
else
$val = apply_func ( $field [ 'clean_func' ], sql_free ( '|no_mc|' . $val ) );
if ( ! empty ( $field [ 'db_field' ] ) )
$query_val [] = $val ;
}
if ( has_access ( 'admin_access' , TRUE ) ) {
if ( isset ( $array [ 'views' ] ) ) {
$query_field [] = 'views' ;
$query_val [] = $array [ 'views' ];
}
if ( isset ( $array [ 'total_comments' ] ) ) {
$query_field [] = " total_comments " ;
$query_val [] = $array [ 'total_comments' ];
}
if ( isset ( $array [ 'total_favorites' ] ) ) {
$query_field [] = " total_favorites " ;
$query_val [] = $array [ 'total_favorites' ];
}
if ( isset ( $array [ 'downloaded' ] ) ) {
$query_field [] = " downloaded " ;
$query_val [] = $array [ 'downloaded' ];
}
if ( isset ( $array [ 'voters' ] ) ) {
$query_field [] = " voters " ;
$query_val [] = $array [ 'voters' ];
}
}
if ( ! error () ) {
if ( ! userid () )
e ( lang ( " you_not_logged_in " ) );
elseif ( ! $this -> photo_exists ( $pid ) )
e ( lang ( " photo_not_exists " ) );
elseif ( $this -> get_photo_owner ( $pid ) != userid () && ! has_access ( 'admin_access' , TRUE ) )
e ( lang ( " cant_edit_photo " ) );
else {
if ( $cid != $array [ 'collection_id' ] ) {
$this -> collection -> change_collection ( $array [ 'collection_id' ], $pid , $cid );
}
$db -> update ( tbl ( 'photos' ), $query_field , $query_val , " photo_id=' $pid ' " );
e ( lang ( " photo_updated_successfully " ), " m " );
}
}
}
}
/**
* Used to get image type
* t = Thumb
* m = Medium
* l = Large
*/
function get_image_type ( $name ) {
if ( empty ( $name ) )
return false ;
else {
$parts = explode ( " _ " , $name );
if ( is_array ( $parts ) ) {
if ( ! empty ( $parts [ 1 ] ) )
return substr ( $parts [ 1 ], 0 , 1 );
}
}
}
/**
* Used to get image file
*/
function get_image_file ( $pid , $size = 't' , $multi = false , $assign = NULL , $with_path = true , $with_orig = false ) {
$params = array ( " details " => $pid , " size " => $size , " multi " => $multi , " assign " => $assign , " with_path " => $with_path , " with_orig " => $with_orig );
return $this -> getFileSmarty ( $params );
}
/**
* This will become a Smarty function .
* I am writting this to eliminate the possiblitles
* of distort pictures
*/
function getFileSmarty ( $p ) {
global $Cbucket ;
$details = $p [ 'details' ];
$output = $p [ 'output' ];
if ( empty ( $details ) ) {
return $this -> default_thumb ( $size , $output );
} else {
//Calling Custom Functions
if ( count ( $Cbucket -> custom_get_photo_funcs ) > 0 ) {
foreach ( $Cbucket -> custom_get_photo_funcs as $funcs ) {
if ( function_exists ( $funcs ) ) {
$func_returned = $funcs ( $p );
if ( $func_returned )
return $func_returned ;
}
}
}
if ( ( $p [ 'size' ] != 't' && $p [ 'size' ] != 'm' && $p [ 'size' ] != 'l' && $p [ 'size' ] != 'o' ) || empty ( $p [ 'size' ] ) )
$p [ 'size' ] = 't' ;
if ( $p [ 'with_path' ] === FALSE )
$p [ 'with_path' ] = FALSE ; else
$p [ 'with_path' ] = TRUE ;
$with_path = $p [ 'with_path' ];
$with_orig = $p [ 'with_orig' ] ? $p [ 'with_orig' ] : FALSE ;
if ( ! is_array ( $details ) )
$photo = $this -> get_photo ( $details );
else
$photo = $details ;
if ( empty ( $photo [ 'photo_id' ] ) || empty ( $photo [ 'photo_key' ] ) )
return $this -> default_thumb ( $size , $output );
else {
if ( ! empty ( $photo [ 'filename' ] ) && ! empty ( $photo [ 'ext' ] ) ) {
$files = glob ( PHOTOS_DIR . " / " . $photo [ 'filename' ] . " *. " . $photo [ 'ext' ] );
if ( ! empty ( $files ) && is_array ( $files ) ) {
foreach ( $files as $file ) {
$file_parts = explode ( " / " , $file );
$thumb_name = $file_parts [ count ( $file_parts ) - 1 ];
$type = $this -> get_image_type ( $thumb_name );
if ( $with_orig ) {
if ( $with_path )
$thumbs [] = PHOTOS_URL . " / " . $thumb_name ;
else
$thumbs [] = $thumb_name ;
}
elseif ( ! empty ( $type ) ) {
if ( $with_path )
$thumbs [] = PHOTOS_URL . " / " . $thumb_name ;
else
$thumbs [] = $thumb_name ;
}
}
if ( empty ( $p [ 'output' ] ) || $p [ 'output' ] == 'non_html' ) {
if ( $p [ 'assign' ] && $p [ 'multi' ] ) {
assign ( $p [ 'assign' ], $thumbs );
} elseif ( ! $p [ 'assign' ] && $p [ 'multi' ] ) {
return $thumbs ;
} else {
$size = " _ " . $p [ 'size' ];
$return_thumb = array_find ( $photo [ 'filename' ] . $size , $thumbs );
if ( empty ( $return_thumb ) ) {
$this -> default_thumb ( $size , $output );
} else {
if ( $p [ 'assign' ] != NULL )
assign ( $p [ 'assign' ], $return_thumb );
else
return $return_thumb ;
}
}
}
if ( $p [ 'output' ] == 'html' ) {
$size = " _ " . $p [ 'size' ];
$src = array_find ( $photo [ 'filename' ] . $size , $thumbs );
if ( empty ( $src ) )
$src = $this -> default_thumb ( $size );
else
$src = $src ;
if ( phpversion < '5.2.0' )
global $json ; $js = $json ;
if ( ! empty ( $js ) )
$imgDetails = $js -> json_decode ( $photo [ 'photo_details' ], true );
else
$imgDetails = json_decode ( $photo [ 'photo_details' ], true );
if ( empty ( $imgDetails ) || empty ( $imgDetails [ $p [ 'size' ]] ) ) {
$dem = getimagesize ( str_replace ( PHOTOS_URL , PHOTOS_DIR , $src ) );
$width = $dem [ 0 ];
$height = $dem [ 1 ];
/* UPDATEING IMAGE DETAILS */
$this -> update_image_details ( $details );
} else {
$width = $imgDetails [ $p [ 'size' ]][ 'width' ];
$height = $imgDetails [ $p [ 'size' ]][ 'height' ];
}
$img = " <img " ;
$img .= " src = ' " . $src . " ' " ;
Added : Photo EXIF Data in insert_photo()
Added : Make Avatar from any photo
Added : Collection cover photo
Added : An array for thumb creations. Includes, code, width, height, watermark, sharpit
Added : Resizer class in common.php
Added : jquery.Jcrop.js in edit_account
Added : A common function called cb_filename. All filenames used in clipbucket follow a specific syntax
Added : Four new function for photos. get_original_photo, insert_photo_colors, insert_exif_data & add_custom_photo_size
Added : User Avatar collection functions. But they are not in use right now. This need proper thinking
Added : New files: mobile-form-class.php, resizer.class.php, exif.php, makers files for exif, jquery.Jcrop plugin, some template files
2012-05-16 07:27:54 +00:00
if ( USE_PHOTO_TAGGING && THIS_PAGE == 'view_item' ) {
2012-04-30 10:49:46 +00:00
$img .= " id = ' " . $this -> get_selector_id () . " _ " . $photo [ 'photo_id' ] . " ' " ;
} else {
if ( $p [ 'id' ] ) {
$img .= " id = ' " . mysql_clean ( $p [ 'id' ] ) . " _ " . $photo [ 'photo_id' ] . " ' " ;
} else {
$img .= " id = ' " . $this -> get_selector_id () . " _ " . $photo [ 'photo_id' ] . " ' " ;
}
}
if ( $p [ 'class' ] )
$img .= " class = ' " . mysql_clean ( $p [ 'class' ] ) . " ' " ;
if ( $p [ 'align' ] )
$img .= " align = ' " . $p [ 'align' ] . " ' " ;
if ( ( $p [ 'width' ] && is_numeric ( $p [ 'width' ] )) && ( $p [ 'height' ] && is_numeric ( $p [ 'height' ] )) ) {
$height = $p [ 'height' ];
$width = $p [ 'width' ];
} elseif ( $p [ 'width' ] && is_numeric ( $p [ 'width' ] ) ) {
$height = round ( $p [ 'width' ] / $width * $height );
$width = $p [ 'width' ];
} elseif ( $p [ 'height' ] && is_numeric ( $p [ 'height' ] ) ) {
$width = round ( $p [ 'height' ] * $width / $height );
$height = $p [ 'height' ];
}
$img .= " width = ' " . $width . " ' " ;
$img .= " height = ' " . $height . " ' " ;
if ( $p [ 'title' ] )
$img .= " title = ' " . mysql_clean ( $p [ 'title' ] ) . " ' " ;
else
$img .= " title = ' " . $photo [ 'photo_title' ] . " ' " ;
if ( $p [ 'alt' ] )
$img .= " alt = ' " . mysql_clean ( $p [ 'alt' ] ) . " ' " ;
else
$img .= " alt = ' " . $photo [ 'photo_title' ] . " ' " ;
if ( $p [ 'anchor' ] ) {
$anchor_p = array ( " place " => $p [ 'anchor' ], " data " => $photo );
ANCHOR ( $anchor_p );
}
if ( $p [ 'style' ] )
$img .= " style = ' " . $p [ 'style' ] . " ' " ;
if ( $p [ 'extra' ] )
$img .= ( $p [ 'extra' ]);
$img .= " /> " ;
if ( $p [ 'assign' ] )
assign ( $p [ 'assign' ], $img );
else
return $img ;
}
} else {
return $this -> default_thumb ( $size , $output );
}
}
}
}
}
/**
* Will be called when collection is being deleted
* This will make photos in the collection orphan
* User will be able to access them in orphan photos
*/
function make_photo_orphan ( $details , $pid = NULL ) {
global $db ;
if ( ! is_array ( $details ) && is_numeric ( $details ) ) {
$c = $this -> collection -> get_collection ( $details );
$cid = $c [ 'collection_id' ];
}
else
$cid = $details [ 'collection_id' ];
if ( ! empty ( $pid ) )
$cond = " AND photo_id = $pid " ;
$db -> update ( tbl ( 'photos' ), array ( 'collection_id' ), array ( '0' ), " collection_id = $cid $cond " );
}
/**
* This will create download button for
* photo
*/
function download_button ( $params ) {
$output = '' ;
if ( ! is_array ( $params [ 'details' ] ) )
$p = $this -> get_photo ( $params [ 'details' ] );
else
$p = $params [ 'details' ];
$text = lang ( 'download_photo' );
if ( config ( 'photo_download' ) == 1 && ! empty ( $p ) ) {
if ( $params [ 'return_url' ] ) {
$output = $this -> photo_links ( $p , 'download_photo' );
if ( $params [ 'assign' ] ) {
assign ( $params [ 'assign' ], $output );
return ;
}
else
return $output ;
}
if ( $params [ 'output' ] == '' || $params [ 'output' ] == 'link' ) {
$output .= " <a href=' " . $this -> photo_links ( $p , 'download_photo' ) . " ' " ;
if ( $params [ 'id' ] )
$output .= " id = ' " . $params [ 'id' ] . " ' " ;
if ( $params [ 'class' ] )
$output .= " class = ' " . $params [ 'class' ] . " ' " ;
if ( $params [ 'target' ] )
$output .= " target = ' " . $params [ 'target' ] . " ' " ;
if ( $params [ 'style' ] )
$output .= " style = ' " . $params [ 'style' ] . " ' " ;
if ( $params [ 'title' ] )
$output .= " title = ' " . $params [ 'title' ] . " ' " ;
if ( $params [ 'relation' ] )
$output .= " rel = ' " . $params [ 'relation' ] . " ' " ;
$output .= " > " . $text . " </a> " ;
}
if ( $params [ 'output' ] == " div " ) {
$link = " ' " . $this -> photo_links ( $p , 'download' ) . " ' " ;
$new_window = $params [ 'new_window' ] ? " 'new' " : " 'same' " ;
$output .= '<div onClick = "openURL(' . $link . ',' . $new_window . ')"' ;
if ( $params [ 'id' ] )
$output .= " id = ' " . $params [ 'id' ] . " ' " ;
if ( $params [ 'class' ] )
$output .= " class = ' " . $params [ 'class' ] . " ' " ;
if ( $params [ 'style' ] )
$output .= " style = ' " . $params [ 'style' ] . " ' " ;
if ( $params [ 'align' ] )
$output .= " align = ' " . $params [ 'align' ] . " ' " ;
$output .= '>' . $text . '</div>' ;
}
if ( $params [ 'assign' ] )
assign ( $params [ 'assign' ], $output );
else
return $output ;
}
}
/**
* Used to load upload more photos
* This button will only appear if collection type is photos
* and user logged - in is Collection Owner
*/
function upload_photo_button ( $arr ) {
$cid = $arr [ 'details' ];
//pr($arr,TRUE);
$text = lang ( " add_more " );
$result = '' ;
if ( ! is_array ( $cid ) )
$details = $this -> collection -> get_collection ( $cid );
else
$details = $cid ;
if ( $details [ 'type' ] == 'photos' && $details [ 'userid' ] == user_id () ) {
$output = $arr [ 'output' ];
if ( $arr [ 'return_url' ] ) {
$result = $this -> photo_links ( $details , 'upload_more' );
if ( $arr [ 'assign' ] ) {
assign ( $arr [ 'assign' ], $result );
return ;
}
else
return $result ;
}
if ( empty ( $output ) || $output == " button " ) {
$result .= '<button type="button"' ;
$link = " ' " . $this -> photo_links ( $details , 'upload_more' ) . " ' " ;
if ( $arr [ 'new_window' ] || $arr [ 'target' ] == " _blank " )
$new_window = " 'new' " ;
else
$new_window = " 'same' " ;
$result .= 'onClick = "openURL(' . $link . ',' . $new_window . ')"' ;
if ( $arr [ 'id' ] )
$result .= ' id = "' . $arr [ 'id' ] . '"' ;
if ( $arr [ 'class' ] )
$result .= ' class = "' . $arr [ 'class' ] . '"' ;
if ( $arr [ 'title' ] )
$result .= ' title = "' . $arr [ 'title' ] . '"' ;
if ( $arr [ 'style' ] )
$result .= ' style = "' . $arr [ 'style' ] . '"' ;
if ( $arr [ 'extra' ] )
$result .= mysql_clean ( $arr [ 'extra' ] );
$result .= " > " . $text . " </button> " ;
}
if ( $output == " div " ) {
$result .= '<div ' ;
$link = " ' " . $this -> photo_links ( $details , 'upload_more' ) . " ' " ;
if ( $arr [ 'new_window' ] || $arr [ 'target' ] == " _blank " )
$new_window = " 'new' " ;
else
$new_window = " 'same' " ;
$result .= 'onClick = "openURL(' . $link . ',' . $new_window . ')"' ;
if ( $arr [ 'id' ] )
$result .= ' id = "' . $arr [ 'id' ] . '"' ;
if ( $arr [ 'align' ] )
$result .= ' align = "' . $arr [ 'align' ] . '"' ;
if ( $arr [ 'class' ] )
$result .= ' class = "' . $arr [ 'class' ] . '"' ;
if ( $arr [ 'title' ] )
$result .= ' title = "' . $arr [ 'title' ] . '"' ;
if ( $arr [ 'style' ] )
$result .= ' style = "' . $arr [ 'style' ] . '"' ;
if ( $arr [ 'extra' ] )
$result .= mysql_clean ( $arr [ 'extra' ] );
$result .= " > " . $text . " </div> " ;
}
if ( $output == " link " ) {
$result .= '<a href="' . $this -> photo_links ( $details , 'upload_more' ) . '"' ;
if ( $arr [ 'new_window' ] )
$result .= ' target = "_blank"' ;
elseif ( $arr [ 'target' ] )
$result .= ' target = "' . $arr [ 'target' ] . '"' ;
if ( $arr [ 'id' ] )
$result .= ' id = "' . $arr [ 'id' ] . '"' ;
if ( $arr [ 'align' ] )
$result .= ' align = "' . $arr [ 'align' ] . '"' ;
if ( $arr [ 'class' ] )
$result .= ' class = "' . $arr [ 'class' ] . '"' ;
if ( $arr [ 'title' ] )
$result .= ' title = "' . $arr [ 'title' ] . '"' ;
if ( $arr [ 'style' ] )
$result .= ' style = "' . $arr [ 'style' ] . '"' ;
if ( $arr [ 'extra' ] )
$result .= mysql_clean ( $arr [ 'extra' ] );
$result .= " > " . $text . " </a> " ;
}
if ( $arr [ 'assign' ] )
assign ( $arr [ 'assign' ], $result );
else
return $result ;
} else {
return FALSE ;
}
}
/**
* used to create links
*/
function photo_links ( $details , $type ) {
if ( empty ( $type ) )
return BASEURL ;
else {
switch ( $type ) {
case " upload " : {
if ( SEO == " yes " )
$link = BASEURL . " /photo_upload " ;
else
$link = BASEURL . " /photo_upload.php " ;
}
break ;
case " upload_more " : {
if ( SEO == " yes " )
$link = BASEURL . " /photo_upload/ " . $this -> encode_key ( $details [ 'collection_id' ] );
else
$link = BASEURL . " /photo_upload.php?collection= " . $this -> encode_key ( $details [ 'collection_id' ] );
}
break ;
case " download_photo " :
case " download " : {
return BASEURL . " /download_photo.php?download= " . $this -> encode_key ( $details [ 'photo_key' ] );
Added : Photo EXIF Data in insert_photo()
Added : Make Avatar from any photo
Added : Collection cover photo
Added : An array for thumb creations. Includes, code, width, height, watermark, sharpit
Added : Resizer class in common.php
Added : jquery.Jcrop.js in edit_account
Added : A common function called cb_filename. All filenames used in clipbucket follow a specific syntax
Added : Four new function for photos. get_original_photo, insert_photo_colors, insert_exif_data & add_custom_photo_size
Added : User Avatar collection functions. But they are not in use right now. This need proper thinking
Added : New files: mobile-form-class.php, resizer.class.php, exif.php, makers files for exif, jquery.Jcrop plugin, some template files
2012-05-16 07:27:54 +00:00
} break ;
2012-04-30 10:49:46 +00:00
case " view_item " :
case " view_photo " : {
return $this -> collection -> collection_links ( $details , 'view_item' );
}
break ;
Added : Photo EXIF Data in insert_photo()
Added : Make Avatar from any photo
Added : Collection cover photo
Added : An array for thumb creations. Includes, code, width, height, watermark, sharpit
Added : Resizer class in common.php
Added : jquery.Jcrop.js in edit_account
Added : A common function called cb_filename. All filenames used in clipbucket follow a specific syntax
Added : Four new function for photos. get_original_photo, insert_photo_colors, insert_exif_data & add_custom_photo_size
Added : User Avatar collection functions. But they are not in use right now. This need proper thinking
Added : New files: mobile-form-class.php, resizer.class.php, exif.php, makers files for exif, jquery.Jcrop plugin, some template files
2012-05-16 07:27:54 +00:00
case " make_avatar " : case " ma " : {
if ( $details [ 'collection_id' ] == 1 ) {
$set_avatar = '&set_avatar=1' ;
}
$link = BASEURL . '/edit_account.php?pid=' . $this -> encode_key ( RandomString ( 12 ) . $details [ 'photo_key' ]) . '&mode=make_avatar&u=' . $details [ 'userid' ] . $set_avatar ;
} break ;
2012-04-30 10:49:46 +00:00
}
return $link ;
}
}
/**
* Used to return default thumb
*/
function default_thumb ( $size = NULL , $output = NULL ) {
if ( $size != " _t " && $size != " _m " )
$size = " _m " ;
if ( file_exists ( TEMPLATEDIR . " /images/thumbs/no-photo " . $size . " .png " ) )
$path = TEMPLATEURL . " /images/thumbs/no-photo " . $size . " .png " ;
else
$path = PHOTOS_URL . " /no-photo " . $size . " .png " ;
if ( ! empty ( $output ) && $output == " html " )
echo " <img src=' " . $path . " ' /> " ;
else
return $path ;
}
/**
* Used to add comment
*/
function add_comment ( $comment , $obj_id , $reply_to = NULL , $force_name_email = false ) {
global $myquery ;
$photo = $this -> get_photo ( $obj_id );
if ( empty ( $photo ) )
e ( " photo_not_exist " );
else {
$ownerID = $photo [ 'userid' ];
$photoLink = $this -> photo_links ( $photo , 'view_item' );
$comment = $myquery -> add_comment ( $comment , $obj_id , $reply_to , 'p' , $ownerID , $photoLink , $force_name_email );
if ( $comment ) {
$this -> update_total_comments ( $obj_id );
}
return $comment ;
}
}
/**
* Function used to update total comments of collection
*/
function update_total_comments ( $pid ) {
global $db ;
$count = $db -> count ( tbl ( " comments " ), " comment_id " , " type = 'p' AND type_id = ' $pid ' " );
$db -> update ( tbl ( 'photos' ), array ( " total_comments " , " last_commented " ), array ( $count , now ()), " photo_id = ' $pid ' " );
}
/**
* Used to check if collection can add
* photos or not
*/
function is_addable ( $cid ) {
if ( ! is_array ( $cid ) )
$details = $this -> collection -> get_collection ( $cid );
else
$details = $cid ;
if ( empty ( $details ) ) {
return false ;
} else {
if ( ( $details [ 'active' ] == 'yes' || $details [ 'broadcast' ] == 'public' ) && $details [ 'userid' ] == userid () )
return true ;
elseif ( $details [ 'userid' ] == userid () )
return true ;
else
return false ;
}
}
/**
* Used to display photo voterts details .
* User who rated , how many stars and when user rated
*/
function photo_voters ( $id , $return_array = FALSE , $show_all = FALSE ) {
global $json ;
$p = $this -> get_photo ( $id );
if ( ( ! empty ( $p ) && $p [ 'userid' ] == userid ()) || $show_all === TRUE ) {
global $userquery ;
$voters = $p [ 'voters' ];
if ( phpversion () < " 5.2.0 " )
$voters = $json -> json_decode ( $voters , TRUE );
else
$voters = json_decode ( $voters , TRUE );
if ( ! empty ( $voters ) ) {
if ( $return_array )
return $voters ;
else {
foreach ( $voters as $id => $details ) {
$username = get_username ( $id );
$output = " <li id='user " . $id . $p [ 'photo_id' ] . " ' class='PhotoRatingStats'> " ;
$output .= " <a href=' " . $userquery -> profile_link ( $id ) . " '> $username </a> " ;
$output .= " rated <strong> " . $details [ 'rate' ] / 2 . " </strong> stars <small>( " ;
$output .= niceTime ( $details [ 'time' ] ) . " )</small> " ;
$output .= " </li> " ;
echo $output ;
}
}
}
} else
return false ;
}
/**
* Used to get current rating
*/
function current_rating ( $id ) {
global $db ;
if ( ! is_numeric ( $id ) )
$result = $db -> select ( tbl ( 'photos' ), 'userid,allow_rating,rating,rated_by,voters' , " photo_key = " . $id . " " );
else
$result = $db -> select ( tbl ( 'photos' ), 'userid,allow_rating,rating,rated_by,voters' , " photo_id = " . $id . " " );
if ( $result )
return $result [ 0 ];
else
return false ;
}
/**
* Used to rate photo
*/
function rate_photo ( $id , $rating ) {
global $db , $json ;
if ( ! is_numeric ( $rating ) || $rating <= 9 )
$rating = 0 ;
if ( $rating >= 10 )
$rating = 10 ;
$c_rating = $this -> current_rating ( $id );
$voters = $c_rating [ 'voters' ];
$new_rate = $c_rating [ 'rating' ];
$rated_by = $c_rating [ 'rated_by' ];
if ( phpversion < '5.2.0' )
$voters = $json -> json_decode ( $voters , TRUE );
else
$voters = json_decode ( $voters , TRUE );
if ( ! empty ( $voters ) )
$already_voted = array_key_exists ( userid (), $voters );
if ( ! userid () )
e ( lang ( " please_login_to_rate " ) );
elseif ( userid () == $c_rating [ 'userid' ] && ! config ( 'own_photo_rating' ) )
e ( lang ( " you_cannot_rate_own_photo " ) );
elseif ( ! empty ( $already_voted ) )
e ( lang ( " you_hv_already_rated_photo " ) );
elseif ( $c_rating [ 'allow_rating' ] == 'no' || ! config ( 'photo_rating' ) )
e ( lang ( " photo_rate_disabled " ) );
else {
$voters [ userid ()] = array ( 'rate' => $rating , 'time' => NOW ());
if ( phpversion < '5.2.0' )
$voters = $json -> json_encode ( $voters );
else
$voters = json_encode ( $voters );
$t = $c_rating [ 'rated_by' ] * $c_rating [ 'rating' ];
$rated_by = $c_rating [ 'rated_by' ] + 1 ;
$new_rate = ( $t + $rating ) / $rated_by ;
$db -> update ( tbl ( 'photos' ), array ( 'rating' , 'rated_by' , 'voters' ), array ( " $new_rate " , " $rated_by " , " |no_mc| $voters " ), " photo_id = " . $id . " " );
$userDetails = array (
" object_id " => $id ,
" type " => " photo " ,
" time " => now (),
" rating " => $rating ,
" userid " => userid (),
" username " => username ()
);
/* Updating user details */
update_user_voted ( $userDetails );
e ( lang ( " thnx_for_voting " ), " m " );
}
$return = array ( " rating " => $new_rate , " rated_by " => $rated_by , 'total' => 10 , " id " => $id , " type " => " photo " , " disable " => " disabled " );
return $return ;
}
/**
* Used to generate different
* embed codes
*/
function generate_embed_codes ( $p ) {
$details = $p [ 'details' ];
$type = $p [ 'type' ];
$size = $p [ 'size' ] ? $p [ 'size' ] : 'm' ;
if ( is_array ( $details ) )
$photo = $details ;
else
$photo = $this -> get_photo ( $detials );
switch ( $type ) {
case " html " : {
if ( $p [ 'with_url' ] )
$code .= " <a href=' " . $this -> collection -> collection_links ( $photo , 'view_item' ) . " ' target='_blank'> " ;
$code .= " <img src=' " . $this -> get_image_file ( $photo , $size ) . " ' title=' " . $photo [ 'photo_title' ] . " ' alt=' " . $photo [ 'photo_title' ] . " " . TITLE . " ' /> " ;
if ( $p [ 'with_url' ] )
$code .= " </a> " ;
}
break ;
case " forum " : {
if ( $p [ 'with_url' ] )
$code .= " [URL= " . $this -> collection -> collection_links ( $photo , 'view_item' ) . " ] " ;
$code .= " [IMG] " . $this -> get_image_file ( $photo , $size ) . " [/IMG] " ;
if ( $p [ 'with_url' ] )
$code .= " [/URL] " ;
}
break ;
case " email " : {
$code .= $this -> collection -> collection_links ( $photo , 'view_item' );
}
break ;
case " direct " : {
$code .= $this -> get_image_file ( $photo , " o " );
}
break ;
default :
return false ;
}
return $code ;
}
/**
* Embed Codes
*/
function photo_embed_codes ( $newArr ) {
if ( empty ( $newArr [ 'details' ] ) ) {
echo " <div class='error'> " . e ( lang ( " need_photo_details " ) ) . " </div> " ;
} elseif ( $newArr [ 'details' ][ 'allow_embedding' ] == 'no' ) {
echo " <div class='error'> " . e ( lang ( " embedding_is_disabled " ) ) . " </div> " ;
} else {
$t = $newArr [ 'type' ];
if ( is_array ( $t ) )
$types = $t ;
elseif ( $t == 'all' )
$types = $this -> embed_types ;
else
$types = explode ( ',' , $t );
foreach ( $types as $type ) {
$type = strtolower ( $type );
if ( in_array ( $type , $this -> embed_types ) ) {
$type = str_replace ( ' ' , '' , $type );
$newArr [ 'type' ] = $type ;
$codes [] = array ( " name " => ucwords ( $type ), " type " => $type , " code " => $this -> generate_embed_codes ( $newArr ));
}
}
if ( $newArr [ 'assign' ] )
assign ( mysql_clean ( $newArr [ 'assign' ] ), $codes );
else
return $codes ;
}
}
/**
* Used encode photo key
*/
function encode_key ( $key ) {
return base64_encode ( serialize ( $key ) );
}
/**
* Used encode photo key
*/
function decode_key ( $key ) {
return unserialize ( base64_decode ( $key ) );
}
function incrementDownload ( $Array ) {
global $db ;
if ( ! isset ( $_COOKIE [ $Array [ 'photo_id' ] . " _downloaded " ] ) ) {
$db -> update ( tbl ( 'photos' ), array ( 'downloaded' ), array ( '|f|downloaded+1' ), ' photo_id = "' . $Array [ 'photo_id' ] . '"' );
setcookie ( $Array [ 'photo_id' ] . " _downloaded " , NOW (), time () + 1800 );
}
}
function download_photo ( $key ) {
$file = $this -> ready_photo_file ( $key );
if ( $file ) {
if ( $file [ 'details' ][ 'server_url' ] ) {
$url = dirname ( dirname ( $file [ 'details' ][ 'server_url' ] ) );
header ( 'location:' . $url . '/download_photo.php?file=' . $file [ 'details' ][ 'filename' ]
. '.' . $file [ 'details' ][ 'ext' ] . '&folder=' . $file [ 'details' ][ 'file_directory' ]
. '&title=' . urlencode ( $file [ 'details' ][ 'photo_title' ] ) );
$this -> incrementDownload ( $p );
return true ;
}
$p = $file [ 'details' ];
$mime_types = array ();
$mime_types [ 'gif' ] = 'image/gif' ;
$mime_types [ 'jpe' ] = 'image/jpeg' ;
$mime_types [ 'jpeg' ] = 'image/jpeg' ;
$mime_types [ 'jpg' ] = 'image/jpeg' ;
$mime_types [ 'png' ] = 'image/png' ;
if ( array_key_exists ( $p [ 'ext' ], $mime_types ) ) {
$mime = $mime_types [ $p [ 'ext' ]];
if ( file_exists ( $file [ 'file_dir' ] ) ) {
if ( is_readable ( $file [ 'file_dir' ] ) ) {
$size = filesize ( $file [ 'file_dir' ] );
if ( $fp = @ fopen ( $file [ 'file_url' ], 'r' ) ) {
$this -> incrementDownload ( $p );
// sending the headers
/* Alternate Download Method
header ( 'Content-Type: application/octet-stream' );
header ( " Content-Length: $size " );
header ( " Content-Disposition: attachment; filename= \" " . $p [ 'photo_title' ] . " . " . $p [ 'ext' ] . " \" " );
header ( 'Content-Transfer-Encoding: binary' );
header ( 'Pragma: public' );
ob_clean ();
flush ();
readfile ( $photo_file ); */
header ( " Content-type: $mime " );
header ( " Content-Length: $size " );
header ( " Content-Disposition: attachment; filename= \" " . $p [ 'photo_title' ] . " . " . $p [ 'ext' ] . " \" " );
// send the file content
fpassthru ( $fp );
// close the file
fclose ( $fp );
// and quit
exit ;
}
} else {
e ( lang ( " photo_not_readable " ) );
}
} else {
e ( lang ( " photo_not_exist " ) );
}
} else {
e ( lang ( " wrong_mime_type " ) );
}
} else
return false ;
}
/**
* Ready photo for downloading
*/
function ready_photo_file ( $pid ) {
$photo = $this -> get_photo ( $pid );
if ( empty ( $photo ) )
e ( lang ( " photo_not_exist " ) );
else {
if ( ! $this -> collection -> is_viewable ( $photo [ 'collection_id' ] ) )
return false ;
else {
$filename = $this -> get_image_file ( $photo [ 'photo_id' ], 'o' , FALSE , FALSE , FALSE );
$returnArray = array (
" file_dir " => PHOTOS_DIR . " / " . $filename ,
" file_url " => PHOTOS_URL . " / " . $filename ,
" filename " => $filename ,
" details " => $photo
);
return $returnArray ;
}
}
}
/**
* Used to perform photo actions
*/
function photo_actions ( $action , $id ) {
global $db ;
switch ( $action ) {
case " activate " :
case " activation " :
case " ap " : {
$db -> update ( tbl ( $this -> p_tbl ), array ( " active " ), array ( " yes " ), " photo_id = $id " );
e ( lang ( " photo_activated " ), " m " );
}
break ;
case " deactivate " :
case " deactivation " :
case " dap " : {
$db -> update ( tbl ( $this -> p_tbl ), array ( " active " ), array ( " no " ), " photo_id = $id " );
e ( lang ( " photo_deactivated " ), " m " );
}
break ;
case " make_featured " :
case " feature_photo " :
case " fp " : {
$db -> update ( tbl ( $this -> p_tbl ), array ( " featured " ), array ( " yes " ), " photo_id = $id " );
e ( lang ( " photo_featured " ), " m " );
}
break ;
case " make_unfeatured " :
case " unfeature_photo " :
case " ufp " : {
$db -> update ( tbl ( $this -> p_tbl ), array ( " featured " ), array ( " no " ), " photo_id = $id " );
e ( lang ( " photo_unfeatured " ), " m " );
}
break ;
}
}
function get_selector_id () {
return $this -> selector_id ;
}
function set_selector_id ( $id ) {
return $this -> selector_id = $id ;
}
function get_tagger_config ( $name ) {
return $this -> tagger_configs [ $name ] ? $this -> tagger_configs [ $name ] : false ;
}
function load_default_tagger_configs ( $json = false ) {
//Following are default tagger configs, which user should
// have control over.
$defaults = array (
'allowTagging' => 'yes' ,
'autoComplete' => false ,
'autoCompleteOptions' => array (),
'showLabels' => true ,
'labelWrapper' => null ,
'labelLinksNew' => false ,
'makeString' => true ,
'makeStringCSS' => false ,
'default_tags' => null ,
'wrapDeleteLinks' => true ,
'use_percentage' => true ,
'use_arrows' => true ,
'phrases' => array (
'tagging_disabled' => lang ( 'tagging_disabled' ),
'start_tagging' => lang ( 'tag_photo' ),
'stop_tagging' => lang ( 'tag_done' ),
'cancel_tag' => lang ( 'cancel_tag' ),
'save_tag' => lang ( 'save_tag' ),
'saving_tag' => lang ( 'saving_tag' ),
'empty_tag' => lang ( 'tag_is_empty' ),
'remove_tag' => lang ( 'remove_tag' ),
'confirm_remove_tag' => lang ( 'confirm_remove_tag' ),
'pending_tag' => lang ( 'tag_pending' )
)
);
if ( $json === true ) :
return json_encode ( $defaults );
else :
return $defaults ;
endif ;
}
function set_default_tagger_configs () {
$configs = $this -> load_default_tagger_configs ();
return $this -> tagger_configs = $configs ;
}
function get_default_tagger_configs () {
return $this -> tagger_configs ;
}
function load_tagging () {
$args = func_get_args (); $photo = $args [ 0 ];
// If photo tagging is disabled by admin return false
if ( USE_PHOTO_TAGGING != true ) {
return false ;
} else if ( ! $photo || empty ( $photo ) ) {
return false ;
} else {
global $userquery ;
if ( ! empty ( $args [ 1 ]) || $args [ 1 ] != '' || is_null ( $args [ 1 ] ) ) {
$options = cb_parse_args_string ( $args [ 1 ]);
}
if ( is_array ( $options ) && ! empty ( $options )) {
$options = array_merge ( $this -> load_default_tagger_configs (), $options );
} else {
$options = $this -> get_default_tagger_configs ();
}
$options [ 'allowTagging' ] = $photo [ 'allow_tagging' ];
$tags = $this -> get_photo_tags ( $photo [ 'photo_id' ] );
$uid = userid ();
/* Get user contacts list . This will help us in making suggestions
while tagging . Showing profile link on tag
*/
if ( $uid ) {
$friends = $userquery -> get_contacts ( $uid , 0 , 'yes' );
}
if ( $friends ) {
foreach ( $friends as $contact ) {
$fa [ $contact [ 'contact_userid' ]] = $contact [ 'username' ];
$typeahead [] = $contact [ 'username' ];
}
}
if ( $tags ) {
/* Tags exists */
foreach ( $tags as $tag ) {
$needs_update = false ;
/* Check if tag is active or not and if current user is not tagger or owner of photo or is guest, do not show tag */
if ( ( ! $uid && $tag [ 'ptag_active' ] == 'no' ) || ( $tag [ 'ptag_active' ] == 'no' && $uid && $tag [ 'ptag_by_userid' ] != $uid && $tag [ 'photo_owner_userid' ] != $uid ) ) {
continue ;
}
$ta = array ();
$ta [ 'id' ] = $tag [ 'ptag_id' ];
$ta [ 'key' ] = $tag [ 'ptag_key' ];
$ta [ 'width' ] = $tag [ 'ptag_width' ];
$ta [ 'height' ] = $tag [ 'ptag_height' ];
$ta [ 'left' ] = $tag [ 'ptag_left' ];
$ta [ 'top' ] = $tag [ 'ptag_top' ];
$ta [ 'label' ] = $tag [ 'username' ] = $tag [ 'ptag_username' ];
$ta [ 'added_by' ] = $tag [ 'ptag_by_username' ];
$ta [ 'date_added' ] = nicetime ( $tag [ 'date_added' ], true );
if ( $tag [ 'ptag_active' ] == 'no' ) {
$ta [ 'pending' ] = true ;
}
/* Photo owner and User which has tagged */
if ( $uid == $tag [ 'photo_owner_userid' ] || $uid == $tag [ 'ptag_by_userid' ] ) {
$ta [ 'canDelete' ] = true ;
}
/*
If make sure tag is a user
See which person is online , tagger or tagged
If Tagger is online , give him option to delete
if Tagged is online , check if it 's tagger' s friend
if true , give option to delete
*/
if ( $tag [ 'ptag_isuser' ] == 1 ) {
if ( $uid == $tag [ 'ptag_by_userid' ] ){ // Tagger is online
$ta [ 'canDelete' ] = true ; // Grant him access to delete
if ( is_array ( $friends ) && $fa [ $tag [ 'ptag_userid' ] ] ) {
$ta [ 'link' ] = $userquery -> profile_link ( $tag [ 'ptag_userid' ] );
// Person tagged is in his contacts lists and already been tagged, remove it from typahead array
unset ( $typeahead [ end ( array_keys ( $typeahead , $tag [ 'ptag_username' ])) ] );
}
} else if ( $uid == $tag [ 'ptag_userid' ] ) {
if ( is_array ( $friends ) && $fa [ $tag [ 'ptag_by_userid' ] ] ) {
$ta [ 'canDelete' ] = true ;
$ta [ 'link' ] = $userquery -> profile_link ( $tag [ 'ptag_userid' ] );
}
}
}
$defaultTags [] = $ta ;
}
$options [ 'defaultTags' ] = $defaultTags ;
}
if ( $friends && $typeahead && $options [ 'autoComplete' ] == 1 ) {
$options [ 'autoCompleteOptions' ][ 'source' ] = $typeahead ;
}
assign ( 'tagger_configs' , json_encode ( $options ));
assign ( 'selector_id' , $this -> get_selector_id ());
assign ( 'photo' , $photo );
Template ( STYLES_DIR . '/global/photo_tagger.html' , false );
}
}
function tag_exists ( $pid , $hash ) {
global $db ;
$result = $db -> count ( tbl ( 'photo_tags' ), 'photo_id' , " photo_id = ' " . $pid . " ' AND ptag_key = ' " . $hash . " ' " );
if ( $result ) {
return true ;
} else {
return false ;
}
}
function add_new_tag ( $array = null ) {
global $userquery , $db ;
if ( is_null ( $array ) ) {
$array = $_POST ;
}
$tag = $array [ 'label' ];
$photo = $this -> get_photo ( $array [ 'pid' ] ); $owner = $userquery -> get_user_details ( $photo [ 'userid' ], false , true ); $logged = $tagged_by = $userquery -> udetails ; $tagged = $array [ 'label' ];
$hash = $tag ; $hash_id = null ; $is_user = false ; $is_friend = false ; $needs_approval = $photo [ 'tag_moderation' ] = 'no' ;
$tagged_userid = 0 ; $tagged_username = $tagged_name = $tag ;
if ( empty ( $photo ) ) {
e ( lang ( 'photo_not_exists' ));
return false ;
}
/* Check if the label is user or not */
if ( $user = $userquery -> get_user_details ( $tagged , false , true ) ) {
$is_user = true ; $tagged_userid = $user [ 'userid' ];
$tagged_username = $tagged_name = $user [ 'username' ];
if ( $user [ 'first_name' ] && $user [ 'last_name' ] ) {
$tagged_name = $user [ 'first_name' ] . ' ' . $user [ 'last_name' ];
}
/* Check if this user is a confirmed friend or not */
if ( $userquery -> is_confirmed_friend ( $logged [ 'userid' ], $tagged_userid ) ) {
$is_friend = true ; $hash_id = $user [ 'userid' ];
}
}
/* Checking if tag should be active or not */
if ( $needs_approval == 'yes' && $tagged_by [ 'userid' ] != $photo [ 'userid' ] ) {
$tag_active = 'no' ;
} else {
$tag_active = 'yes' ;
}
/*
Create tag hash . If user is confirmed friend we 'll add it' s id
to make hash to unique to him
*/
$tag_hash = $this -> create_tag_hash ( $hash , $hash_id );
if ( $this -> tag_exists ( $photo [ 'photo_id' ], $tag_hash ) ) {
e ( lang ( 'tag_already_exists' ));
return false ;
} else {
$ta = array (
'ptag_key' => $tag_hash ,
'ptag_width' => $array [ 'width' ],
'ptag_height' => $array [ 'height' ],
'ptag_top' => $array [ 'top' ],
'ptag_left' => $array [ 'left' ],
/* Tag details either simple/user/friend */
'ptag_isuser' => $is_user ,
'ptag_isfriend' => $is_friend ,
'ptag_userid' => $tagged_userid ,
'ptag_username' => $tagged_username ,
'ptag_name' => $tagged_name ,
/* User which tagged */
'ptag_by_userid' => $logged [ 'userid' ],
'ptag_by_username' => $logged [ 'username' ],
'ptag_by_name' => ( $logged [ 'first_name' ] && $logged [ 'last_name' ] ? $logged [ 'first_name' ] . ' ' . $logged [ 'last_name' ] : $logged [ 'username' ]),
/* Photo owner details */
'photo_id' => $photo [ 'photo_id' ],
'photo_owner_userid' => $photo [ 'userid' ],
'photo_owner_username' => $owner [ 'username' ],
'photo_owner_name' => ( $owner [ 'first_name' ] && $owner [ 'last_name' ] ? $owner [ 'first_name' ] . ' ' . $owner [ 'last_name' ] : $owner [ 'username' ]),
'ptag_active' => $tag_active ,
'date_added' => time ()
);
/* Construct arrays for fields and their corresponding values */
foreach ( $ta as $field => $value ) {
$fields [] = $field ;
$values [] = $value ;
}
/* Now insert tag in database */
$tag_id = $db -> insert ( tbl ( 'photo_tags' ), $fields , $values );
if ( $tag_id ) {
/* Update count of photo ptags_count */
$db -> update ( tbl ( 'photos' ), array ( 'ptags_count' ), array ( '|f|ptags_count+1' ), " photo_id = ' " . $photo [ 'photo_id' ] . " ' " );
/* Update $tagged_by details */
/* $tagged_by_ptags = json_decode ( $tagged_by [ 'ptags_by' ], true );
$tagged_by_ptags = is_array ( $tagged_by_ptags ) ? $tagged_by_ptags : array ();
$tagged_by_ptags [ $photo [ 'photo_id' ]] += 1 ;
$db -> update ( tbl ( 'users' ), array ( 'ptags_by' , 'ptags_by_count' ), array ( '|no_mc|' . json_encode ( $tagged_by_ptags ), '|f|ptags_by_count+1' ), " userid = ' " . $tagged_by [ 'userid' ] . " ' " ); */
/* Update tag details if it is a user and a confirmed friend of tagger */
/* if ( $is_user == true && $is_friend == true ) {
$tagged_ptags = json_decode ( $user [ 'ptags' ], true );
$tagged_ptags = is_array ( $tagged_ptags ) ? $tagged_ptags : array ();
$tagged_ptags [ $photo [ 'photo_id' ]] += 1 ;
$db -> update ( tbl ( 'users' ), array ( 'ptags' , 'ptags_count' ), array ( '|no_mc|' . json_encode ( $tagged_ptags ), '|f|ptags_count+1' ), " userid = ' " . $user [ 'userid' ] . " ' " );
} */
return $tag_id ;
} else {
e ( lang ( 'unable_to_tag' ));
return false ;
}
}
}
function get_photo_tags ( $photo , $limit = null , $cond = null , $order = 'date_added ASC' ) {
global $db ;
if ( ! is_null ( $cond ) ) {
$cond = ' AND ' . $cond ;
}
$results = $db -> select ( tbl ( 'photo_tags' ), '*' , " photo_id = ' " . $photo . " ' || ptag_key = ' " . $photo . " ' || ptag_id = ' " . $photo . " ' " . $cond . " " , $limit , $order );
if ( $results ) {
return $results ;
} else {
return false ;
}
}
function create_tag_hash ( $tag , $uid = null ) {
$tag = mb_strtolower ( $tag );
$tag = preg_replace ( '/[^a-z0-9]/' , '' , $tag );
if ( ! is_null ( $tag ) ) {
if ( ! is_null ( $uid ) ) {
$tag .= $uid ;
}
return md5 ( $tag );
}
}
function get_tag_with_id ( $tag_id , $pid = null , $cond = null ) {
global $db ; $condition = '' ;
if ( ! is_null ( $pid ) ) {
$condition = " AND photo_id = ' " . $pid . " ' " ;
}
if ( ! is_null ( $cond ) ) {
$condition = ( $condition ? $condition . ' AND ' . $cond : $cond );
}
$result = $db -> select ( tbl ( 'photo_tags' ), '*' , " ptag_id = ' " . $tag_id . " ' || ptag_key = ' " . $tag_id . " ' " . $condition . " " );
if ( $result ) {
return $result [ 0 ];
} else {
return false ;
}
}
function remove_photo_tag ( $tag ) {
global $db , $userquery ;
$uid = $userquery -> userid ;
if ( empty ( $uid )) {
e ( lang ( 'login_to_remove_tag' ));
return false ;
}
if ( ! is_array ( $tag ) ) {
$tag = $this -> get_tag_with_id ( $tag );
} else {
$tag = $tag ;
}
/* if tag is empty return */
if ( empty ( $tag ) ) {
e ( lang ( 'tag_not_exist' ));
return false ;
}
/* if user is not photo owner or tagger or tagged */
if ( $uid != $tag [ 'photo_owner_userid' ] && $uid != $tag [ 'ptag_by_userid' ] && $tag [ 'ptag_isuser' ] == false ) {
e ( lang ( 'cant_remove_tag_1' ));
return false ;
}
/* if tagged is user, make sure tag hash matches */
if ( $tag [ 'ptag_isuser' ] == true ) {
if ( $uid == $tag [ 'ptag_userid' ] ) {
if ( $this -> create_tag_hash ( $tag [ 'ptag_username' ], $tag [ 'ptag_userid' ] ) != $tag [ 'ptag_key' ] ) {
e ( lang ( 'cant_remove_tag_2' ));
return false ;
}
}
}
/* Deletion Good TO GO */
$db -> delete ( tbl ( 'photo_tags' ), array ( 'ptag_id' ), array ( $tag [ 'ptag_id' ]) );
/* Decrease photo tag count */
$db -> update ( tbl ( 'photos' ), array ( 'ptags_count' ), array ( '|f|ptags_count-1' ), " photo_id = ' " . $tag [ 'photo_id' ] . " ' " );
return true ;
}
2010-12-14 14:20:52 +00:00
}
2012-04-30 10:49:46 +00:00
?>