Plugin Directory

Changeset 2700472


Ignore:
Timestamp:
03/28/2022 07:36:31 AM (3 years ago)
Author:
fida02
Message:

Releasing version 2.1.1

Location:
tourfic/trunk
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • tourfic/trunk/admin/assets/js/admin.js

    r2696074 r2700472  
    1 /**
    2  * Ajax install
    3  *
    4  * @since 1.0
    5  */
    6  (function($) {
     1(function($) {
    72   
    83    $(document).ready(function(){   
    94
     5        // Create an instance of Notyf
     6        const notyf = new Notyf({
     7            ripple: true,
     8            dismissable: true,
     9            duration: 3000,
     10            position: {
     11                x: 'right',
     12                y: 'bottom',
     13            },
     14        });
     15
     16        /**
     17         * Tour location required
     18         *
     19         * show notyf error
     20         */
     21        $(document).on('click', '.post-type-tf_tours #publish, .post-type-tf_tours #save-post', function(e) {
     22            if( $('textarea[name="tf_tours_option[text_location]"]').val().length === 0 ) {
     23                e.preventDefault;
     24                e.stopImmediatePropagation();
     25                notyf.error('Tour Location is a required field!');
     26                return false;
     27            }
     28        });
     29
     30        /**
     31         * Ajax install
     32         *
     33         * @since 1.0
     34         */
    1035        $(document).on('click', '.tf-install', function(e) {
    1136            e.preventDefault();
  • tourfic/trunk/admin/inc/functions.php

    r2696074 r2700472  
    102102    wp_localize_script( 'tf-required', 'tf_params', array(
    103103            'taxonomies' => $post_types[ $post_type ],
    104             'error'      => false
     104            'error'      => false,
     105            'tour_location_required' => __('Tour Location is a required field!', 'tourfic'),
    105106        )
    106107    );
  • tourfic/trunk/admin/options/global/parts/miscellaneous.php

    r2696074 r2700472  
    6868   
    6969) );
     70
     71/**
     72 * Permalink Settings
     73 *
     74 * Sub Menu
     75 */
     76CSF::createSection( $prefix, array(
     77    'parent'    => 'miscellaneous',
     78    'title' =>  __( 'Permalink Settings', 'tourfic' ),
     79    'fields' => array(
     80
     81        array(
     82            'type'    => 'subheading',
     83            'content' => __('Permalink Settings', 'tourfic' ),
     84        ),
     85
     86        array(
     87            'type'    => 'content',
     88            'content' => __('For permalink settings go to default <a href="' .get_admin_url(). 'options-permalink.php">permalink settings page</a>.', 'tourfic' ),
     89        ),
     90
     91    )
     92   
     93) );
    7094?>
  • tourfic/trunk/assets/css/style.css

    r2696074 r2700472  
    179179    justify-content: center;
    180180    padding: 20px;
     181    background-position: center center;
     182    background-size: cover;
    181183}
    182184
  • tourfic/trunk/assets/css/tourfic-styles.css

    r2696074 r2700472  
    5151.tf_content {
    5252  width: 75%;
     53  box-sizing: border-box;
    5354}
    5455
    5556.tf_sidebar {
    5657  width: 25%;
     58  box-sizing: border-box;
    5759}
    5860
     
    265267}
    266268
    267 .slick-slide {
    268   display: none;
    269   float: left;
    270   height: 100%;
    271   min-height: 1px;
    272 }
    273 
    274269[dir=rtl] .slick-slide {
    275270  float: right;
     
    358353  height: 100%;
    359354  -o-object-fit: cover;
    360      object-fit: cover;
     355  object-fit: cover;
     356  cursor: zoom-in;
    361357}
    362358
  • tourfic/trunk/assets/css/tourfic.css

    r2696074 r2700472  
    430430    font-size: 12px;
    431431}
     432
     433/*================================
     434|      Theme based CSS Fix       |
     435================================*/
     436/**
     437 * Twenty Twenty Two
     438 */
     439/* Slick SLider*/
     440.single-tf_hotel.theme-twentytwentytwo .slick-slide {
     441    height: auto !important;
     442}
     443.single-tf_hotel.theme-twentytwentytwo .slick-slide img{
     444    height: auto !important;
     445}
     446.single-tf_tours.theme-twentytwentytwo .tf-tour-booking-wrap {
     447    height: auto !important;
     448}
  • tourfic/trunk/assets/js/tourfic.js

    r2696074 r2700472  
    212212            dots: false,
    213213            centerMode: false,
    214             asNavFor: '.tf_slider-nav',
    215             variableWidth: true
    216         });
    217 
    218         $('.single-slider-wrapper .tf_slider-nav').slick({
    219             slidesToShow: 4,
    220             slidesToScroll: 1,
    221             asNavFor: '.tf_slider-for',
    222             dots: false,
    223             arrows: false,
    224             centerMode: true,
    225             focusOnSelect: true
     214            variableWidth: false,
    226215        });
    227216
  • tourfic/trunk/inc/functions.php

    r2697462 r2700472  
    312312 */
    313313if ( !function_exists('tf_admin_role_caps') ) {
    314     function tf_admin_role_caps() {
    315 
    316         if ( get_option( 'tf_admin_caps' ) < 1 ) {
    317             $admin_role = get_role( 'administrator' );
    318             $editor_role = get_role( 'editor' );
    319        
    320             // Add a new capability.
    321             $caps = array (
    322                 // Hotels
    323                 'edit_tf_hotel',
    324                 'read_tf_hotel',
    325                 'delete_tf_hotel',
    326                 'edit_tf_hotels',
    327                 'edit_others_tf_hotels',
    328                 'publish_tf_hotels',
    329                 'read_private_tf_hotels',
    330                 'delete_tf_hotels',
    331                 'delete_private_tf_hotels',
    332                 'delete_published_tf_hotels',
    333                 'delete_others_tf_hotels',
    334                 'edit_private_tf_hotels',
    335                 'edit_published_tf_hotels',
    336                 'create_tf_hotels',
    337                 // Tours
    338                 'edit_tf_tours',
    339                 'read_tf_tours',
    340                 'delete_tf_tours',
    341                 'edit_tf_tourss',
    342                 'edit_others_tf_tourss',
    343                 'publish_tf_tourss',
    344                 'read_private_tf_tourss',
    345                 'delete_tf_tourss',
    346                 'delete_private_tf_tourss',
    347                 'delete_published_tf_tourss',
    348                 'delete_others_tf_tourss',
    349                 'edit_private_tf_tourss',
    350                 'edit_published_tf_tourss',
    351                 'create_tf_tourss',
    352             );
    353        
    354             foreach ( $caps as $cap ) {   
    355                 $admin_role->add_cap( $cap );
    356                 $editor_role->add_cap( $cap );
    357             }
    358 
    359             update_option( 'tf_admin_caps', 1 );
    360         }
    361     }
    362     add_action( 'admin_init', 'tf_admin_role_caps', 999 );
     314    function tf_admin_role_caps() {
     315
     316        if ( get_option( 'tf_admin_caps' ) < 1 ) {
     317            $admin_role = get_role( 'administrator' );
     318            $editor_role = get_role( 'editor' );
     319       
     320            // Add a new capability.
     321            $caps = array (
     322                // Hotels
     323                'edit_tf_hotel',
     324                'read_tf_hotel',
     325                'delete_tf_hotel',
     326                'edit_tf_hotels',
     327                'edit_others_tf_hotels',
     328                'publish_tf_hotels',
     329                'read_private_tf_hotels',
     330                'delete_tf_hotels',
     331                'delete_private_tf_hotels',
     332                'delete_published_tf_hotels',
     333                'delete_others_tf_hotels',
     334                'edit_private_tf_hotels',
     335                'edit_published_tf_hotels',
     336                'create_tf_hotels',
     337                // Tours
     338                'edit_tf_tours',
     339                'read_tf_tours',
     340                'delete_tf_tours',
     341                'edit_tf_tourss',
     342                'edit_others_tf_tourss',
     343                'publish_tf_tourss',
     344                'read_private_tf_tourss',
     345                'delete_tf_tourss',
     346                'delete_private_tf_tourss',
     347                'delete_published_tf_tourss',
     348                'delete_others_tf_tourss',
     349                'edit_private_tf_tourss',
     350                'edit_published_tf_tourss',
     351                'create_tf_tourss',
     352            );
     353       
     354            foreach ( $caps as $cap ) {   
     355                $admin_role->add_cap( $cap );
     356                $editor_role->add_cap( $cap );
     357            }
     358
     359            update_option( 'tf_admin_caps', 1 );
     360        }
     361    }
     362    add_action( 'admin_init', 'tf_admin_role_caps', 999 );
    363363}
    364364
  • tourfic/trunk/inc/functions/functions-hotel.php

    r2696074 r2700472  
    5050        'query_var'          => true,
    5151        'menu_icon'          => 'dashicons-building',
    52         'rewrite'            => array( 'slug' => $hotel_slug ),
     52        'rewrite'            => array( 'slug' => $hotel_slug, 'with_front' => false ),
    5353        'capability_type'    => array( 'tf_hotel', 'tf_hotels' ),
    5454        'has_archive'        => true,
     
    148148        'show_in_nav_menus'     => true,
    149149        'query_var'             => true,
    150         'rewrite'               => array('slug' => $hotel_location_slug),
     150        'rewrite'               => array('slug' => $hotel_location_slug, 'with_front' => false ),
    151151        'show_admin_column'     => true,
    152152        'show_in_rest'          => true,
     
    324324                        $pricing_by = !empty($room['pricing-by']) ? $room['pricing-by'] : '';
    325325
    326                     if ($form_total_person < $total_person) {                                                                 
     326                    if ($form_total_person <= $total_person) {                                                                 
    327327                ?>
    328328            <tr>
     
    691691                dateFormat: "Y/m/d",
    692692                allowInput: true,
     693                minDate: "today",
    693694            });
    694695   
  • tourfic/trunk/inc/functions/functions-tour.php

    r2696338 r2700472  
    5353        'query_var'          => true,
    5454        'menu_icon'          => 'dashicons-location-alt',
    55         'rewrite'            => array( 'slug' => $tour_slug ),     
     55        'rewrite'            => array( 'slug' => $tour_slug, 'with_front' => false ),
    5656        'capability_type'    => array( 'tf_tours', 'tf_tourss' ),
    5757        'has_archive'        => true,
     
    151151        'show_in_nav_menus'     => true,
    152152        'query_var'             => true,
    153         'rewrite'               => array('slug' => $tour_destination_slug),
     153        'rewrite'               => array('slug' => $tour_destination_slug, 'with_front' => false ),
    154154        'show_admin_column'     => true,
    155155        'show_in_rest'          => true,
     
    348348    $meta = get_post_meta( $post_id, 'tf_tours_option', true );
    349349    $tour_type = !empty($meta['type']) ? $meta['type'] : '';
     350    // Continuous custom availability
     351    $custom_avail = !empty($meta['custom_avail']) ? $meta['custom_avail'] : '';
    350352
    351353    if ($tour_type == 'fixed') {
     
    358360    } elseif ($tour_type == 'continuous') {
    359361
    360         $custom_avail = !empty($meta['custom_avail']) ? $meta['custom_avail'] : '';
    361362        $disabled_day = !empty($meta['disabled_day']) ? $meta['disabled_day'] : '';
    362363        $disable_range = !empty($meta['disable_range']) ? $meta['disable_range'] : '';
     
    384385    $times = [];
    385386
    386     if ($meta['custom_avail'] == true && !empty($meta['cont_custom_date'])) {
     387    if ($custom_avail == true && !empty($meta['cont_custom_date'])) {
    387388        $allowed_times = array_map(function ($v) {
    388389            return $times[] = ['date' => $v['date'], 'times' => array_map(function ($v) {
     
    391392        }, $meta['cont_custom_date']);
    392393    }
    393     if ($meta['custom_avail'] == false && !empty($meta['allowed_time'])) {
     394   
     395    if ($custom_avail == false && !empty($meta['allowed_time'])) {
    394396        $allowed_times = array_map(function ($v) {
    395             return $v['time'];
    396            
     397            return $v['time'];         
    397398        }, $meta['allowed_time'] ?? []);
    398399    }
     
    407408                            <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M16.5 6a4.5 4.5 0 1 1-9 0 4.5 4.5 0 0 1 9 0zM18 6A6 6 0 1 0 6 6a6 6 0 0 0 12 0zM3 23.25a9 9 0 1 1 18 0 .75.75 0 0 0 1.5 0c0-5.799-4.701-10.5-10.5-10.5S1.5 17.451 1.5 23.25a.75.75 0 0 0 1.5 0z"></path></svg>
    408409                        </span>
    409                         <?php if ($meta['custom_avail'] == true || (!$disable_adult_price && $adult_price != false)) { ?>
     410                        <?php if ($custom_avail == true || (!$disable_adult_price && $adult_price != false)) { ?>
    410411                            <div class="adults-text"><?php echo (!empty($adults) ? $adults : '0') . ' ' . __("Adults", "tourfic"); ?></div>
    411412                        <?php } ?>
    412                         <?php if ($meta['custom_avail'] == true || (!$disable_child_price && $child_price != false)) { ?>
     413                        <?php if ($custom_avail == true || (!$disable_child_price && $child_price != false)) { ?>
    413414                            <div class="person-sep"></div>
    414415                            <div class="child-text"><?php echo (!empty($child) ? $child : '0') . ' ' . __("Children", "tourfic"); ?></div>
    415416                        <?php } ?>
    416                         <?php if ($meta['custom_avail'] == true || (!$disable_infant_price && $infant_price != false)) { ?>
     417                        <?php if ($custom_avail == true || (!$disable_infant_price && $infant_price != false)) { ?>
    417418                            <div class="person-sep"></div>
    418419                            <div class="infant-text"><?php echo (!empty($infant) ? $infant : '0') . ' ' . __("Infant", "tourfic"); ?></div>
     
    421422                    <div class="tf_acrselection-wrap" style="display: none;">
    422423                        <div class="tf_acrselection-inner">
    423                             <?php if ($meta['custom_avail'] == true || (!$disable_adult_price && $adult_price != false)) { ?>
     424                            <?php if ($custom_avail == true || (!$disable_adult_price && $adult_price != false)) { ?>
    424425                            <div class="tf_acrselection">
    425426                                <div class="acr-label"><?php _e('Adults', 'tourfic'); ?></div>
     
    431432                            </div>
    432433                            <?php } ?>
    433                             <?php if ($meta['custom_avail'] == true || (!$disable_child_price && $child_price != false)) { ?>
     434                            <?php if ($custom_avail == true || (!$disable_child_price && $child_price != false)) { ?>
    434435                            <div class="tf_acrselection">
    435436                                <div class="acr-label"><?php _e('Children', 'tourfic'); ?></div>
     
    441442                            </div>
    442443                            <?php } ?>
    443                             <?php if ($meta['custom_avail'] == true || (!$disable_infant_price && $infant_price != false)) { ?>
     444                            <?php if ($custom_avail == true || (!$disable_infant_price && $infant_price != false)) { ?>
    444445                            <div class="tf_acrselection">
    445446                                <div class="acr-label"><?php _e('Infant', 'tourfic'); ?></div>
     
    484485
    485486                            const allowed_times = JSON.parse('<?php echo wp_json_encode($allowed_times ?? []) ?>');
    486                             const custom_avail = '<?php echo $meta['custom_avail'] ?>';
     487                            const custom_avail = '<?php echo $custom_avail; ?>';
    487488                            if (custom_avail == false && allowed_times.length > 0) {
    488489                                populateTimeSelect(allowed_times)
  • tourfic/trunk/inc/functions/woocommerce/wc-hotel.php

    r2696074 r2700472  
    103103    //$response['errors'][] = $pricing_by;
    104104    // If no errors then process
    105     if( 0 == count( $response['errors'] ) ) {
     105    if(!array_key_exists('errors', $response) || count($response['errors']) == 0) {
    106106
    107107        $tf_room_data['tf_hotel_data']['order_type'] = 'hotel';
     
    116116        $tf_room_data['tf_hotel_data']['room_name'] = $room_name;
    117117
    118         $tf_room_data['tf_hotel_data']['price'] = $get_room_type['price'];
    119         $tf_room_data['tf_hotel_data']['sale_price'] = $get_room_type['sale_price'];
    120 
    121118        if ($pricing_by == '1') {
    122119            $total_price = $rooms[$room_id]['price'];
  • tourfic/trunk/inc/functions/woocommerce/wc-tour.php

    r2696074 r2700472  
    2525    $tour_type = !empty($meta['type']) ? $meta['type'] : '';
    2626   
    27     // If continuous is selected but pro is not activated return
    28     if ($tour_type == 'continuous' && !defined( 'TF_PRO' )) {
     27    /**
     28     * If fixed is selected but pro is not activated
     29     *
     30     * show error
     31     *
     32     * @return
     33     */
     34    if ($tour_type == 'fixed' && !defined( 'TF_PRO' )) {
     35        $response['errors'][] = __( 'Fixed Availability is selected but Tourfic Pro is not activated!', 'tourfic' );
     36        $response['status'] = 'error';
     37        echo wp_json_encode( $response );
     38        die();
    2939        return;
    3040    }
     41
    3142    if ($tour_type == 'fixed') {
    3243
     
    5364    } else {
    5465
     66    }
     67
     68    /**
     69     * If continuous custom availability is selected but pro is not activated
     70     *
     71     * Show error
     72     *
     73     * @return
     74     */
     75    if ($tour_type == 'continuous' && $custom_avail == true && !defined( 'TF_PRO' )) {
     76        $response['errors'][] = __( 'Custom Continous Availability is selected but Tourfic Pro is not activated!', 'tourfic' );
     77        $response['status'] = 'error';
     78        echo wp_json_encode( $response );
     79        die();
     80        return;
    5581    }
    5682
     
    243269     * Add to cart with custom data
    244270     */
    245     if ( 0 == count( $response['errors'] ) ) {
     271    if (!array_key_exists('errors', $response) || count($response['errors']) == 0) {
    246272
    247273        $tf_tours_data['tf_tours_data']['order_type'] = 'tour';
  • tourfic/trunk/readme.txt

    r2696074 r2700472  
    22Contributors: fida02, themefic, devkabir, mdshuvo, codexa, kamrul0424, raihan143, hasanet
    33Tags: tour booking, tour operator, travel, tour, trip, travel-booking, travel agency, hotel booking, reservation, hotel, booking engine, booking, booking calendar, booking system, calendar, online booking, travel, airbnb, booking.com, homeaway, apartments, villa, hostel, reservation system, travel itinerary, trekking, tour itinerary, travel booking engine, tour accommodation listings, travel destinations, trip book, travel payment, woocommerce tour booking, woocommerce travel booking plugin, woocommerce tour, woocommerce travel, wordpress travel, wp travel plugin, wp travel, wordpress travel booking plugin, wordpress tour plugin, tour booking plugin wordpress, wordpress travel agency, travel tour wordpress, wordpress tour, tour-booking, travel wp, travel wordpress, tour wp, travel wordpress, hotel wp, hotel wordpress
    4 Requires at least: 4.7
     4Requires at least: 5.4
    55Tested up to: 5.9.2
    6 Stable tag: 2.1.0
     6Stable tag: 2.1.1
    77Requires PHP: 7.1
    88License: GPLv2 or later
     
    196196
    197197== Changelog ==
     198
     199= 2.1.1 - 28/03/2022 =
     200
     201* Added: Tour location is required warning on tour publish/edit page.
     202* Added: Permalink settings page on Global settings section
     203* Fixed: Tour booking issue
     204* Fixed: Tour description visibility issue
     205* Fixed: Single tour hero section background position and size.
     206* Fixed: Hotel room availability based on person number
     207* Fixed: Hotel booking calendar minimum date set to today date
     208* Fixed: Tour and hotel permalink structure
     209* Fixed: Tour and hotel's terms and conditions auto paragraph issue
     210* Fixed: Compatible issue with Twenty Twenty Two theme
     211* Fixed: PHP variable error while booking through WooCommerce
     212* Removed: Hotel gallery thumbnails
    198213
    199214= 2.1.0 - 18/03/2022 =
  • tourfic/trunk/templates/hotel/single-hotel.php

    r2696074 r2700472  
    218218                            <div class="swiper-button-next sw-btn"><i class="fa fa-angle-right"></i></div>
    219219                        </div>
    220                         <div class="single-slider-wrapper fl-wrap">
    221                             <div class="tf_slider-nav fl-wrap">
    222                                 <?php foreach ( (array) $gallery_ids as $attachment_id ) {
    223                                     echo '<div class="slick-slide-item">';
    224                                         echo wp_get_attachment_image( $attachment_id, 'thumbnail' );
    225                                     echo '</div>';
    226                                 } ?>
    227                             </div>
    228                         </div>
    229220                    </div>
    230221                </div>
     
    474465                <div class="tf_toc-wrap">
    475466                    <div class="tf_toc-inner">
    476                         <?php echo $tc; ?>
     467                        <?php echo wpautop($tc); ?>
    477468                    </div>
    478469                </div>
     
    494485<?php endwhile; ?>
    495486<?php
    496 get_footer('tourfic');
     487get_footer();
  • tourfic/trunk/templates/tour/single-tour.php

    r2696074 r2700472  
    4141}
    4242$hero_title = !empty($meta['hero_title']) ? $meta['hero_title'] : '';
     43
    4344// Highlights
    4445$highlights = !empty($meta['additional_information']) ? $meta['additional_information'] : '';
     
    211212            <div class="tf-row">
    212213                <div class="tf-overview-content-wrapper">
    213                     <div class="tf-overview-item">
    214                         <div class="tf-overview-text">                         
    215                             <h2><?php _e( 'Highlights','tourfic' ); ?></h2>
    216                             <?php echo $highlights; ?>
    217 
    218                         </div>
    219                         <div class="tf-ohi-image">
    220                             <img src="<?php echo wp_get_attachment_url( get_post_thumbnail_id(), 'tf_gallery_thumb' ); ?>" alt="">
    221                         </div>
    222                     </div>
    223                     <?php if( $highlights ): ?>
    224                     <div class="">
     214                    <?php if($highlights) { ?>
     215                        <div class="tf-overview-item">
     216                            <div class="tf-overview-text">                         
     217                                <h2><?php _e( 'Highlights','tourfic' ); ?></h2>
     218                                <?php echo $highlights; ?>
     219                            </div>
     220                            <div class="tf-ohi-image">
     221                                <img src="<?php echo wp_get_attachment_url( get_post_thumbnail_id(), 'tf_gallery_thumb' ); ?>" alt="">
     222                            </div>
     223                        </div>
     224                    <?php }
     225                    if(get_the_content()) { ?>
    225226                        <div class="tf-overview-text">
    226227                            <h2><?php _e( 'Overview','tourfic' ); ?></h2>
    227228                            <?php the_content(); ?>
    228229                        </div>
    229                     </div>
    230                     <?php endif; ?>
     230                    <?php } ?>
    231231                </div>
    232232            </div>
     
    361361                        <h2><?php _e("Terms and Conditions", 'tourfic'); ?></h2>
    362362                        <div class="tf-travel-itinerary-items-wrapper">
    363                             <?php echo $terms_and_conditions; ?>
     363                            <?php echo wpautop($terms_and_conditions); ?>
    364364                        </div>
    365365                    </div>
  • tourfic/trunk/tourfic.php

    r2696074 r2700472  
    88 * Text Domain:     tourfic
    99 * Domain Path:     /lang/
    10  * Version:         2.1.0
     10 * Version:         2.1.1
    1111 * Tested up to: 5.9.2
    1212 * WC tested up to: 6.3.1
     
    9292 */
    9393if ( !defined( 'TOURFIC' ) ) {
    94     define( 'TOURFIC', '2.1.0' );
     94    define( 'TOURFIC', '2.1.1' );
    9595}
    9696
     
    201201            <div id="message" class="error">
    202202                <p><?php printf( __( 'Tourfic requires %1$s WooCommerce %2$s to be activated.', 'tourfic' ), '<strong><a href="https://wordpress.org/plugins/woocommerce/" target="_blank">', '</a></strong>' ); ?></p>
    203                 <p><a class="install-now button tf-install" data-plugin-slug="woocommerce"><?php esc_attr_e( 'Install Now', 'tourfic' ); ?></a></p>
     203                <p><a class="install-now button" href="<?php echo esc_url( admin_url('/plugin-install.php?s=slug:woocommerce&tab=search&type=term') ); ?>"><?php esc_attr_e( 'Install Now', 'tourfic' ); ?></a></p>
    204204            </div>
    205205
Note: See TracChangeset for help on using the changeset viewer.