diff -r 000000000000 -r d970ebf37754 wp/wp-content/plugins/portfolio/portfolio.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wp/wp-content/plugins/portfolio/portfolio.php Wed Nov 06 03:21:17 2013 +0000 @@ -0,0 +1,1346 @@ +

'.__( 'The files "portfolio.php" and "portfolio-post.php" are not found in your theme directory. Please copy them from the directory `wp-content/plugins/portfolio/template/` to your theme directory for correct work of the Portfolio plugin', 'portfolio' ).'

'; + } + } +} + +if ( ! function_exists( 'prtfl_plugin_uninstall' ) ) { + function prtfl_plugin_uninstall() { + if ( file_exists( get_stylesheet_directory() .'/portfolio.php' ) && ! unlink(get_stylesheet_directory() .'/portfolio.php') ) { + add_action( 'admin_notices', create_function( '', ' return "Error delete template file";' ) ); + } + if ( file_exists( get_stylesheet_directory() .'/portfolio-post.php' ) && ! unlink(get_stylesheet_directory() .'/portfolio-post.php') ) { + add_action( 'admin_notices', create_function( '', ' return "Error delete template file";' ) ); + } + if( get_option( 'prtfl_postmeta_update' ) ) { + delete_option( 'prtfl_postmeta_update' ); + } + if( get_option( 'prtfl_tag_update' ) ) { + delete_option( 'prtfl_tag_update' ); + } + if( get_option( 'prtfl_options' ) ) { + delete_option( 'prtfl_options' ); + } + } +} + +if ( ! function_exists ( 'prtfl_plugin_init' ) ) { + function prtfl_plugin_init() { + // Internationalization, first(!) + load_plugin_textdomain( 'portfolio', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); + load_plugin_textdomain( 'bestwebsoft', false, dirname( plugin_basename( __FILE__ ) ) . '/bws_menu/languages/' ); + global $prtfl_boxes; + $prtfl_boxes['Portfolio-Info'] = array( + array( '_prtfl_short_descr', __( 'Short description', 'portfolio' ), __( 'A short description which you\'d like to be displayed on your portfolio page', 'portfolio' ), '', '' ), + array( '_prtfl_date_compl', __( 'Date of completion', 'portfolio' ), __( 'The date when the task was completed', 'portfolio' ), '', '' ), + array( '_prtfl_link', __( 'Link', 'portfolio' ), __( 'A link to the site', 'portfolio' ), '', '' ), + array( '_prtfl_svn', __( 'SVN', 'portfolio' ), __( 'SVN URL', 'portfolio' ), '', '' ), + ); + + } +} + +// Create post type for portfolio +if ( ! function_exists( 'prtfl_post_type_portfolio' ) ) { + function prtfl_post_type_portfolio() { + global $wpdb; + prtfl_replace_old_post_tag(); + $options = get_site_option( 'prtfl_options' ); + $slug = isset( $options['prtfl_slug'] ) && ! empty( $options['prtfl_slug'] ) ? $options['prtfl_slug'] : 'portfolio'; + register_post_type( + 'portfolio', + array( + 'labels' => array( + 'name' => __( 'Portfolio', 'portfolio' ), + 'singular_name' => __( 'Portfolio', 'portfolio' ), + 'add_new' => __( 'Add New', 'portfolio' ), + 'add_new_item' => __( 'Add New Portfolio', 'portfolio' ), + 'edit' => __( 'Edit', 'portfolio' ), + 'edit_item' => __( 'Edit Portfolio', 'portfolio' ), + 'new_item' => __( 'New Portfolio', 'portfolio' ), + 'view' => __( 'View Portfolio', 'portfolio' ), + 'view_item' => __( 'View Portfolio', 'portfolio' ), + 'search_items' => __( 'Search Portfolio', 'portfolio' ), + 'not_found' => __( 'No portfolio found', 'portfolio' ), + 'not_found_in_trash' => __( 'No portfolio found in Trash', 'portfolio' ), + 'parent' => __( 'Parent Portfolio', 'portfolio' ), + ), + 'description' => __( 'Create a portfolio item', 'portfolio' ), + 'public' => true, + 'show_ui' => true, + 'publicly_queryable' => true, + 'exclude_from_search' => true, + 'menu_position' => 6, + 'hierarchical' => true, + 'query_var' => true, + 'register_meta_box_cb' => 'prtfl_init_metaboxes', + 'rewrite' => array( 'slug' => $slug ), + 'supports' => array ( + 'title', //Text input field to create a post title. + 'editor', + 'custom-fields', + 'comments', //Ability to turn on/off comments. + 'thumbnail', //Displays a box for featured image. + 'author' + ) + ) + ); + } +} + +// Create taxonomy for portfolio - Technologies and Executors Profile +if ( ! function_exists( 'prtfl_taxonomy_portfolio' ) ) { + function prtfl_taxonomy_portfolio() { + register_taxonomy( + 'portfolio_executor_profile', + 'portfolio', + array( + 'hierarchical' => false, + 'update_count_callback' => '_update_post_term_count', + 'labels' => array( + 'name' => __( 'Executor Profiles', 'portfolio' ), + 'singular_name' => __( 'Executor Profile', 'portfolio' ), + 'search_items' => __( 'Search Executor Profiles', 'portfolio' ), + 'popular_items' => __( 'Popular Executor Profiles', 'portfolio' ), + 'all_items' => __( 'All Executor Profiles', 'portfolio' ), + 'parent_item' => __( 'Parent Executor Profile', 'portfolio' ), + 'parent_item_colon' => __( 'Parent Executor Profile:', 'portfolio' ), + 'edit_item' => __( 'Edit Executor Profile', 'portfolio' ), + 'update_item' => __( 'Update Executor Profile', 'portfolio' ), + 'add_new_item' => __( 'Add New Executor Profile', 'portfolio' ), + 'new_item_name' => __( 'New Executor Name', 'portfolio' ), + 'separate_items_with_commas' => __( 'Separate Executor Profiles with commas', 'portfolio' ), + 'add_or_remove_items' => __( 'Add or remove Executor Profile', 'portfolio' ), + 'choose_from_most_used' => __( 'Choose from the most used Executor Profiles', 'portfolio' ), + 'menu_name' => __( 'Executors', 'portfolio' ) + ), + 'sort' => true, + 'args' => array( 'orderby' => 'term_order' ), + 'rewrite' => array( 'slug' => 'executor_profile' ), + 'show_tagcloud' => false + ) + ); + + register_taxonomy( + 'portfolio_technologies', + 'portfolio', + array( + 'hierarchical' => false, + 'update_count_callback' => '_update_post_term_count', + 'labels' => array( + 'name' => __( 'Technologies', 'portfolio' ), + 'singular_name' => __( 'Technology', 'portfolio'), + 'search_items' => __( 'Search Technologies', 'portfolio' ), + 'popular_items' => __( 'Popular Technologies', 'portfolio' ), + 'all_items' => __( 'All Technologies', 'portfolio' ), + 'parent_item' => __( 'Parent Technology', 'portfolio' ), + 'parent_item_colon' => __( 'Parent Technology:', 'portfolio' ), + 'edit_item' => __( 'Edit Technology', 'portfolio' ), + 'update_item' => __( 'Update Technology', 'portfolio' ), + 'add_new_item' => __( 'Add New Technology', 'portfolio' ), + 'new_item_name' => __( 'New Technology Name', 'portfolio' ), + 'separate_items_with_commas' => __( 'Separate Technologies with commas', 'portfolio' ), + 'add_or_remove_items' => __( 'Add or remove Technology', 'portfolio' ), + 'choose_from_most_used' => __( 'Choose from the most used technologies', 'portfolio' ), + 'menu_name' => __( 'Technologies', 'portfolio' ) + ), + 'query_var' => 'technologies', + 'rewrite' => array( 'slug' => 'technologies' ), + 'public' => true, + 'show_ui' => true, + '_builtin' => true, + 'show_tagcloud' => false + ) + ); + } +} + +if ( ! function_exists( 'prtfl_technologies_get_posts' ) ) { + function prtfl_technologies_get_posts( $query ) { + if ( isset( $query->query_vars["technologies"] ) ) + $query->set( 'post_type', array( 'portfolio' ) ); + return $query; + } +} + +if ( ! function_exists( 'prtfl_register_widget' ) ) { + function prtfl_register_widget() { + $control_ops = array('width' => 200, 'height' => 200, 'id_base' => 'portfolio_technologies_widget'); + + wp_register_sidebar_widget( + 'portfolio_technologies_widget', + __( 'Technologies', 'portfolio' ), + 'prtfl_widget_display', + array( + 'description' => __( 'Your most used portfolio technologies as a tag cloud', 'portfolio' ) + ) + ); + wp_register_widget_control( + 'portfolio_technologies_widget', // your unique widget id + __( 'Technologies', 'portfolio' ), // widget name + 'prtfl_widget_display_control', // Callback function + $control_ops, + array( 'number' => 1 ) + ); + } +} + +if ( ! function_exists( 'prtfl_widget_display' ) ) { + function prtfl_widget_display( $args, $vars = array() ) { + // print some HTML for the widget to display here + extract( $args); + $options = get_option( 'widget-portfolio_technologies_widget' ); + if ( !empty( $options[1]['title'] ) ) { + $title = $options[1]['title']; + } else { + $title = $widget_name; + } + $title = apply_filters( 'widget_title', $title, '', 'portfolio_technologies_widget' ); + + echo $before_widget; + if ( $title ) + echo $before_title . $title . $after_title; + echo '
'; + wp_tag_cloud( apply_filters( 'widget_tag_cloud_args', array( 'taxonomy' => 'portfolio_technologies', 'number'=>0 ) ) ); + echo "
\n"; + echo $after_widget; + } +} + +if ( ! function_exists( 'prtfl_widget_display_control' ) ) { + function prtfl_widget_display_control( $args ) { + + $options = get_option( 'widget-portfolio_technologies_widget' ); + if ( empty( $options ) ) $options = array(); + if ( isset( $options[0] ) ) unset( $options[0] ); + + // update options array + if ( ! empty( $_POST['widget-portfolio_technologies_widget'] ) && is_array( $_POST ) ){ + foreach( $_POST['widget-portfolio_technologies_widget'] as $widget_number => $values ){ + if ( empty( $values ) && isset( $options[$widget_number] ) ) // user clicked cancel + continue; + + if ( ! isset( $options[$widget_number] ) && $args['number'] == -1 ){ + $args['number'] = $widget_number; + } + $options[$widget_number] = $values; + } + // clear unused options and update options in DB. return actual options array + $options = prtfl_widget_portfolio_technologies_update( 'widget-portfolio_technologies_widget', $options, $_POST['widget-portfolio_technologies_widget'], $_POST['sidebar'], 'widget-portfolio_technologies_widget' ); + } + // $number - is dynamic number for multi widget, gived by WP + // by default $number = -1 (if no widgets activated). In this case we should use %i% for inputs + // to allow WP generate number automatically + $number = ( $args['number'] == -1)? '%i%' : $args['number']; + + // now we can output control + $title = $options[$number]['title']; + ?> +

+

+ flush_rules(); + } + } +} + +// Initialization of all metaboxes on the 'Add Portfolio' and Edit Portfolio pages +if ( ! function_exists( 'prtfl_init_metaboxes' ) ) { + function prtfl_init_metaboxes() { + add_meta_box( 'Portfolio-Info', __( 'Portfolio Info', 'portfolio' ), 'prtfl_post_custom_box', 'portfolio', 'normal', 'high' ); // Description metaboxe + } +} + +// Create custom meta box for portfolio post type +if ( ! function_exists( 'prtfl_post_custom_box' ) ) { + function prtfl_post_custom_box( $obj = '', $box = '' ) { + global $prtfl_boxes; + // Generate box contents + foreach( $prtfl_boxes[ $box[ 'id' ] ] as $prtfl_box ) { + echo prtfl_text_field( $prtfl_box ); + } + } +} + +// This is the default text field meta box +if ( ! function_exists( 'prtfl_text_field' ) ) { + function prtfl_text_field( $args ) { + global $post; + + $description = $args[2]; + if ( get_option( 'prtfl_postmeta_update' ) == '1' ) { + $post_meta = get_post_meta( $post->ID, 'prtfl_information', true); + $args[ 2 ] = is_array( $post_meta ) ? esc_html ( $post_meta[ $args[0] ] ) : "" ; + } else { + $args[ 2 ] = esc_html ( get_post_meta( $post->ID, $args[0], true ) ); + } + $label_format = + '
'. + '

'. + '

'. + '

'. $description .'

'. + '
'; + if ( '_prtfl_date_compl' == $args[0] ) { + echo ''; + } + return vsprintf( $label_format, $args ); + } +} + +// This is the text area meta box +if ( ! function_exists( 'prtfl_prtfl_text_area' ) ) { + function prtfl_text_area( $args ) { + global $post; + + $description = $args[2]; + $args[2] = esc_html( get_post_meta( $post->ID, $args[0], true ) ); + $label_format = + '
'. + '

'. + '

'. + '

'. $description .'

'. + '
'; + return vsprintf( $label_format, $args ); + } +} + +/* When the post is saved, saves our custom data */ +if ( ! function_exists ( 'prtfl_save_postdata' ) ) { + function prtfl_save_postdata( $post_id, $post ) { + global $prtfl_boxes; + + if ( "portfolio" == $post->post_type && ! wp_is_post_revision( $post_id ) && ! empty( $_POST ) ) { // don't store custom data twice + // verify this came from the our screen and with proper authorization, + // because save_post can be triggered at other times + if( ! current_user_can ( 'edit_page', $post->ID ) ) { + return $post->ID; + } + // We'll put it into an array to make it easier to loop though. + // The data is already in $prtfl_boxes, but we need to flatten it out. + foreach( $prtfl_boxes as $prtfl_boxe ) { + foreach( $prtfl_boxe as $prtfl_fields ) { + $my_data[ $prtfl_fields[0] ] = $_POST[ $prtfl_fields[0] ]; + } + } + + // Add values of $my_data as custom fields + // Let's cycle through the $my_data array! + if( get_option( 'prtfl_postmeta_update' ) == '1' ) { + if( get_post_meta( $post->ID, 'prtfl_information', FALSE ) ) { + // Custom field has a value and this custom field exists in database + update_post_meta( $post->ID, 'prtfl_information', $my_data ); + } + elseif( $value ) { + // Custom field has a value, but this custom field does not exist in database + add_post_meta( $post->ID, 'prtfl_information', $my_data ); + } + else { + // Custom field does not have a value, but this custom field exists in database + update_post_meta( $post->ID, 'prtfl_information', $my_data ); + } + } else { + foreach( $my_data as $key => $value ) { + // if $value is an array, make it a CSV (unlikely) + $value = implode( ',', ( array ) $value ); + if( get_post_meta( $post->ID, $key, FALSE ) && $value ) { + // Custom field has a value and this custom field exists in database + update_post_meta( $post->ID, $key, $value ); + } + elseif( $value ) { + // Custom field has a value, but this custom field does not exist in database + add_post_meta( $post->ID, $key, $value ); + } + else { + // Custom field does not have a value, but this custom field exists in database + update_post_meta( $post->ID, $key, $value ); + } + } + } + } + } +} + +// This is pagenation functionality for portfolio post type +if ( ! function_exists ( 'prtfl_pagination' ) ) { + function prtfl_pagination( $pages = '', $range = 2 ) { + $showitems = get_option( 'posts_per_page' ); + + global $paged, $wp_query; + if ( empty ( $paged ) ) + $paged = 1; + if ( '' == $pages ) { + $pages = $wp_query->max_num_pages; + if( ! $pages ) { + $pages = 1; + } + } + + if ( 1 != $pages ) { + echo "\n"; + } + } +} + +if ( ! function_exists ( 'prtfl_register_plugin_links' ) ) { + function prtfl_register_plugin_links( $links, $file ) { + $base = plugin_basename(__FILE__); + if ( $file == $base ) { + $links[] = '' . __( 'Settings', 'portfolio' ) . ''; + $links[] = '' . __( 'FAQ', 'portfolio' ) . ''; + $links[] = '' . __( 'Support', 'portfolio' ) . ''; + } + return $links; + } +} + +if ( ! function_exists ( 'prtfl_replace_old_post_tag' ) ) { + function prtfl_replace_old_post_tag() { + global $wpdb; + if ( false === get_option( 'prtfl_tag_update' ) ) { + $tag_id_array = $wpdb->get_results( "SELECT term_taxonomy_id FROM $wpdb->posts, $wpdb->term_relationships WHERE post_type = 'portfolio' AND $wpdb->posts.ID = $wpdb->term_relationships.object_id" ); + while( list( $key, $val ) = each( $tag_id_array ) ) { + $wpdb->update( + $wpdb->term_taxonomy, + array( + 'taxonomy' => 'portfolio_technologies' + ), + array( + 'taxonomy' => 'post_tag' , + 'term_taxonomy_id' => $val->term_taxonomy_id + ), + array( + '%s' + ), + array( + '%s', + '%d' + ) + ); + } + $wpdb->query( "UPDATE $wpdb->posts, $wpdb->postmeta SET $wpdb->posts.post_content = $wpdb->postmeta.meta_value WHERE $wpdb->postmeta.post_id = $wpdb->posts.ID AND $wpdb->posts.post_type = 'portfolio' AND $wpdb->postmeta.meta_key = '_prtfl_short_descr' " ); + $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE $wpdb->postmeta.meta_key = '_prtfl_short_descr'" ); + $wpdb->query( "UPDATE $wpdb->postmeta SET meta_key = REPLACE(meta_key, 'prtf_', 'prtfl_') WHERE meta_key LIKE '_prtf_%'" ); + add_option( 'prtfl_tag_update', '1', '', 'no' ); + } + $postmeta = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta WHERE meta_key LIKE '%_short_descr%' LIMIT 0 , 1" ); + if ( empty( $postmeta ) && ! get_option( 'prtfl_postmeta_update' ) ) { + add_option( 'prtfl_postmeta_update', 1 ); + } + } +} + +require_once( dirname( __FILE__ ) . '/bws_menu/bws_menu.php' ); + +if ( ! function_exists( 'add_prtfl_admin_menu' ) ) { + function add_prtfl_admin_menu() { + add_menu_page( 'BWS Plugins', 'BWS Plugins', 'manage_options', 'bws_plugins', 'bws_add_menu_render', plugins_url( "images/px.png", __FILE__ ), 1001 ); + add_submenu_page( 'bws_plugins', __( 'Portfolio', 'portfolio' ), __( 'Portfolio', 'portfolio' ), 'manage_options', "portfolio.php", 'prtfl_settings_page' ); + + //call register settings function + add_action( 'admin_init', 'register_prtfl_settings' ); + } +} + +// register settings function +if ( ! function_exists( 'register_prtfl_settings' ) ) { + function register_prtfl_settings() { + global $wpmu, $prtfl_options; + + $prtfl_option_defaults = array( + 'prtfl_custom_size_name' => array( 'portfolio-thumb', 'portfolio-photo-thumb' ), + 'prtfl_custom_size_px' => array( array( 280, 300 ), array( 240, 260 ) ), + 'prtfl_order_by' => 'menu_order', + 'prtfl_order' => 'ASC', + 'prtfl_custom_image_row_count' => 3, + 'prtfl_date_additional_field' => 1, + 'prtfl_link_additional_field' => 1, + 'prtfl_shrdescription_additional_field' => 1, + 'prtfl_description_additional_field' => 1, + 'prtfl_svn_additional_field' => 1, + 'prtfl_executor_additional_field' => 1, + 'prtfl_technologies_additional_field' => 1, + 'prtfl_link_additional_field_for_non_registered' => 1, + 'prtfl_date_text_field' => __( 'Date of completion:', 'portfolio' ), + 'prtfl_link_text_field' => __( 'Link:', 'portfolio' ), + 'prtfl_shrdescription_text_field' => __( 'Short description:', 'portfolio' ), + 'prtfl_description_text_field' => __( 'Description:', 'portfolio' ), + 'prtfl_svn_text_field' => __( 'SVN:', 'portfolio' ), + 'prtfl_executor_text_field' => __( 'Executor Profile:', 'portfolio' ), + 'prtfl_screenshot_text_field' => __( 'More screenshots:', 'portfolio' ), + 'prtfl_technologies_text_field' => __( 'Technologies:', 'portfolio' ), + 'prtfl_slug' => 'portfolio' + ); + + // install the option defaults + if ( 1 == $wpmu ) { + if( !get_site_option( 'prtfl_options' ) ) { + add_site_option( 'prtfl_options', $prtfl_option_defaults, '', 'yes' ); + } + } else { + if( ! get_option( 'prtfl_options' ) ) + add_option( 'prtfl_options', $prtfl_option_defaults, '', 'yes' ); + } + + // get options from the database + if ( 1 == $wpmu ) + $prtfl_options = get_site_option( 'prtfl_options' ); // get options from the database + else + $prtfl_options = get_option( 'prtfl_options' );// get options from the database + + if ( isset( $prtfl_options['prtfl_prettyPhoto_style'] ) ) + unset( $prtfl_options['prtfl_prettyPhoto_style'] ); + + // array merge incase this version has added new options + $prtfl_options = array_merge( $prtfl_option_defaults, $prtfl_options ); + + update_option( 'prtfl_options', $prtfl_options ); + + if ( function_exists( 'add_image_size' ) ) { + add_image_size( 'portfolio-thumb', $prtfl_options['prtfl_custom_size_px'][0][0], $prtfl_options['prtfl_custom_size_px'][0][1], true ); + add_image_size( 'portfolio-photo-thumb', $prtfl_options['prtfl_custom_size_px'][1][0], $prtfl_options['prtfl_custom_size_px'][1][1], true ); + } + } +} + +if( ! function_exists( 'prtfl_settings_page' ) ) { + function prtfl_settings_page() { + global $prtfl_options; + $error = ""; + + // Save data for settings page + if( isset( $_REQUEST['prtfl_form_submit'] ) && check_admin_referer( plugin_basename(__FILE__), 'prtfl_nonce_name' ) ) { + $prtfl_request_options = array(); + $prtfl_request_options["prtfl_custom_size_name"] = $prtfl_options["prtfl_custom_size_name"]; + + $prtfl_request_options["prtfl_custom_size_px"] = array( + array( intval( trim( $_REQUEST['prtfl_custom_image_size_w_album'] ) ), intval( trim( $_REQUEST['prtfl_custom_image_size_h_album'] ) ) ), + array( intval( trim( $_REQUEST['prtfl_custom_image_size_w_photo'] ) ), intval( trim( $_REQUEST['prtfl_custom_image_size_h_photo'] ) ) ) + ); + $prtfl_request_options["prtfl_custom_image_row_count"] = intval( trim( $_REQUEST['prtfl_custom_image_row_count'] ) ); + if( $prtfl_request_options["prtfl_custom_image_row_count"] == "" || $prtfl_request_options["prtfl_custom_image_row_count"] < 1 ) + $prtfl_request_options["prtfl_custom_image_row_count"] = 1; + + $prtfl_request_options["prtfl_order_by"] = $_REQUEST['prtfl_order_by']; + $prtfl_request_options["prtfl_order"] = $_REQUEST['prtfl_order']; + + $prtfl_request_options["prtfl_date_additional_field"] = isset( $_REQUEST["prtfl_date_additional_field"] ) ? $_REQUEST["prtfl_date_additional_field"] : 0; + $prtfl_request_options["prtfl_link_additional_field"] = isset( $_REQUEST["prtfl_link_additional_field"] ) ? $_REQUEST["prtfl_link_additional_field"] : 0; + $prtfl_request_options["prtfl_shrdescription_additional_field"] = isset( $_REQUEST["prtfl_shrdescription_additional_field"] ) ? $_REQUEST["prtfl_shrdescription_additional_field"] : 0; + $prtfl_request_options["prtfl_description_additional_field"] = isset( $_REQUEST["prtfl_description_additional_field"] ) ? $_REQUEST["prtfl_description_additional_field"] : 0; + $prtfl_request_options["prtfl_svn_additional_field"] = isset( $_REQUEST["prtfl_svn_additional_field"] ) ? $_REQUEST["prtfl_svn_additional_field"] : 0; + $prtfl_request_options["prtfl_executor_additional_field"] = isset( $_REQUEST["prtfl_executor_additional_field"] ) ? $_REQUEST["prtfl_executor_additional_field"] : 0; + $prtfl_request_options["prtfl_technologies_additional_field"] = isset( $_REQUEST["prtfl_technologies_additional_field"] ) ? $_REQUEST["prtfl_technologies_additional_field"] : 0; + + $prtfl_request_options["prtfl_link_additional_field_for_non_registered"] = isset( $_REQUEST["prtfl_link_additional_field_for_non_registered"] ) ? $_REQUEST["prtfl_link_additional_field_for_non_registered"] : 0; + + $prtfl_request_options["prtfl_date_text_field"] = $_REQUEST["prtfl_date_text_field"]; + $prtfl_request_options["prtfl_link_text_field"] = $_REQUEST["prtfl_link_text_field"]; + $prtfl_request_options["prtfl_shrdescription_text_field"] = $_REQUEST["prtfl_shrdescription_text_field"]; + $prtfl_request_options["prtfl_description_text_field"] = $_REQUEST["prtfl_description_text_field"]; + $prtfl_request_options["prtfl_svn_text_field"] = $_REQUEST["prtfl_svn_text_field"]; + $prtfl_request_options["prtfl_executor_text_field"] = $_REQUEST["prtfl_executor_text_field"]; + $prtfl_request_options["prtfl_screenshot_text_field"] = $_REQUEST["prtfl_screenshot_text_field"]; + $prtfl_request_options["prtfl_technologies_text_field"] = $_REQUEST["prtfl_technologies_text_field"]; + + $prtfl_request_options["prtfl_slug"] = trim( $_REQUEST['prtfl_slug'] ); + $prtfl_request_options["prtfl_slug"] = strtolower($prtfl_request_options["prtfl_slug"]); + $prtfl_request_options["prtfl_slug"] = preg_replace("/[^a-z0-9\s-]/", "", $prtfl_request_options["prtfl_slug"]); + $prtfl_request_options["prtfl_slug"] = trim(preg_replace("/[\s-]+/", " ", $prtfl_request_options["prtfl_slug"])); + $prtfl_request_options["prtfl_slug"] = preg_replace("/\s/", "-", $prtfl_request_options["prtfl_slug"]); + + // for revrite prtfl_slug + global $wp_rewrite; + $rules = get_option( 'rewrite_rules' ); + prtfl_custom_permalinks( $rules ); + $wp_rewrite->flush_rules(); + + // array merge incase this version has added new options + $prtfl_options = array_merge( $prtfl_options, $prtfl_request_options ); + + // Check select one point in the blocks Arithmetic actions and Difficulty on settings page + update_option( 'prtfl_options', $prtfl_options, '', 'yes' ); + $message = __( "Settings saved.", 'portfolio' ); + } + + if ( ! file_exists( get_stylesheet_directory() .'/portfolio.php' ) || ! file_exists( get_stylesheet_directory() .'/portfolio-post.php' ) ) { + $error .= __( 'The files "portfolio.php" and "portfolio-post.php" are not found in your theme directory. Please copy them from the directory `wp-content/plugins/portfolio/template/` to your theme directory for correct work of the Portfolio plugin', 'portfolio' ); + } + // Display form on the setting page + ?> +
+
+

+
>

+
>

+

[latest_portfolio_items count=3],

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ " />
+ " /> +
+
+ " />
+ " /> +
+
+ />
+ />
+ />
+ />
+ /> +
+ />
+ /> +
+ " /> +
+ /> + /> + /> + /> + /> + /> + /> +
+ /> +
+ " />
+ " />
+ " />
+ " />
+ " />
+ " />
+ " />
+ " /> +
+ " /> +
+ +

+ +

+ +
+ get_var( "SELECT meta_id FROM ".$wpdb->postmeta." WHERE meta_key = '".$prefix."_short_descr' LIMIT 1" ) != NULL ) { ?> + + + + + +
+
loader
+
+ + + + + + + +
+
loader
+
+ +
+ query_vars["s"] && ! isset( $wp_query->query_vars["technologies"] ) ) { + include( get_stylesheet_directory() . '/portfolio-post.php' ); + exit(); + } else if ( 'portfolio' == get_post_type() && isset( $wp_query->query_vars["technologies"] ) ) { + include( get_stylesheet_directory() . '/portfolio.php' ); + exit(); + } + } +} + +if ( ! function_exists ( 'prtfl_add_template_in_new_theme' ) ) { + function prtfl_add_template_in_new_theme() { + if ( ! file_exists( get_stylesheet_directory() .'/portfolio.php' ) || ! file_exists( get_stylesheet_directory() .'/portfolio-post.php' ) ) + prtfl_plugin_install(); + } +} + +if ( ! function_exists ( 'prtfl_plugin_action_links' ) ) { + function prtfl_plugin_action_links( $links, $file ) { + //Static so we don't call plugin_basename on every plugin row. + static $this_plugin; + if ( ! $this_plugin ) $this_plugin = plugin_basename( __FILE__ ); + + if ( $file == $this_plugin ) { + $settings_link = '' . __( 'Settings', 'portfolio' ) . ''; + array_unshift( $links, $settings_link ); + } + return $links; + } +} + +if ( ! function_exists( 'prtfl_add_portfolio_ancestor_to_menu' ) ) { + function prtfl_add_portfolio_ancestor_to_menu( $classes, $item ) { + if ( is_singular( 'portfolio' ) ) { + global $wpdb, $post; + $parent = $wpdb->get_var( "SELECT $wpdb->posts.post_name FROM $wpdb->posts, $wpdb->postmeta WHERE meta_key = '_wp_page_template' AND meta_value = 'portfolio.php' AND (post_status = 'publish' OR post_status = 'private') AND $wpdb->posts.ID = $wpdb->postmeta.post_id" ); + + if ( in_array( 'menu-item-' . $item->ID, $classes ) && $parent == strtolower( $item->title ) ) { + $classes[] = 'current-page-ancestor'; + } + } + return $classes; + } +} + +if ( ! function_exists( 'prtfl_latest_items' ) ) { + function prtfl_latest_items( $atts ) { + $content = '
'; + $args = array( + 'post_type' => 'portfolio', + 'post_status' => 'publish', + 'orderby' => 'date', + 'order' => 'DESC', + 'posts_per_page' => $atts['count'], + ); + query_posts( $args ); + + while ( have_posts() ) : the_post(); + $content .= ' +
+
'; + global $post; + $meta_values = get_post_custom($post->ID); + $post_thumbnail_id = get_post_thumbnail_id( $post->ID ); + if( empty ( $post_thumbnail_id ) ) { + $args = array( + 'post_parent' => $post->ID, + 'post_type' => 'attachment', + 'post_mime_type' => 'image', + 'numberposts' => 1 + ); + $attachments = get_children( $args ); + $post_thumbnail_id = key($attachments); + } + $image = wp_get_attachment_image_src( $post_thumbnail_id, 'portfolio-thumb' ); + $image_alt = get_post_meta( $post_thumbnail_id, '_wp_attachment_image_alt', true ); + $image_desc = get_post($post_thumbnail_id); + $image_desc = $image_desc->post_content; + if( get_option( 'prtfl_postmeta_update' ) == '1' ) { + $post_meta = get_post_meta( $post->ID, 'prtfl_information', true); + $date_compl = $post_meta['_prtfl_date_compl']; + if( ! empty( $date_compl ) && 'in progress' != $date_compl) { + $date_compl = explode( "/", $date_compl ); + $date_compl = date( get_option( 'date_format' ), strtotime( $date_compl[1]."-".$date_compl[0].'-'.$date_compl[2] ) ); + } + $link = $post_meta['_prtfl_link']; + $short_descr = $post_meta['_prtfl_short_descr']; + } else { + $date_compl = get_post_meta( $post->ID, '_prtfl_date_compl', true ); + if( ! empty( $date_compl ) && 'in progress' != $date_compl) { + $date_compl = explode( "/", $date_compl ); + $date_compl = date( get_option( 'date_format' ), strtotime( $date_compl[1]."-".$date_compl[0].'-'.$date_compl[2] ) ); + } + $link = get_post_meta($post->ID, '_prtfl_link', true); + $short_descr = get_post_meta($post->ID, '_prtfl_short_descr', true); + } + + $content .= '
+ '.$image_alt.' +
+
+ '; + $content .= '

'.$short_descr.'

+
+
+ +
'; + $terms = wp_get_object_terms( $post->ID, 'portfolio_technologies' ) ; + if ( is_array( $terms ) && count( $terms ) > 0) { + $content .= __( 'Technologies', 'portfolio' ).':'; + $count = 0; + foreach ( $terms as $term ) { + if( $count > 0 ) + $content .= ', '; + $content .= 'name ) . '" ' . '>' . $term->name.''; + $count++; + } + } else { + $content .= ' '; + } + $content .= '
'; + $content .= '
'; + endwhile; + $content .= '
'; + wp_reset_query(); + return $content; + } +} + +/* Register style and script files */ +if ( ! function_exists ( 'prtfl_admin_head' ) ) { + function prtfl_admin_head() { + wp_enqueue_style( 'prtflStylesheet', plugins_url( 'css/stylesheet.css', __FILE__ ) ); + wp_enqueue_style( 'prtflDatepickerStylesheet', plugins_url( 'datepicker/datepicker.css', __FILE__ ) ); + wp_enqueue_script( 'jquery' ); + wp_enqueue_script( 'prtflScript', plugins_url( 'js/script.js', __FILE__ ) ); + wp_enqueue_script( 'prtflDatepickerScript', plugins_url( 'datepicker/datepicker.js', __FILE__ ) ); + + if ( isset( $_GET['page'] ) && $_GET['page'] == "bws_plugins" ) + wp_enqueue_script( 'bws_menu_script', plugins_url( 'js/bws_menu.js' , __FILE__ ) ); + } +} + +if ( ! function_exists ( 'prtfl_wp_head' ) ) { + function prtfl_wp_head() { + wp_enqueue_style( 'prtflLightboxStylesheet', plugins_url( 'fancybox/jquery.fancybox-1.3.4.css', __FILE__ ) ); + wp_enqueue_style( 'prtflStylesheet', plugins_url( 'css/stylesheet.css', __FILE__ ) ); + + wp_enqueue_script( 'jquery' ); + wp_enqueue_script( 'prtflScript', plugins_url( 'js/script.js', __FILE__ ) ); + wp_enqueue_script( 'prtflFancyboxMousewheelJs', plugins_url( 'fancybox/jquery.mousewheel-3.0.4.pack.js', __FILE__ ), array( 'jquery' ) ); + wp_enqueue_script( 'prtflFancyboxJs', plugins_url( 'fancybox/jquery.fancybox-1.3.4.pack.js', __FILE__ ), array( 'jquery' ) ); + } +} + +if ( ! function_exists ( 'prtfl_update_info' ) ) { + function prtfl_update_info(){ + global $wpdb; + $action = isset( $_REQUEST['action1'] ) ? $_REQUEST['action1'] : ""; + $id = isset( $_REQUEST['id'] ) ? $_REQUEST['id'] : ""; + switch($action) { + case 'get_portfolio_id': + $result = $wpdb->get_results( "SELECT ID FROM " . $wpdb->posts . " WHERE post_type = 'portfolio'" ); + echo json_encode( $result ); + break; + case 'update_info': + if( $id != "" && is_numeric( $id ) ) { + $result = $wpdb->get_results( "SELECT * FROM " . $wpdb->postmeta . " WHERE meta_key LIKE '_prtf%' AND post_id = " . $id ); + if( ! empty( $result ) ) { + $new_post_meta = array(); + foreach( $result as $value ) { + $new_post_meta[ $value->meta_key ] = $value->meta_value; + } + add_post_meta($id, 'prtfl_information', $new_post_meta); + $wpdb->query( "DELETE FROM " . $wpdb->postmeta . " WHERE meta_key LIKE '_prtf%' AND post_id = " . $id ); + } + $post_meta = get_post_meta($id, 'prtfl_information', true); + $wpdb->query( $wpdb->prepare( "UPDATE " . $wpdb->posts . " SET post_content = '%s' WHERE ID = " . $id, $post_meta["_prtfl_short_descr"] ) ); + } + break; + case 'update_options': + add_option( 'prtfl_postmeta_update', '1', '', 'no' ); + break; + } + die(); + } +} + +if ( ! function_exists ( 'prtfl_update_image' ) ) { + function prtfl_update_image(){ + global $wpdb; + $action = isset( $_REQUEST['action1'] ) ? $_REQUEST['action1'] : ""; + $id = isset( $_REQUEST['id'] ) ? $_REQUEST['id'] : ""; + switch($action) { + case 'get_all_attachment': + $result_parent_id = $wpdb->get_results( $wpdb->prepare( "SELECT ID FROM " . $wpdb->posts . " WHERE post_type = %s", 'portfolio' ) , ARRAY_N ); + $array_parent_id = array(); + + while(list($key, $val) = each($result_parent_id)) + $array_parent_id[] = $val[0]; + + $string_parent_id = implode( ",", $array_parent_id ); + + $result_attachment_id = $wpdb->get_results( "SELECT ID FROM " . $wpdb->posts . " WHERE post_type = 'attachment' AND post_mime_type LIKE 'image%' AND post_parent IN (".$string_parent_id.")" ); + echo json_encode( $result_attachment_id ); + break; + case 'update_image': + $metadata = wp_get_attachment_metadata( $id ); + $uploads = wp_upload_dir(); + $path = $uploads['basedir']."/".$metadata['file']; + require_once( ABSPATH . 'wp-admin/includes/image.php' ); + $metadata_new = prtfl_wp_generate_attachment_metadata( $id, $path, $metadata ); + wp_update_attachment_metadata( $id, array_merge($metadata, $metadata_new) ); + break; + case 'update_options': + add_option( 'prtfl_images_update', '1', '', 'no' ); + break; + } + die(); + } +} + +if ( ! function_exists ( 'prtfl_wp_generate_attachment_metadata' ) ) { + function prtfl_wp_generate_attachment_metadata( $attachment_id, $file, $metadata ) { + $attachment = get_post( $attachment_id ); + $prtfl_options = get_option( 'prtfl_options' ); + + add_image_size( 'portfolio-thumb', $prtfl_options['prtfl_custom_size_px'][0][0], $prtfl_options['prtfl_custom_size_px'][0][1], true ); + add_image_size( 'portfolio-photo-thumb', $prtfl_options['prtfl_custom_size_px'][1][0], $prtfl_options['prtfl_custom_size_px'][1][1], true ); + + $metadata = array(); + if ( preg_match('!^image/!', get_post_mime_type( $attachment )) && file_is_displayable_image($file) ) { + $imagesize = getimagesize( $file ); + $metadata['width'] = $imagesize[0]; + $metadata['height'] = $imagesize[1]; + list($uwidth, $uheight) = wp_constrain_dimensions($metadata['width'], $metadata['height'], 128, 96); + $metadata['hwstring_small'] = "height='$uheight' width='$uwidth'"; + + // Make the file path relative to the upload dir + $metadata['file'] = _wp_relative_upload_path($file); + + // make thumbnails and other intermediate sizes + global $_wp_additional_image_sizes; + + $image_size = array( 'portfolio-thumb', 'portfolio-photo-thumb' );//get_intermediate_image_sizes(); + + foreach ( $image_size as $s ) { + $sizes[$s] = array( 'width' => '', 'height' => '', 'crop' => FALSE ); + if ( isset( $_wp_additional_image_sizes[$s]['width'] ) ) + $sizes[$s]['width'] = intval( $_wp_additional_image_sizes[$s]['width'] ); // For theme-added sizes + else + $sizes[$s]['width'] = get_option( "{$s}_size_w" ); // For default sizes set in options + if ( isset( $_wp_additional_image_sizes[$s]['height'] ) ) + $sizes[$s]['height'] = intval( $_wp_additional_image_sizes[$s]['height'] ); // For theme-added sizes + else + $sizes[$s]['height'] = get_option( "{$s}_size_h" ); // For default sizes set in options + if ( isset( $_wp_additional_image_sizes[$s]['crop'] ) ) + $sizes[$s]['crop'] = intval( $_wp_additional_image_sizes[$s]['crop'] ); // For theme-added sizes + else + $sizes[$s]['crop'] = get_option( "{$s}_crop" ); // For default sizes set in options + } + + $sizes = apply_filters( 'intermediate_image_sizes_advanced', $sizes ); + foreach ($sizes as $size => $size_data ) { + $resized = prtfl_image_make_intermediate_size( $file, $size_data['width'], $size_data['height'], $size_data['crop'] ); + if ( $resized ) + $metadata['sizes'][$size] = $resized; + } + + // fetch additional metadata from exif/iptc + $image_meta = wp_read_image_metadata( $file ); + if ( $image_meta ) + $metadata['image_meta'] = $image_meta; + + } + + return apply_filters( 'wp_generate_attachment_metadata', $metadata, $attachment_id ); + } +} + +if ( ! function_exists ( 'prtfl_image_make_intermediate_size' ) ) { + function prtfl_image_make_intermediate_size( $file, $width, $height, $crop=false ) { + if ( $width || $height ) { + $resized_file = prtfl_image_resize( $file, $width, $height, $crop ); + if ( !is_wp_error($resized_file) && $resized_file && $info = getimagesize( $resized_file ) ) { + $resized_file = apply_filters('image_make_intermediate_size', $resized_file); + return array( + 'file' => wp_basename( $resized_file ), + 'width' => $info[0], + 'height' => $info[1], + ); + } + } + return false; + } +} + +if ( ! function_exists ( 'prtfl_image_resize' ) ) { + function prtfl_image_resize( $file, $max_w, $max_h, $crop = false, $suffix = null, $dest_path = null, $jpeg_quality = 90 ) { + + $size = @getimagesize( $file ); + if ( !$size ) + return new WP_Error('invalid_image', __('Image size not defined'), $file); + + $type = $size[2]; + + if ( $type == 3 ) + $image = imagecreatefrompng($file); + else if ( $type == 2 ) + $image = imagecreatefromjpeg($file); + else if ( $type == 1 ) + $image = imagecreatefromgif($file); + else if ( $type == 15 ) + $image = imagecreatefromwbmp($file); + else if ( $type == 16 ) + $image = imagecreatefromxbm($file); + else + return new WP_Error('invalid_image', __('We can update only PNG, JPEG, GIF, WPMP or XBM filetype. For other, please, manually reload image.'), $file ); + + if ( !is_resource( $image ) ) + return new WP_Error( 'error_loading_image', $image, $file ); + + //$size = @getimagesize( $file ); + list( $orig_w, $orig_h, $orig_type ) = $size; + + $dims = prtfl_image_resize_dimensions($orig_w, $orig_h, $max_w, $max_h, $crop); + + if ( !$dims ) + return new WP_Error( 'error_getting_dimensions', __('Image size changes not defined') ); + list( $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h ) = $dims; + + $newimage = wp_imagecreatetruecolor( $dst_w, $dst_h ); + + imagecopyresampled( $newimage, $image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h); + + // convert from full colors to index colors, like original PNG. + if ( IMAGETYPE_PNG == $orig_type && function_exists('imageistruecolor') && !imageistruecolor( $image ) ) + imagetruecolortopalette( $newimage, false, imagecolorstotal( $image ) ); + + // we don't need the original in memory anymore + imagedestroy( $image ); + + // $suffix will be appended to the destination filename, just before the extension + if ( !$suffix ) + $suffix = "{$dst_w}x{$dst_h}"; + + $info = pathinfo($file); + $dir = $info['dirname']; + $ext = $info['extension']; + $name = wp_basename($file, ".$ext"); + + if ( !is_null($dest_path) and $_dest_path = realpath($dest_path) ) + $dir = $_dest_path; + $destfilename = "{$dir}/{$name}-{$suffix}.{$ext}"; + + if ( IMAGETYPE_GIF == $orig_type ) { + if ( !imagegif( $newimage, $destfilename ) ) + return new WP_Error('resize_path_invalid', __( 'Invalid path' )); + } elseif ( IMAGETYPE_PNG == $orig_type ) { + if ( !imagepng( $newimage, $destfilename ) ) + return new WP_Error('resize_path_invalid', __( 'Invalid path' )); + } else { + // all other formats are converted to jpg + $destfilename = "{$dir}/{$name}-{$suffix}.jpg"; + if ( !imagejpeg( $newimage, $destfilename, apply_filters( 'jpeg_quality', $jpeg_quality, 'image_resize' ) ) ) + return new WP_Error('resize_path_invalid', __( 'Invalid path' )); + } + + imagedestroy( $newimage ); + + // Set correct file permissions + $stat = stat( dirname( $destfilename )); + $perms = $stat['mode'] & 0000666; //same permissions as parent folder, strip off the executable bits + @ chmod( $destfilename, $perms ); + + return $destfilename; + } +} + +if ( ! function_exists ( 'prtfl_image_resize_dimensions' ) ) { + function prtfl_image_resize_dimensions( $orig_w, $orig_h, $dest_w, $dest_h, $crop = false ) { + + if ( $orig_w <= 0 || $orig_h <= 0 ) + return false; + // at least one of dest_w or dest_h must be specific + if ( $dest_w <= 0 && $dest_h <= 0 ) + return false; + + if ( $crop ) { + // crop the largest possible portion of the original image that we can size to $dest_w x $dest_h + $aspect_ratio = $orig_w / $orig_h; + $new_w = min($dest_w, $orig_w); + $new_h = min($dest_h, $orig_h); + + if ( !$new_w ) { + $new_w = intval($new_h * $aspect_ratio); + } + + if ( !$new_h ) { + $new_h = intval($new_w / $aspect_ratio); + } + + $size_ratio = max($new_w / $orig_w, $new_h / $orig_h); + + $crop_w = round($new_w / $size_ratio); + $crop_h = round($new_h / $size_ratio); + + $s_x = floor( ($orig_w - $crop_w) / 2 ); + $s_y = 0; + } else { + // don't crop, just resize using $dest_w x $dest_h as a maximum bounding box + $crop_w = $orig_w; + $crop_h = $orig_h; + + $s_x = 0; + $s_y = 0; + + list( $new_w, $new_h ) = wp_constrain_dimensions( $orig_w, $orig_h, $dest_w, $dest_h ); + } + + // if the resulting image would be the same size or larger we don't want to resize it + if ( $new_w >= $orig_w && $new_h >= $orig_h ) + return false; + + // the return array matches the parameters to imagecopyresampled() + // int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h + return array( 0, 0, (int) $s_x, (int) $s_y, (int) $new_w, (int) $new_h, (int) $crop_w, (int) $crop_h ); + } +} + +register_activation_hook( __FILE__, 'prtfl_plugin_install'); // activate plugin +register_uninstall_hook( __FILE__, 'prtfl_plugin_uninstall' ); // deactivate plugin + +// adds "Settings" link to the plugin action page +add_filter( 'plugin_action_links', 'prtfl_plugin_action_links', 10, 2 ); +add_filter( 'nav_menu_css_class', 'prtfl_add_portfolio_ancestor_to_menu', 10, 2 ); + +//Additional links on the plugin page +add_filter( 'plugin_row_meta', 'prtfl_register_plugin_links', 10, 2 ); + +add_action( 'admin_init', 'prtfl_admin_error' ); + +add_action( 'admin_menu', 'add_prtfl_admin_menu' ); // add portfolio settings page in admin menu +add_action( 'init', 'prtfl_plugin_init' ); // add language file + +add_action( 'init', 'prtfl_taxonomy_portfolio' ); // register taxonomy for portfolio +add_action( 'init', 'prtfl_post_type_portfolio' ); // register post type +add_action( 'init', 'prtfl_register_widget' ); // add widget for portfolio technologies +add_action( 'save_post', 'prtfl_save_postdata', 1, 2 ); // save custom data from admin +add_filter( 'pre_get_posts', 'prtfl_technologies_get_posts' ); // display tachnologies taxonomy +add_action( 'template_redirect', 'prtfl_template_redirect' ); // add template for single gallery page + +//add_action( 'init', 'prtfl_custom_permalinks' ); // add custom permalink for portfolio +add_filter( 'rewrite_rules_array', 'prtfl_custom_permalinks' ); // add custom permalink for gallery +add_action( 'wp_loaded', 'prtfl_flush_rules' ); + +add_action( 'after_setup_theme', 'prtfl_add_template_in_new_theme' ); // add template in theme after activate new theme + +add_shortcode('latest_portfolio_items', 'prtfl_latest_items'); + +add_action( 'admin_enqueue_scripts', 'prtfl_admin_head' ); +add_action( 'wp_enqueue_scripts', 'prtfl_wp_head' ); + +add_action( 'wp_ajax_prtfl_update_info', 'prtfl_update_info' ); +add_action( 'wp_ajax_prtfl_update_image', 'prtfl_update_image' ); +?> \ No newline at end of file