*/ if ( !defined( 'WPINC' ) ) { die; } /** * Builds the page for activity nice management * * @param array $activity Information about the activity to display * @param string $current_url The current admin area to return to, null to remove settings buttons * * @return string Management page for nice activity display */ function acts_activity_nice_management( $activity, $current_url = null ) { wp_enqueue_media(); if ( isset( $_POST['save_nice_settings'] ) && $current_url != null ) { $settings = Activities_Admin_Utility::get_activity_nice_settings(); if ( isset( $settings['activity_id'] ) && $settings['activity_id'] ) { Activities_Activity::save_nice_settings( $settings ); Activities_Admin::add_success_message( sprintf( esc_html__( 'Report settings updated for %s.', 'activities' ), $activity['name'] ) ); } else { Activities_Admin::add_success_message( sprintf( esc_html__( 'An error occurred during saving report setting for %s.', 'activities' ), $activity['name'] ) ); } } $nice_settings = Activities_Activity::get_report_settings( $activity['activity_id'] ); if ( !$nice_settings ) { $nice_settings = Activities_Options::get_option( ACTIVITIES_NICE_SETTINGS_KEY ); if ( !is_array( $nice_settings ) ) { $nice_settings = unserialize( $nice_settings ); } } $output = ''; if ( $current_url != null ) { add_thickbox(); $output .= activities_user_quick_edit( $nice_settings ); $output .= acts_report_plan_session_edit_box(); } //Find the last session marked to make the mark session buttons more intelligent $last_session = 1; if ( isset( $nice_settings['attended'] ) ) { foreach ( $nice_settings['attended'] as $uid => $sessions ) { for ( $t = $nice_settings['time_slots'] - 1; $t >= 0; $t-- ) { if ( isset( $sessions[ $t ] ) && $sessions[ $t ] == '1' ) { if ( $t + 2 > $last_session ) { $last_session = $t + 2; //Add 1 for array offset and 1 for next session } break; } } } } if ( $last_session > $nice_settings['time_slots'] ) { $last_session = $nice_settings['time_slots']; } if ( $current_url != null ) { $output .= '

' . esc_html__( 'Activity Report Management', 'activities' ) . '

'; $output .= Activities_Admin::get_messages(); } $output .= '

' . esc_html__( 'Report', 'activities' ) . ':

'; if ( $current_url != null ) { $output .= '
'; } $output .= '
'; $output .= '
'; $output .= acts_activity_nice_page( $activity, $nice_settings ); $output .= '
'; if ( $current_url != null ) { $output .= get_submit_button( esc_html__( 'Save', 'activities' ), 'button-primary', 'save_nice_settings', true, array( 'id' => '' ) ); $output .= '
'; $output .= acts_build_plans_box( $activity['plan_id'], $nice_settings['session_map'], $nice_settings['time_slots'], $last_session ); $output .= '
'; } $output .= '
'; $output .= '
'; $output .= ''; $output .= ''; $output .= '
'; if ( $current_url != null ) { $output .= '
'; $output .= '

' . esc_html__( 'Activity', 'activities' ) . '

'; $type = Activities_Admin::get_page_name( get_current_screen() ); $output .= acts_build_select_items( $type, array( 'id' => 'acts_nice_quick_change', 'selected' => $activity['activity_id'], 'blank' => false ), Activities_Responsible::current_user_restricted_view() ); $output .= ''; $output .= '
'; $output .= '
'; } $output .= '

' . esc_html__( 'Settings', 'activities' ); $output .= '

'; $output .= '' . esc_html__( 'Header', 'activities' ) . '
'; $output .= ''; $output .= '
' . esc_html__( 'Logo', 'activities' ) . ''; $output .= '  '; $output .= '
'; $output .= ''; $output .= '
'; $output .= '
'; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= '
' . esc_html__( 'Activity Info', 'activities' ) . '
' . esc_html__( 'Start', 'activities' ) . ' 
' . esc_html__( 'End', 'activities' ) . ' 
' . esc_html__( 'Short Description', 'activities' ) . ' 
' . esc_html__( 'Location Address', 'activities' ) . ' 
' . esc_html__( 'Responsible User', 'activities' ) . ' 
' . esc_html__( 'Long Description', 'activities' ) . ' 
'; $output .= '
'; $output .= '
'; $output .= '

'; $output .= '
'; $output .= get_submit_button( esc_html__( 'Mark: On', 'activities' ), 'button', 'mark_session_on', false, 'mark="on"' ) . ' '; $output .= get_submit_button( esc_html__( 'Mark: Off', 'activities' ), 'button', 'mark_session_off', false, 'mark="off"' ); $output .= ' '; $output .= '
'; $output .= '
'; $output .= '
'; $output .= '
'; $output .= '

' . esc_html__( 'Participant Info', 'activities' ) . '
'; $output .= '

'; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; foreach ( acts_get_nice_setups( $nice_settings['member_info'] ) as $setup => $display ) { $output .= ''; } $output .= ''; $output .= '
' . esc_html__( 'Prepared Setups', 'activities' ) . '
' . $display . ' 
'; $output .= '
    '; $output .= '
  • ' . esc_html__( 'Custom Fields', 'activities' ) . ' (' . esc_html__( 'advanced', 'activities' ) . ')
  • '; $output .= '
  • ' . esc_html__( 'Type in usermeta key, then press reload info.', 'activities' ) . '
  • '; $output .= '
  • ' . esc_html__( 'Separate multiple fields in one line by a comma.', 'activities' ) . '
  • '; $output .= '
'; $custom_col = array( 1 => '', 2 => '' ); if ( isset( $nice_settings['custom'] ) ) { foreach ( $nice_settings['custom'] as $custom ) { if ( isset( $custom_col[ $custom['col'] ] ) ) { $custom_col[ $custom['col'] ] .= '
  • '; $custom_col[ $custom['col'] ] .= '
  • '; } } } $output .= '
      '; //Use sprintf to ensure same translation as the report translation $output .= '
    • ' . esc_html( sprintf( __( '%s Column', 'activities' ), __( 'Participants', 'activities' ) ) ) . '
    • '; $output .= $custom_col[1]; $output .= '
    '; $output .= '
      '; $output .= '
    • ' . esc_html( sprintf( __( '%s Column', 'activities' ), __( 'Additional Info', 'activities' ) ) ) . '
    • '; $output .= $custom_col[2]; $output .= '
    '; $output .= ''; $output .= '
    '; $output .= '
      '; $output .= '
    • ' . esc_html__( 'Color Fields', 'activities' ) . ' (' . esc_html__( 'advanced', 'activities' ) . ')
    • '; $output .= '
    • ' . esc_html__( 'Colorize usermeta data for quicker identification.', 'activities' ) . '
    • '; if ( isset( $nice_settings['color'] ) ) { foreach ( $nice_settings['color'] as $key => $color ) { $output .= '
    • '; $output .= ''; $output .= ' '; $output .= '
    • '; } } $output .= '
    '; $output .= '
    '; if ( $current_url != null ) { $output .= '
    '; $output .= '
    '; $output .= '

    '; $output .= get_submit_button( esc_html__( 'Save', 'activities' ), 'button-primary', 'save_nice_settings', false, array( 'id' => '' ) ); //$output .= ' '; $output .= '' . esc_html__( 'Print', 'activities' ) . ' '; $output .= ' '; $output .= wp_nonce_field( 'activities_nice', ACTIVITIES_ADMIN_NICE_NONCE, true, false ); $output .= '' . esc_html__( 'Return', 'activities' ) . ''; $output .= '

    '; $output .= '
    '; } $output .= ''; $output .= '
    '; //Nice settings $output .= '
    '; //Nice settings wrap if ( $current_url != null ) { $output .= get_submit_button( esc_html__( 'Save', 'activities' ), 'button-primary acts-nice-extra-button', 'save_nice_settings', true, array( 'id' => 'acts-nice-save-bottom' ) ); $output .= '
    '; } $output .= acts_nice_meta_key_set(); return $output; } /** * Generate the printable version of and activity * * @param array $activity Information about the activity to display * @param array $nice_settings Display settings for the activity * * @return string Printable page */ function acts_activity_nice_page( $activity, $nice_settings ) { global $wpdb; if ( $activity['location_id'] != -1 ) { $location_table = Activities::get_table_name( 'location' ); $location = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $location_table WHERE location_id = %d ", $activity['location_id'] ), ARRAY_A ); } else { $location = array( 'address' => 'location address' ); } $output = '
    '; $output .= '
    '; $output .= esc_html( do_shortcode( stripslashes( $nice_settings['header'] ) ) ); $output .= '
    '; $output .= '
    '; $output .= ''; $output .= '' . esc_html__( 'Activity Participants List', 'activities' ) . ''; $output .= '
    '; $output .= '

    ' . stripslashes( wp_filter_nohtml_kses( $activity['name'] ) ) . '

    '; $output .= '
    '; $output .= ''; $output .= '' . esc_html__( 'Start', 'activities' ) . ': ' . wp_filter_nohtml_kses( Activities_Utility::format_date( $activity['start'] ) ) . ' '; if ( $nice_settings['start'] ) { $output .= ' '; } $output .= ''; $output .= '' . esc_html__( 'End', 'activities' ) . ': ' . wp_filter_nohtml_kses( Activities_Utility::format_date( $activity['end'] ) ) . ''; $output .= '
    '; $output .= '

    '; $output .= stripslashes( wp_filter_nohtml_kses( $activity['short_desc'] ) ) . '

    '; $output .= '
    '; if ( !is_null( $location ) ) { $output .= ''; $address = $location['address']; if ( $address == '' ) { $address = $location['name']; } $output .= '' . esc_html__( 'Location', 'activities' ) . ': ' . stripslashes( wp_filter_nohtml_kses( $address ) ) . ''; $output .= ' • '; } if ( $activity['responsible_id'] != -1 ) { $responsible = get_user_by( 'ID', $activity['responsible_id'] ); if ( $responsible !== false ) { $responsible_name = Activities_Utility::get_user_name( $responsible, false ); } else { $responsible_name = '--'; } } else { $responsible_name = 'responsible name'; } if ( isset( $responsible_name ) ) { $output .= ''; $output .= '' . esc_html__( 'Responsible', 'activities' ) . ': ' . stripslashes( wp_filter_nohtml_kses( $responsible_name ) ) . ''; } $output .= '
    '; $output .= '

    '; $output .= stripslashes( wp_filter_nohtml_kses( $activity['long_desc'] ) ) . '

    '; $output .= '
    '; $output .= '
    '; $member_c = count( $activity['members'] ); if ( $member_c > 0 ) { $output .= '
    '; $output .= '
    '; if ( $member_c == 1 ) { $output .= '' . esc_html__( 'Participant', 'activities' ) . ''; } else { $output .= '' . esc_html__( 'Participants', 'activities' ) . ' (' . $member_c . ')'; } $output .= '
    '; $output .= '
    ' . esc_html__( 'Additional Info', 'activities' ) . '
    '; $output .= '
    ' . esc_html__( 'Sessions', 'activities' ) . '
    '; $output .= '
    '; $coupons_display = array(); $coupons_selected = Activities_Options::get_option( ACTIVITIES_NICE_WC_COUPONS_KEY ); if ( is_plugin_active( 'woocommerce/woocommerce.php' ) && !empty( $coupons_selected ) && $activity['activity_id'] > 0 && $activity['archive'] == 0 ) { $coupons_display = Activities_WooCommerce::get_activity_orders( $activity['activity_id'], $activity['members'] ); } foreach ( acts_get_member_info( $activity['members'], $nice_settings['member_info'], $nice_settings['custom'], true ) as $id => $user ) { $output .= '
    '; $output .= ''; $output .= ''; $output .= '
    '; $attended = array(); if ( isset( $nice_settings['attended'] ) ) { $attended = $nice_settings['attended']; } for ( $time = 0; $time < $nice_settings['time_slots']; $time++ ) { $checked = ''; if ( isset( $attended[ $id ][ $time ] ) && $attended[ $id ][ $time ] == '1' ) { $checked = 'checked="checked"'; } $output .= ''; } $output .= '
    '; $output .= '
    '; } } else { $output .= '

    ' . esc_html__( 'This activity has no participants.', 'activities' ) . '

    '; } $output .= '
    '; $output .= '
    '; return $output; } /** * Gets real names by user ids * * @param array $user_ids Ids of users * * @return array A mapping of user ids to their real names */ function acts_get_member_names( $user_ids ) { $names = array(); foreach ( $user_ids as $id ) { if ( $id > 0 ) { $user = get_user_by( 'ID', $id ); if ( $user === false ) { continue; } else { $name = Activities_Utility::get_user_name( $user, false ); } $names[ $id ] = $name; } else { $names[ $id ] = 'first_name last_name'; } } return $names; } /** * Generate the user info to display in activity nice * * @param array $user_ids Ids of users to display * @param string $type The type of predefined display options * @param array $custom_fields List of custom fields to display for users, 'none' if there are no custom fields * @param bool $sort Sort members * * @return array A list of user info to display in column 1 ('col1') and column 2 ('col2') */ function acts_get_member_info( $user_ids, $type, $custom_fields = array(), $sort = false ) { $member_info = array(); $sort_members = acts_get_member_names( $user_ids ); if ( $sort && !empty( $sort_members ) ) { if ( !asort( $sort_members, SORT_STRING ) ) { $sort_members = acts_get_member_names( $user_ids ); } } foreach ( $sort_members as $id => $name ) { $user_info = acts_get_user_nice_info( $id, $custom_fields ); $col1 = ''; $bold_name = '' . stripslashes( wp_filter_nohtml_kses( $name ) ) . ''; if ( $id > 0 ) { if ( current_user_can( 'edit_user', $id ) ) { $col1 .= '' . $bold_name . ' '; } else { $col1 .= $bold_name; } $col2 = ''; $col2 .= stripslashes( wp_filter_nohtml_kses( $user_info['user_email'] ) ) . ' '; } else { $col1 .= $bold_name; $col2 = '' . stripslashes( wp_filter_nohtml_kses( $user_info['user_email'] ) ) . ''; } $col1 .= ''; $col1 .= ''; $member_info[ $id ]['col1'] = $col1; $member_info[ $id ]['col2'] = $col2; } return $member_info; } /** * Filters custom fields for user_meta in activity nice * * @param string $field Name of field * * @return boolean true if the field must be hidden/is protected, false if it can be shown (not protected) */ function activities_nice_filter_custom_field( $field ) { $filter_data = array( 'user_pass', 'user_activation_key', 'session_tokens' ); if ( in_array( $field, $filter_data ) ) { return true; } else { return is_protected_meta( $field ); } } /** * Get activity nice prepared setups options * * @param string $selected Which prepared setup is selected * * @return array List of options */ function acts_get_nice_setups( $selected = 'wp' ) { $return = array( 'wp' => esc_html__( 'Wordpress User Info', 'activities' ) ); $woocommerce = array( 'bill' => esc_html__( 'Woocommerce Billing Info', 'activities' ), 'ship' => esc_html__( 'Woocommerce Shipping Info', 'activities' ) ); if ( is_plugin_active( 'woocommerce/woocommerce.php' ) || array_key_exists( $selected, $woocommerce ) ) { $return = array_merge( $return, $woocommerce ); } return $return; } /** * Get user nice info * * @param int $id User id * @param array $custom_fields Custom fields to get * * @return array|false Array of user data, false on user not found */ function acts_get_user_nice_info( $id, $custom_fields = array() ) { $user = get_user_by( 'ID', $id ); if ( $user ) { $user_roles = array(); foreach ( $user->roles as $role ) { $user_roles[] = $role; //Normalize to list for javascript } $user_info = array( //Get first name and last name for quick edit 'first_name' => $user->first_name, 'last_name' => $user->last_name, 'user_email' => $user->get( 'user_email' ), //Add acts as prefix to avoid any conflict with other meta keys 'acts_full_name' => Activities_Utility::get_user_name( $id, false ), 'acts_user_avatar' => get_avatar_url( $id, array( 'size' => 128 ) ), 'roles' => $user_roles ); foreach ( acts_get_woocommerce_nice_keys() as $key => $name ) { $user_info[ $key ] = $user->$key; } foreach ( $custom_fields as $custom ) { foreach ( explode( ',', sanitize_text_field( $custom['name'] ) ) as $c ) { $c = sanitize_key( $c ); if ( activities_nice_filter_custom_field( $c ) || array_key_exists( $c, $user_info ) ) { continue; } $user_info[ $c ] = $user->$c; } } return $user_info; } elseif ( $id < 0 ) { //Get sample user data $user_info = array( 'user_email' => 'user_email', 'acts_full_name' => 'first_name last_name' ); foreach ( acts_get_woocommerce_nice_keys() as $key => $name ) { $user_info[ $key ] = $key; } foreach ( $custom_fields as $custom ) { foreach ( explode( ',', sanitize_text_field( $custom['name'] ) ) as $c ) { $c = sanitize_key( $c ); if ( activities_nice_filter_custom_field( $c ) || array_key_exists( $c, $user_info ) ) { continue; } $user_info[ $c ] = $c; } } return $user_info; } else { return false; } } /** * Get activity nice WooCommerce meta keys * * @param string $type 'bill' for billing info or 'ship' for shipping, omit or 'both' for both * * @return array List of WooCommerce meta keys mapped to display */ function acts_get_woocommerce_nice_keys( $type = 'both' ) { $billing = array( 'billing_address_1' => sprintf( esc_html__( 'Address %d', 'activities' ), '1' ), 'billing_address_2' => sprintf( esc_html__( 'Address %d', 'activities' ), '2' ), 'billing_city' => esc_html__( 'City', 'activities' ), 'billing_postcode' => esc_html__( 'Postcode', 'activities' ), 'billing_phone' => esc_html__( 'Phone', 'activities' ) ); $shipping = array( 'shipping_address_1' => sprintf( esc_html__( 'Address %d', 'activities' ), '1' ), 'shipping_address_2' => sprintf( esc_html__( 'Address %d', 'activities' ), '2' ), 'shipping_city' => esc_html__( 'City', 'activities' ), 'shipping_postcode' => esc_html__( 'Postcode', 'activities' ) ); switch ( $type ) { case 'bill': return $billing; break; case 'ship': return $shipping; break; case 'both': return array_merge( $billing, $shipping ); break; default: return array(); break; } } /** * Builds a list item for activity nice member info * * @param string $string Text to show in list * * @return string String nested in li tags or empty string */ function acts_nice_listing( $string ) { $string = trim( $string ); if ( $string != '' ) { return '
  • ' . stripslashes( wp_filter_nohtml_kses( $string ) ) . '
  • '; } return ''; } /** * Get key display * * @param string $key Key * * @return string Display for key */ function acts_nice_key_display( $key ) { $key = explode( '_', $key ); $display = array(); foreach ( $key as $sub_key ) { $display[] = ucfirst( $sub_key ); } return implode( ' ', $display ); } /** * Get meta_key set script * * @return string */ function acts_nice_meta_key_set() { global $wpdb; $meta_fields = $wpdb->get_col( "SELECT DISTINCT meta_key FROM $wpdb->usermeta" ); foreach ( $meta_fields as $key => $meta ) { if ( activities_nice_filter_custom_field( $meta ) ) { unset( $meta_fields[ $key ] ); } else { $meta_fields[ $key ] = '"' . wp_filter_nohtml_kses( $meta ) . '": 1'; } } $wl = ''; return $wl; }