ipentest

faridjame-googleapi

Sep 2nd, 2020 (edited)
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. function flo__autoload($class_name)
  4. {
  5.  
  6.     if (substr($class_name, 0, 6) == 'widget') {
  7.         $class_name = str_replace('widget_', '', $class_name);
  8.         if (is_file(get_template_directory() . '/lib/php/widget/' . $class_name . '.php')) {
  9.             include get_template_directory() . '/lib/php/widget/' . $class_name . '.php';
  10.  
  11.         }
  12.     }
  13.     if (is_file(get_template_directory() . '/lib/php/' . $class_name . '.class.php')) {
  14.         include_once get_template_directory() . '/lib/php/' . $class_name . '.class.php';
  15.         if (is_file(get_template_directory() . '/lib/php/' . $class_name . '.register.php')) {
  16.             include_once get_template_directory() . '/lib/php/' . $class_name . '.register.php';
  17.         }
  18.     }
  19. }
  20.  
  21. spl_autoload_register("flo__autoload");
  22.  
  23.  
  24. /*register tags and categories taxonomies for video posts*/
  25. $video_categ_permalink = options::get_value('general', 'video_categ_link');
  26. if (!$video_categ_permalink) {
  27.     $video_categ_permalink = 'video-category';
  28. }
  29.  
  30. $video_tags_permalink = options::get_value('general', 'video_tags_link');
  31. if (!$video_tags_permalink) {
  32.     $video_tags_permalink = 'video-tag';
  33. }
  34.  
  35.  
  36. $video_category = array(
  37.         'hierarchical' => true,
  38.         'labels'       => array(
  39.                 'name'              => _x('Video Categories', 'taxonomy general name', 'flotheme'),
  40.                 'singular_name'     => _x('Video Category', 'taxonomy singular name', 'flotheme'),
  41.                 'search_items'      => __('Search Categories', 'flotheme'),
  42.                 'all_items'         => __('All Categories', 'flotheme'),
  43.                 'parent_item'       => __('Parent Category', 'flotheme'),
  44.                 'parent_item_colon' => __('Parent Category:', 'flotheme'),
  45.                 'edit_item'         => __('Edit Category', 'flotheme'),
  46.                 'update_item'       => __('Update Category', 'flotheme'),
  47.                 'add_new_item'      => __('Add New Category', 'flotheme'),
  48.                 'new_item_name'     => __('New Category Name', 'flotheme'),
  49.                 'menu_name'         => __('Categories', 'flotheme'),
  50.         ),
  51.         'show_ui'      => true,
  52.         'query_var'    => true,
  53.         'rewrite'      => array('slug' => $video_categ_permalink),
  54. );
  55.  
  56. $video_tag = array(
  57.         'hierarchical'          => false,
  58.         'labels'                => array(
  59.                 'name'                       => _x('Video Tags', 'taxonomy general name', 'flotheme'),
  60.                 'singular_name'              => _x('Video Tag', 'taxonomy singular name', 'flotheme'),
  61.                 'search_items'               => __('Search Tags', 'flotheme'),
  62.                 'popular_items'              => __('Popular Tags', 'flotheme'),
  63.                 'all_items'                  => __('All Tags', 'flotheme'),
  64.                 'parent_item'                => NULL,
  65.                 'parent_item_colon'          => NULL,
  66.                 'edit_item'                  => __('Edit Tag', 'flotheme'),
  67.                 'update_item'                => __('Update Tag', 'flotheme'),
  68.                 'add_new_item'               => __('Add New Tag', 'flotheme'),
  69.                 'new_item_name'              => __('New Tag Name', 'flotheme'),
  70.                 'separate_items_with_commas' => __('Separate tags with commas', 'flotheme'),
  71.                 'add_or_remove_items'        => __('Add or remove tags', 'flotheme'),
  72.                 'choose_from_most_used'      => __('Choose from the most used tags', 'flotheme'),
  73.                 'menu_name'                  => __('Tags', 'flotheme'),
  74.         ),
  75.         'show_ui'               => true,
  76.         'update_count_callback' => '_update_post_term_count',
  77.         'query_var'             => true,
  78.         'rewrite'               => array('slug' => $video_tags_permalink),
  79. );
  80.  
  81. register_taxonomy('video-category', 'video', $video_category);
  82. register_taxonomy('video-tag', 'video', $video_tag);
  83. /* EOF register tags and categories taxonomies for video posts */
  84.  
  85.  
  86.  
  87.  
  88. /*register tags and categories taxonomies for gallery posts*/
  89. $gallery_categ_permalink = options::get_value('general', 'gallery_categ_link');
  90. if (!$gallery_categ_permalink) {
  91.     $gallery_categ_permalink = 'gallery-category';
  92. }
  93.  
  94. $gallery_tags_permalink = options::get_value('general', 'gallery_tags_link');
  95. if (!$gallery_tags_permalink) {
  96.     $gallery_tags_permalink = 'gallery-tag';
  97. }
  98.  
  99. $gallery_category = array(
  100.         'hierarchical' => true,
  101.         'labels'       => array(
  102.                 'name'              => _x('Gallery Categories', 'taxonomy general name', 'flotheme'),
  103.                 'singular_name'     => _x('Gallery Category', 'taxonomy singular name', 'flotheme'),
  104.                 'search_items'      => __('Search Categories', 'flotheme'),
  105.                 'all_items'         => __('All Categories', 'flotheme'),
  106.                 'parent_item'       => __('Parent Category', 'flotheme'),
  107.                 'parent_item_colon' => __('Parent Category:', 'flotheme'),
  108.                 'edit_item'         => __('Edit Category', 'flotheme'),
  109.                 'update_item'       => __('Update Category', 'flotheme'),
  110.                 'add_new_item'      => __('Add New Category', 'flotheme'),
  111.                 'new_item_name'     => __('New Category Name', 'flotheme'),
  112.                 'menu_name'         => __('Categories', 'flotheme'),
  113.         ),
  114.         'show_ui'      => true,
  115.         'query_var'    => true,
  116.         'rewrite'      => array('slug' => $gallery_categ_permalink),
  117. );
  118.  
  119. $gallery_tag = array(
  120.         'hierarchical'          => false,
  121.         'labels'                => array(
  122.                 'name'                       => _x('Gallery Tags', 'taxonomy general name', 'flotheme'),
  123.                 'singular_name'              => _x('Gallery Tag', 'taxonomy singular name', 'flotheme'),
  124.                 'search_items'               => __('Search Tags', 'flotheme'),
  125.                 'popular_items'              => __('Popular Tags', 'flotheme'),
  126.                 'all_items'                  => __('All Tags', 'flotheme'),
  127.                 'parent_item'                => NULL,
  128.                 'parent_item_colon'          => NULL,
  129.                 'edit_item'                  => __('Edit Tag', 'flotheme'),
  130.                 'update_item'                => __('Update Tag', 'flotheme'),
  131.                 'add_new_item'               => __('Add New Tag', 'flotheme'),
  132.                 'new_item_name'              => __('New Tag Name', 'flotheme'),
  133.                 'separate_items_with_commas' => __('Separate tags with commas', 'flotheme'),
  134.                 'add_or_remove_items'        => __('Add or remove tags', 'flotheme'),
  135.                 'choose_from_most_used'      => __('Choose from the most used tags', 'flotheme'),
  136.                 'menu_name'                  => __('Tags', 'flotheme'),
  137.         ),
  138.         'show_ui'               => true,
  139.         'update_count_callback' => '_update_post_term_count',
  140.         'query_var'             => true,
  141.         'rewrite'               => array('slug' => $gallery_tags_permalink),
  142. );
  143.  
  144. register_taxonomy('gallery-category', 'gallery', $gallery_category);
  145. register_taxonomy('gallery-tag', 'gallery', $gallery_tag);
  146. /* EOF register tags and categories taxonomies for gallery posts */
  147.  
  148. /*register  categories taxonomies for testimonial posts*/
  149.     $testimonial_category = array(
  150.         'hierarchical' => true,
  151.         'labels' => array(
  152.             'name' => _x( 'Testimonial Categories', 'taxonomy general name' ,'flotheme' ),
  153.             'singular_name' => _x( 'Testimonial Category', 'taxonomy singular name','flotheme' ),
  154.             'search_items' =>  __( 'Search Categories', 'flotheme' ),
  155.             'all_items' => __( 'All Categories', 'flotheme' ),
  156.             'parent_item' => __( 'Parent Category', 'flotheme' ),
  157.             'parent_item_colon' => __( 'Parent Category:', 'flotheme' ),
  158.             'edit_item' => __( 'Edit Category', 'flotheme' ),
  159.             'update_item' => __( 'Update Category', 'flotheme' ),
  160.             'add_new_item' => __( 'Add New Category', 'flotheme' ),
  161.             'new_item_name' => __( 'New Category Name', 'flotheme' ),
  162.             'menu_name' => __( 'Categories', 'flotheme' ),
  163.         ),  
  164.         'show_ui' => true,
  165.         'query_var' => true,
  166.         'rewrite' => array( 'slug' => 'testimonial-category' ),
  167.     );
  168.     register_taxonomy('testimonial-category', 'testimonial', $testimonial_category);
  169.     /* EOF register  categories  for testimonial posts */
  170.  
  171. /**
  172.  * Load Theme Variable Data
  173.  * @param string $var
  174.  * @return string
  175.  */
  176. function theme_data_variable($var)
  177. {
  178.     if (!is_file(STYLESHEETPATH . '/style.css')) {
  179.         return '';
  180.     }
  181.  
  182.     $theme_data = wp_get_theme();
  183.     return $theme_data->{$var};
  184.  
  185. }
  186.  
  187. function get_post_categories($post_id, $only_first_cat = false, $taxonomy = 'category', $margin_elem_start = '', $margin_elem_end = '', $delimiter = ', ', $a_class = '', $show_cat_name = true)
  188. {
  189.  
  190.     $cat        = '';
  191.     $categories = wp_get_post_terms($post_id, $taxonomy);
  192.     if (!empty($categories)) {
  193.  
  194.         $ind = 1;
  195.         foreach ($categories as $category) {
  196.             $categ = get_category($category);
  197.             if ($ind != count($categories) && !$only_first_cat) {
  198.                 $cat_delimiter = $delimiter;
  199.             } else {
  200.                 $cat_delimiter = '';
  201.             }
  202.  
  203.             if ($show_cat_name) {
  204.                 $name = $categ->name;
  205.             } else {
  206.                 $name = '';
  207.             }
  208.  
  209.             $cat .= $margin_elem_start . '<a href="' . get_category_link($category) . '" class="' . $a_class . '">' . $name . $cat_delimiter . '</a>' . $margin_elem_end;
  210.  
  211.             if ($only_first_cat) {
  212.                 break;
  213.             }
  214.  
  215.  
  216.             $ind++;
  217.         }
  218.  
  219.  
  220.         //$cat = __('in','flotheme').' '.   $cat;
  221.     }
  222.  
  223.     return $cat . ' ';
  224. }
  225.  
  226. function load_google_fonts()
  227. {
  228.     $protocol = is_ssl() ? 'https' : 'http';
  229.  
  230.  
  231.     $result = '';
  232.     $fonts  = array();
  233.  
  234. //  $default_system_fonts = array(
  235. //          "Cantarell, Tahoma, Verdana, Helvetica, sans-serif",
  236. //          "'Unica One', Arial, Helvetica, sans-serif",
  237. //          "'Montserrat Subrayada', Arial, Helvetica, sans-serif",
  238. //          'Arial, Helvetica, sans-serif',
  239. //          'Times, Georgia, serif',
  240. //          'Verdana, Tahoma, sans-serif',
  241. //          "'Century Gothic', Helvetica, Arial, sans-serif",
  242. //          'Helvetica, Arial, sans-serif',
  243. //          'Georgia, Times, serif',
  244. //          "'Lucida Grande', 'Lucida Sans Unicode', Tahoma, Verdana, sans-serif",
  245. //          'Palatino, Georgia, serif',
  246. //          'Tahoma, Verdana, Helvetica, sans-serif',
  247. //          'Garamond, Palatino, Georgia, serif',
  248. //          'Courier, monospace',
  249. //          "'Trebuchet MS', Tahoma, Helvetica, sans-serif",
  250. //          "'Comic Sans MS', Arial, sans-serif",
  251. //          'Bookman, Palatino, Georgia, serif'
  252. //  );
  253.  
  254.     $default_system_fonts = array(
  255.             "Cantarell",
  256.             "Unica One",
  257.             //"Montserrat Subrayada",
  258.             'Arial',
  259.             'Times',
  260.             'Verdana',
  261.             "Century Gothic",
  262.             'Helvetica',
  263.             'Georgia',
  264.             "Lucida Grande",
  265.             'Palatino',
  266.             'Tahoma',
  267.             'Garamond',
  268.             'Courier',
  269.             "Trebuchet MS",
  270.             "Comic Sans MS",
  271.             'Bookman'
  272.     );
  273.  
  274.     $typo = options::get_value('typography');
  275.    
  276.  
  277.     //deb::e($typo);
  278.     $settings_fonts = array(
  279.         //$typo[ 'general_font_font_family' ],
  280.         $typo[ 'menu_links_font_family'],
  281.         //$typo[ 'menu_menu_description_family'],
  282.         $typo[ 'header_mobile_label_font_family'],
  283.         $typo[ 'slideshow_title_font_family'],
  284.         $typo[ 'slideshow_description_font_family'],
  285.         $typo[ 'logo_font_font_family'],
  286.         $typo[ 'h1_font_font_family'],
  287.         $typo[ 'h2_font_font_family'],
  288.         $typo[ 'h3_font_font_family'],
  289.         $typo[ 'h4_font_font_family'],
  290.         $typo[ 'h5_font_font_family'],
  291.         $typo[ 'h6_font_font_family'],
  292.         $typo[ 'content_text_font_family'],
  293.         $typo[ 'pretitle_font_font_family'],
  294.         $typo[ 'subtitle_font_font_family'],
  295.         $typo[ 'share_font_font_family'],
  296.         $typo[ 'meta_font_font_family' ],
  297.  
  298.         $typo[ 'inputs_font_family'],
  299.  
  300.         $typo[ 'pagination_font_font_family'],
  301.         $typo[ 'footer_title_font_family'],
  302.         $typo[ 'footer_description_font_family'],
  303.         $typo[ 'footer_bottom_text_font_family'],
  304.         $typo[ 'mosaic_title_font_font_family'],
  305.         $typo[ 'mosaic_content_font_font_family'],
  306.     );
  307.  
  308.     if (options::get_value('styling', 'logo_type') == 'text') {
  309.         $settings_fonts[] = options::get_value('styling', 'logo_font_family');
  310.     }
  311.  
  312.     foreach ($settings_fonts as $font) {
  313.  
  314.         if (options::get_value('typography', 'google_fonts_api_key') == '') { // if google api key is not used
  315.             if (!empty($font)) {
  316.                 if (strpos($font, '&v1') === false) {
  317.                     $font .= '&v1';
  318.                 }
  319.             }
  320.         }
  321.  
  322.         if (!in_array($font, $fonts)) {
  323.  
  324.             $fonts[] = $font; /*append each font only 1 time*/
  325.         }
  326.     }
  327.  
  328.     // check if there are any custom fonts
  329.     $custom_fonts       = get_option('_customfonts');
  330.     $custom_fonts_array = array();
  331.  
  332.     if (is_array($custom_fonts) && sizeof($custom_fonts)) {
  333.         foreach ($custom_fonts as $key => $custom_font) {
  334.             if (isset($custom_font['title']) && strlen($custom_font['title']) && isset($custom_font['fonturl']) && cosmo_isValidURL($custom_font['fonturl'])) {
  335.                 //$custom_fonts_array[$custom_font['title']] = $custom_font['fonturl'];
  336.                 $custom_fonts_array[$custom_font['title']] = $custom_font;
  337.            
  338.             }
  339.         }
  340.     }
  341.  
  342.     $flo_custom_fonts = '';
  343.  
  344.     $counter = 1;
  345.     foreach ($fonts as $g_font) {
  346.  
  347.         if (strlen(  trim(trim($g_font),'&v1') )) {
  348.  
  349.             if (array_key_exists(str_replace('&v1', '', $g_font), $custom_fonts_array)) { // if used font is a custom font we will load it from local source
  350.                 $c_font = $custom_fonts_array[str_replace('&v1', '', $g_font)];
  351.                 //wp_enqueue_style( 'cosmo-gfont-'.$counter, "$c_font" );
  352.  
  353.  
  354.                 $c_fonts_url = flo_get_custom_font_urls($c_font);
  355.  
  356.                 ob_start();
  357.                 ob_clean();
  358.  
  359.                 ?>
  360.                 @font-face {
  361.                 font-family: '<?php echo str_replace('&v1', '', $g_font) ?>';
  362.                 font-style: normal;
  363.                 src: local('<?php echo str_replace('&v1', '', $g_font) ?>'),  <?php echo $c_fonts_url; ?>;
  364.                 }
  365.                 <?php
  366.                 $flo_custom_fonts .= ob_get_clean();
  367.  
  368.             } else {
  369.  
  370.                 // usually we have this case when the fonts are loaded usin API KEY and we have several versions of the
  371.                 // same font and font name is devided by font style by '|'
  372.                 if (strstr($g_font, '|') !== false) {
  373.                     $family_exploded = explode('|', $g_font);
  374.  
  375.                     if(strlen(trim($family_exploded[0]))){  // if the current font has a name (the default font has no name)
  376.                         $font_style_url = $protocol . '://fonts.googleapis.com/css?family=' . trim($family_exploded[0]); // font name
  377.  
  378.                         if (isset($family_exploded[1]) && trim($family_exploded[1]) != 'regular') {
  379.                             $font_style_url .= ":" . trim($family_exploded[1]); // add the font style if necessary
  380.                         }
  381.  
  382.                         wp_enqueue_style('flo-gfont-' . $counter, "$font_style_url");
  383.                     }
  384.  
  385.                 } else {
  386.  
  387.                     // enque the font only if it is a google font and not a default one
  388.                    
  389.                     if (!in_array(str_replace('&v1', '', $g_font), $default_system_fonts) && !flo_is_system_font($g_font, $default_system_fonts) ) {
  390.                         $the_font = str_replace(' ', '+', trim($g_font));
  391.  
  392.                         if(strlen(trim($the_font))){ // if the current font has a name (the default font has no name)
  393.                             wp_enqueue_style('flo-gfont-' . $counter, "$protocol://fonts.googleapis.com/css?family=$the_font' rel='stylesheet' type='text/css");
  394.                         }
  395.  
  396.                     }
  397.                 }
  398.  
  399.  
  400.             }
  401.  
  402.  
  403.         }
  404.         $counter++;
  405.     }
  406.  
  407.     if (strlen($flo_custom_fonts)) {
  408.         ?>
  409.         <style type="text/css"> <?php echo $flo_custom_fonts; ?> </style>  <?php
  410.     }
  411.  
  412. }
  413.  
  414. /*
  415.  * Function  flo_get_custom_font_urls
  416.  *
  417.  * Creates the source for the uploaded custom fonts
  418.  *
  419.  * @font_struct (array) array containing the font name and up to 4 URLs
  420.  * @return (str) - the source URLs ready to be used in css for font-face
  421.  */
  422. function flo_get_custom_font_urls($font_struct){
  423.  
  424.  
  425.     $src_url = '';
  426.     if(isset($font_struct['fonturl'])){
  427.         $src_url  =  'url('.$font_struct['fonturl'].' )' . flo_get_font_format($font_struct['fonturl']);   
  428.     }
  429.  
  430.     // check and load the fonts added in the fields 2,3,4
  431.     for($i = 2; $i<5; $i++){
  432.         if(isset( $font_struct[$i.'fonturl'] ) && strlen($font_struct[$i.'fonturl']) ){ //  if the user uploaded a font in the current field, we will add it
  433.             $src_url .= ', '. 'url('.$font_struct[$i.'fonturl'].' )' . flo_get_font_format($font_struct[$i.'fonturl']);
  434.         }
  435.     }
  436.  
  437.     return $src_url;
  438. }
  439.  
  440.  
  441. function flo_get_font_format($font_url){
  442.     // expected input parameter:
  443.     // http://demo.flothemes.com/cozy/files/2014/09/brandon_reg.otf
  444.  
  445.     $font_format_options = array('svg' => 'svg',
  446.                         'otf' => 'opentype',
  447.                         'woff' => 'woff',
  448.                         'ttf' => 'truetype'
  449.                     );
  450.  
  451.     $font_format = '';
  452.     if(strstr($font_url, '.')){ // check if the given url has a dot
  453.         $font_url_array = explode('.', $font_url);
  454.         $font_extention = $font_url_array[sizeof($font_url_array)-1]; // this should match the font extention. i.e. 'otf'
  455.         $font_format =  " format('".$font_format_options[$font_extention]."')";
  456.     }
  457.  
  458.     return $font_format;
  459. }
  460.  
  461. /*
  462.  * Check if a font is a a system font
  463.  * $params:
  464.  *      $font - str -> the passed font
  465.  *      $default_system_fonts  -  array with used default fonts
  466.  * return: bool
  467.  */
  468. function flo_is_system_font($font, $default_system_fonts){
  469.     // If it is a system font then it should come in a format like this:
  470.     // Verdana, Tahoma, sans-serif
  471.     // So we want to split the input tring by ',', and
  472.  
  473.     if(strstr($font, ',')){
  474.         $font_array = explode(',', $font);
  475.         if(in_array($font_array[0], $default_system_fonts)){
  476.             return true;
  477.         }else{
  478.             return false;
  479.         }
  480.     }else{
  481.         return false;
  482.     }
  483.  
  484. }
  485.  
  486. function flo_get_logo()
  487. {
  488.  
  489. global $logo_class;
  490.     $logo_type = options::get_value('styling', 'logo_type');
  491.     if ($logo_type == 'image') {
  492.  
  493.  
  494.         $sl_info = flo_get_page_slyder_info();
  495.         $logo_pos_options = array('top-left','top-center','top-right','middle-left','middle-center','middle-right');
  496.         $slideshow_logo_img = options::get_value('styling', 'slideshow_logo_url');
  497.         $main_logo_img = options::get_value('styling', 'logo_url');
  498.  
  499.         if(!strlen($slideshow_logo_img)){
  500.             $slideshow_logo_img = $main_logo_img;
  501.         }
  502.  
  503.         //var_dump(strlen(trim($slideshow_logo_img)),is_flo_full_slider_width_page() );
  504.         if( strlen(trim($slideshow_logo_img)) && is_flo_full_slider_width_page() && isset($sl_info['selected_slider_id']) && is_numeric($sl_info['selected_slider_id'])
  505.            && $sl_info['selected_slider_id'] > 0 && isset($sl_info['logo_position']) && (in_array($sl_info['logo_position'], $logo_pos_options ) || $sl_info['logo_position'] == 'logo-inside-menu' && $sl_info['menu_position'] == 'crowd-header-over' )  ){
  506.  
  507.             if(strlen($slideshow_logo_img)){
  508.                 $logo_img = $slideshow_logo_img;
  509.             }else{
  510.                 $logo_img = $main_logo_img;
  511.             }
  512.            
  513.             $desktop_size = options::get_value('styling', 'max_logo_width_desktop_slideshow_page');
  514.         }else{
  515.             $logo_img = $main_logo_img;
  516.             $desktop_size = options::get_value('styling', 'max_logo_width_desktop');
  517.         }
  518.  
  519.         if ($logo_img) {
  520.             $logo_class = ' site-logo ';
  521.  
  522.             $mobile_logo_img = options::get_value('styling', 'logo_url_mobile');
  523.  
  524. //          $logo_dim = aq_resize( esc_url($logo_img), '9999', '99999', false,  false );
  525.  
  526.             $orig_w = isset($logo_dim[1]) ? $logo_dim[1] : '';
  527.             $orig_h = isset($logo_dim[2]) ? $logo_dim[2] : '';
  528.             $mobile_size = options::get_value('styling', 'max_logo_width_mobile')? options::get_value('styling', 'max_logo_width_mobile'): 9999;
  529.             if(strlen($mobile_logo_img)){
  530. //              $mobile_logo_img = aq_resize( esc_url($mobile_logo_img), $mobile_size, 9999, false,  true);
  531.                 $mobile_logo = "<img src='" . $mobile_logo_img . "' alt='".get_bloginfo('name')."' class='crowd-mobile-logo' />";
  532.             }else{
  533. //              $m_logo_img = aq_resize( esc_url($logo_img), $mobile_size, 9999, false,  true);
  534.                 $mobile_logo = "<img src='" . $logo_img . "' alt='".get_bloginfo('name')."' class='crowd-mobile-logo' />";
  535.             }
  536.             $desktop_size = $desktop_size? $desktop_size: 9999;
  537. //          $logo_img = aq_resize( esc_url($logo_img), $desktop_size, 9999, false,  true);
  538.             $logo = "<div class='site-title'>
  539.                         <a class='logo' href='".home_url()."' rel='home' >
  540.                             <img src='" . $logo_img . "' alt='".get_bloginfo('name')."' class='crowd-descktop-logo' width='".$orig_w."' height='".$orig_h."' />
  541.                             ".$mobile_logo."
  542.                         </a>
  543.                     </div>";
  544.  
  545.         } else {
  546.             $logo_class = '  ';
  547.             $logo = NULL;
  548.         }
  549.         if (!$logo) {
  550.             $logo .= '<div class="site-title"><a href="'.home_url().'" rel="home">'.get_bloginfo('name').'</a></div>';
  551.             $logo_class = '  ';
  552.         }
  553.     } else {
  554.         $logo_class = '  ';
  555.         $logo = '<div class="site-title"><a href="'.home_url().'" rel="home">'.get_bloginfo('name').'</a></div>';
  556.     }
  557.  
  558.     return $logo;
  559. }
  560.  
  561. function get_item_label($item)
  562. {
  563.     $item = basename($item);
  564.     $item = str_replace('-', ' ', $item);
  565.     return $item;
  566. }
  567.  
  568. function get__categories($nr = -1)
  569. {
  570.     $categories = get_categories();
  571.  
  572.     $result = array();
  573.     foreach ($categories as $key => $category) {
  574.         if ($key == $nr) {
  575.             break;
  576.         }
  577.         if ($nr > 0) {
  578.             $result[$category->term_id] = $category->term_id;
  579.         } else {
  580.             $result[$category->term_id] = $category->cat_name;
  581.         }
  582.     }
  583.  
  584.     return $result;
  585. }
  586.  
  587. function get__pages($first_label = 'Select item')
  588. {
  589.     $pages  = get_pages();
  590.     $result = array();
  591.     if (is_array($first_label)) {
  592.         $result = $first_label;
  593.     } else {
  594.         if (strlen($first_label)) {
  595.             $result[] = $first_label;
  596.         }
  597.     }
  598.     foreach ($pages as $page) {
  599.         $result[$page->ID] = $page->post_title;
  600.     }
  601.  
  602.     return $result;
  603. }
  604.  
  605.  
  606. /**
  607.  * adds the language switcher to the menu object
  608.  *
  609.  * @params:
  610.  * $items - string, the menu items in html format
  611.  * $args - array, menu config arguments
  612.  * @return - string, the modified menu with them logo in the middle
  613.  */
  614. if (!function_exists('flo_add_lang_switcher_to_nav')) {
  615.     function flo_add_lang_switcher_to_nav($items, $args){
  616.         if(is_object($args->walker)){
  617.            
  618.             ob_start();
  619.             get_sidebar( 'header-translation' );
  620.             $lang_switcher = ob_get_contents();
  621.             ob_end_clean();
  622.  
  623.            
  624.             $items .= '<li class="menu-lang-switcher">'.$lang_switcher.'</li>';
  625.             return $items;
  626.  
  627.         }else{
  628.             return $items;
  629.         }
  630.     }
  631.  
  632. }
  633.  
  634. /**
  635.  * adds the logo to the menu object
  636.  *
  637.  * @params:
  638.  * $items - string, the menu items in html format
  639.  * $args - array, menu config arguments
  640.  * @return - string, the modified menu with them logo in the middle
  641.  */
  642. if (!function_exists('flo_add_menu_to_nav')) {
  643.     function flo_add_menu_to_nav($items, $args){
  644.  
  645.         if(is_object($args->walker)){
  646.             $number_menu_items = $args->walker->count;
  647.  
  648.             // now we need to find the index of the menu item where the LOGO will be inserted. i.e. if the menu has 6 menu items, then the logo will be inserted after the 3rd elem.
  649.             $before_logo_index = round( $number_menu_items/2);
  650.  
  651.  
  652.             if(!class_exists('simple_html_dom_node')){ // make sure we will not have conflicts with other plugins that are using simple_html_dom class
  653.                 require('simple_html_dom.php');
  654.             }
  655.  
  656.             // now we will parse the menu items dom using simple_html_dom library
  657.             $html = new simple_html_dom();
  658.             $html->load('<ul class="temp-wrapper">'.$items.'</ul>');
  659.  
  660.             $temp_wrapper = $html->find('.description', 0);
  661.             if(($temp_wrapper)) {
  662.                 $menu_items = $html->find('.temp-wrapper', 0)->children(); // get just the top level menu items
  663.  
  664.                 $new_menu = ''; // init and empty menu that will be built from the old menu + the logo
  665.                 foreach ($menu_items as $key => $value) {
  666.                     $original_class = $value->class;
  667.  
  668.  
  669.                     // update the class
  670.                     if( $key < $before_logo_index){
  671.                         $value->class = $original_class . ' left-logo-menu ';
  672.                     }else{
  673.                         $value->class = $original_class . ' right-logo-menu ';
  674.                     }
  675.  
  676.                     $new_menu .= $value->outertext;
  677.  
  678.                     // if we are in the middle of the menu, add the logo
  679.                     if($before_logo_index == $key+1){
  680.  
  681.                         $the_logo = flo_get_logo();
  682.  
  683.                         $new_menu .= '<li class="menu-item logo-inside site-logo">'.$the_logo.'</li>';
  684.                     }
  685.  
  686.                 }    
  687.             }
  688.  
  689.             return $new_menu;
  690.  
  691.         }else{
  692.             return $items;
  693.         }
  694.  
  695.     }
  696. }
  697.  
  698. function get__posts($args = array(), $first_label = 'Select item')
  699. {
  700.     $posts  = get_posts($args);
  701.     $result = array();
  702.  
  703.     if (is_array($first_label)) {
  704.         $result = $first_label;
  705.     } else {
  706.         if (strlen($first_label)) {
  707.             $result[] = $first_label;
  708.         }
  709.     }
  710.     if (is_array($posts) && !empty($posts)) {
  711.         foreach ($posts as $post) {
  712.             $result[$post->ID] = $post->post_title;
  713.         }
  714.     }
  715.  
  716.     return $result;
  717. }
  718.  
  719. function menu($id, $args = array())
  720. {
  721.  
  722.     $menu = new menu($args);
  723.  
  724.     $vargs = array(
  725.             'menu'                => '',
  726.             'container'           => '',
  727.             'container_class'     => '',
  728.             'container_id'        => '',
  729.             'menu_class'          => isset($args['class']) ? $args['class'] : '',
  730.             'menu_id'             => '',
  731.             'echo'                => false,
  732.             'fallback_cb'         => 'flo_page_menu',
  733.             'before'              => '',
  734.             'after'               => '',
  735.             'link_before'         => '',
  736.             'link_after'          => '',
  737.             'depth'               => 0,
  738.             'walker'              => $menu,
  739.             'theme_location'      => $id,
  740.             'nr_items_per_column' => isset($args['nr_items_per_column']) ? $args['nr_items_per_column'] : 9999, /// if you don't want to have several columns in menu, set 9999
  741.     );
  742.  
  743.     $result = wp_nav_menu($vargs);
  744.  
  745.  
  746.     if ($menu->need_more && $id != 'megusta') {
  747.         $result .= "</li></ul>" . $menu->aftersubm;
  748.     }
  749.  
  750.     return $result;
  751. }
  752.  
  753. /**
  754.  * Override the defaul WP_page_menu function to have the output we need
  755.  * Display or retrieve list of pages with optional home link.
  756.  *
  757.  * The arguments are listed below and part of the arguments are for {@link
  758.  * wp_list_pages()} function. Check that function for more info on those
  759.  * arguments.
  760.  *
  761.  * @since 4.0.0
  762.  *
  763.  * @param array|string $args {
  764.  *     Optional. Arguments to generate a page menu. {@see wp_list_pages()}
  765.  *     for additional arguments.
  766.  *
  767.  * @type string     $sort_column How to short the list of pages. Accepts post column names.
  768.  *                               Default 'menu_order, post_title'.
  769.  * @type string     $menu_class  Class to use for the div ID containing the page list. Default 'menu'.
  770.  * @type bool       $echo        Whether to echo the list or return it. Accepts true (echo) or false (return).
  771.  *                               Default true.
  772.  * @type string     $link_before The HTML or text to prepend to $show_home text. Default empty.
  773.  * @type string     $link_after  The HTML or text to append to $show_home text. Default empty.
  774.  * @type int|string $show_home   Whether to display the link to the home page. Can just enter the text
  775.  *                               you'd like shown for the home link. 1|true defaults to 'Home'.
  776.  * }
  777.  * @return string html menu
  778.  */
  779. function flo_page_menu( $args = array() ) {
  780.     $defaults = array('sort_column' => 'menu_order, post_title', 'menu_class' => 'menu', 'echo' => true, 'link_before' => '', 'link_after' => '');
  781.     $args = wp_parse_args( $args, $defaults );
  782.  
  783.     $menu = '';
  784.  
  785.     $list_args = $args;
  786.  
  787.     // Show Home in the menu
  788.     if ( ! empty($args['show_home']) ) {
  789.         if ( true === $args['show_home'] || '1' === $args['show_home'] || 1 === $args['show_home'] )
  790.             $text = __('Home','flotheme');
  791.         else
  792.             $text = $args['show_home'];
  793.         $class = '';
  794.         if ( is_front_page() && !is_paged() )
  795.             $class = 'class="current_page_item"';
  796.         $menu .= '<li ' . $class . '><a href="' . home_url( '/' ) . '">' . $args['link_before'] . $text . $args['link_after'] . '</a></li>';
  797.         // If the front page is a page, add it to the exclude list
  798.         if (get_option('show_on_front') == 'page') {
  799.             if ( !empty( $list_args['exclude'] ) ) {
  800.                 $list_args['exclude'] .= ',';
  801.             } else {
  802.                 $list_args['exclude'] = '';
  803.             }
  804.             $list_args['exclude'] .= get_option('page_on_front');
  805.         }
  806.     }
  807.  
  808.     $list_args['echo'] = false;
  809.     $list_args['title_li'] = '';
  810.     $menu .= str_replace( array( "\r", "\n", "\t" ), '', wp_list_pages($list_args) );
  811.  
  812.     if ( $menu )
  813.         $menu = '<ul class="' . esc_attr($args['menu_class']) . '">' . $menu . '</ul>';
  814.  
  815.     //$menu = '<div class="' . esc_attr($args['menu_class']) . '">' . $menu . "</div>\n";
  816.  
  817.    
  818.     if ( $args['echo'] )
  819.         echo $menu;
  820.     else
  821.         return $menu;
  822. }
  823.  
  824. if (!function_exists('clear_meta')) {
  825.     function clear_meta($post_id)
  826.     {
  827.  
  828.         $resources = array('conference' => array('sponsor', 'presentation', 'exhibitor'), 'presentation' => array('speaker'));
  829.         foreach ($resources as $res => $boxes) {
  830.             $posts = get_posts(array('post_type' => $res));
  831.             foreach ($posts as $post) {
  832.                 foreach ($boxes as $box) {
  833.                     $box_meta = meta::get_meta($post->ID, $box);
  834.                     foreach ($box_meta as $index => $meta) {
  835.                         if ($meta['idrecord'] == $post_id) {
  836.                             meta::delete($res, $box, $post->ID, '', $index);
  837.                         }
  838.                     }
  839.                 }
  840.             }
  841.         }
  842.     }
  843. }
  844.  
  845. if (!function_exists('cosmo_breadcrumbs')) {
  846.     function cosmo_breadcrumbs()
  847.     {
  848.  
  849.         $delimiter = '';
  850.         $home      = __('Home', 'flotheme'); // text for the 'Home' link
  851.  
  852.         $start_container = '<ul>';
  853.         $end_container   = '</ul>';
  854.         $before          = '<li>'; // tag before the current crumb
  855.         $after           = '</li>'; // tag after the current crumb
  856.  
  857.         if (!is_front_page() || is_paged()) {
  858.  
  859.             /*echo '<div id="crumbs">';*/
  860.  
  861.             global $post;
  862.             $homeLink = home_url();
  863.             echo $start_container;
  864.             echo '<li><a href="' . $homeLink . '">' . $home . '</a> </li>' . $delimiter . ' ';
  865.  
  866.             if (is_category()) {
  867.                 global $wp_query;
  868.                 $cat_obj   = $wp_query->get_queried_object();
  869.                 $thisCat   = $cat_obj->term_id;
  870.                 $thisCat   = get_category($thisCat);
  871.                 $parentCat = get_category($thisCat->parent);
  872.                 if ($thisCat->parent != 0)
  873.                     echo($before . get_category_parents($parentCat, true, ' ' . '</li><li>' . ' ') . $after);
  874.                 echo $before . __('Archive by category', 'flotheme') . ' "' . single_cat_title('', false) . '"' . $after;
  875.  
  876.             } elseif (is_day()) {
  877.                 echo $before . '<a href="' . get_year_link(get_the_time('Y')) . '">' . get_the_time('Y') . '</a> ' . $after . $delimiter . ' ';
  878.                 echo $before . '<a href="' . get_month_link(get_the_time('Y'), get_the_time('m')) . '">' . get_the_time('F') . '</a> ' . $after . $delimiter . ' ';
  879.                 echo $before . get_the_time('d') . $after;
  880.  
  881.             } elseif (is_month()) {
  882.                 echo $before . '<a href="' . get_year_link(get_the_time('Y')) . '">' . get_the_time('Y') . '</a> ' . $after . $delimiter . ' ';
  883.                 echo $before . get_the_time('F') . $after;
  884.  
  885.             } elseif (is_year()) {
  886.                 echo $before . get_the_time('Y') . $after;
  887.  
  888.             } elseif (is_single() && !is_attachment()) {
  889.                 if (get_post_type() != 'post') {
  890.  
  891.                     $post_type = get_post_type_object(get_post_type());
  892.                     $slug      = $post_type->rewrite;
  893.                     echo $before . '<a href="' . $homeLink . '/' . $slug['slug'] . '/">' . $post_type->labels->singular_name . '</a> ' . $after . $delimiter . ' ';
  894.                     echo $before . get_the_title() . $after;
  895.                 } else {
  896.                     $cat = get_the_category();
  897.                     $cat = $cat[0];
  898.                     //echo $before . get_category_parents($cat, TRUE, ' ' . '</li><li>' . ' ') . $after;
  899.                     echo $before . get_category_parents($cat, true, ' ') . $after;
  900.                     echo $before . get_the_title() . $after;
  901.                 }
  902.  
  903.             } elseif (!is_single() && !is_page() && get_post_type() != 'post' && !is_404()) {
  904.                 $post_type = get_post_type_object(get_post_type());
  905.                 if ($post_type) {
  906.                     echo $before . $post_type->labels->singular_name . $after;
  907.                 }
  908.  
  909.             } elseif (is_attachment()) {
  910.                 $parent = get_post($post->post_parent);
  911.                 /*$cat = get_the_category($parent->ID); $cat = $cat[0];*/
  912.                 /*echo $before . get_category_parents($cat, TRUE, ' ' . $delimiter . ' ') . $after;*/
  913.                 echo $before . '<a href="' . get_permalink($parent) . '">' . $parent->post_title . '</a> ' . $after . $delimiter . ' ';
  914.                 echo $before . get_the_title() . $after;
  915.  
  916.             } elseif (is_page() && !$post->post_parent) {
  917.                 echo $before . get_the_title() . $after;
  918.  
  919.             } elseif (is_page() && $post->post_parent) {
  920.                 $parent_id   = $post->post_parent;
  921.                 $breadcrumbs = array();
  922.                 while ($parent_id) {
  923.                     $page          = get_page($parent_id);
  924.                     $breadcrumbs[] = $before . '<a href="' . get_permalink($page->ID) . '">' . get_the_title($page->ID) . '</a>' . $after;
  925.                     $parent_id     = $page->post_parent;
  926.                 }
  927.                 $breadcrumbs = array_reverse($breadcrumbs);
  928.                 foreach ($breadcrumbs as $crumb)
  929.                     echo $crumb . ' ' . $delimiter . ' ';
  930.                 echo $before . get_the_title() . $after;
  931.  
  932.             } elseif (is_search()) {
  933.                 echo $before . __('Search results for', 'flotheme') . ' "' . get_search_query() . '"' . $after;
  934.  
  935.             } elseif (is_tag()) {
  936.                 echo $before . __('Posts tagged', 'flotheme') . ' "' . single_tag_title('', false) . '"' . $after;
  937.  
  938.             } elseif (is_author()) {
  939.                 global $author;
  940.                 $userdata = get_userdata($author);
  941.                 echo $before . __('Articles posted by ', 'flotheme') . $userdata->display_name . $after;
  942.  
  943.             } elseif (is_404()) {
  944.                 echo $before . __('Error 404', 'flotheme') . $after;
  945.             }
  946.  
  947.             if (get_query_var('paged')) {
  948.                 if (is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author())
  949.                     echo ' (';
  950.                 echo __('Page', 'flotheme') . ' ' . get_query_var('paged');
  951.                 if (is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author())
  952.                     echo ')';
  953.             }
  954.  
  955.             if (is_home()) {
  956.                 echo $before . __('Blog', 'flotheme') . $after;
  957.             }
  958.             echo $end_container;
  959.             /*echo '</div>';*/
  960.  
  961.         }
  962.     } /* end cosmo_breadcrumbs()*/
  963. }
  964.  
  965.  
  966. if (!function_exists('cosmo_get_custom_css')) {
  967.     function cosmo_get_custom_css()
  968.     {
  969.  
  970.         if (strlen(options::get_value('colors', 'thumb_bg_opacity'))) {
  971.             $thumb_bg_opacity = options::get_value('colors', 'thumb_bg_opacity');
  972.         } else {
  973.             $thumb_bg_opacity = '';
  974.         }
  975.  
  976.         $logo_position = options::get_value('header_settings', 'logo_position');
  977.  
  978.  
  979.         $post_images_distance = options::get_value('blog_post', 'images_distance'); // The horizontal distance between images inserted in hte post content
  980.  
  981.         $single_layout_padding_top = options::get_value('blog_post', 'single_title_padding_top');
  982.         $single_layout_padding_bottom = options::get_value('blog_post', 'single_title_padding_bottom');
  983.  
  984.  
  985.         $background_img             = '';
  986.         $header_background_img      = '';
  987.         $background_color           = '';
  988.         $position                   = '';
  989.         $repeat                     = '';
  990.         $bgatt                      = '';
  991.         $thumb_hover_background_img = '';
  992.  
  993.  
  994.         //      $slide_img_width = options::get_value('imagesizes', 'list_view_width') . 'px';
  995.  
  996.         $home_grid_horizontal_height = options::get_value('imagesizes', 'height_horizontal_home') . 'px';
  997.         $home_grid_vertical_height   = options::get_value('imagesizes', 'height_vertical_home') . 'px';
  998.  
  999.         /* header 1 submenu font size */
  1000.         $navigation_font_size  = options::get_value('typography', 'navigation_font_font_size');
  1001.         $submenu_nav_font_size = $navigation_font_size - 2;
  1002.         $header_uppercase_menu  = options::get_value('header_settings', 'header_uppercase_menu');
  1003.  
  1004.         ?>
  1005.  
  1006.         <!--Custom CSS-->
  1007.         <?php if (strlen(options::get_value('custom_css', 'css')) > 0) { ?>
  1008.         <style type="text/css">
  1009.             <?php echo options::get_value( 'custom_css' , 'css' ); ?>
  1010.         </style>
  1011.  
  1012.     <?php } ?>
  1013.         <style type="text/css">
  1014.  
  1015.             <?php
  1016.             $grid_hover_color = options::get_value( 'content_settings' , 'grid_hover_color' );
  1017.  
  1018.             if(isset($grid_hover_color) && $grid_hover_color != ''){?>
  1019.                 @media only screen and (min-width: 64.063em){
  1020.                     .title-over .post-preview-hidden {
  1021.                         background-color: <?php echo $grid_hover_color;?>;
  1022.                     }
  1023.                 }
  1024.             <?php }?>
  1025.             <?php
  1026.             $grid_padding = options::get_value( 'content_settings' , 'grid_padding' );
  1027.  
  1028.             if(isset($grid_hover_color) && $grid_hover_color != ''){?>
  1029.                 @media only screen and (min-width: 64.063em){
  1030.                     .title-over .post-preview-hidden {
  1031.                         left: <?php echo $grid_padding;?>px!important;
  1032.                         right: <?php echo $grid_padding;?>px!important;
  1033.                         top: <?php echo $grid_padding;?>px!important;
  1034.                         bottom: <?php echo $grid_padding;?>px!important;
  1035.                     }
  1036.                 }
  1037.             <?php }?>
  1038.  
  1039.  
  1040.             <?php if(isset($header_uppercase_menu) && $header_uppercase_menu == 'yes'){;?>
  1041.                 .nav-menu li a{
  1042.                     text-transform: uppercase;
  1043.                 }
  1044.             <?php } ?>
  1045.             <?php if(is_numeric($single_layout_padding_top)){?>
  1046.                 .single-layout-width .post-article-title-left, .single-layout-width{
  1047.                     padding-top: <?php echo $single_layout_padding_top;?>px;
  1048.                 }
  1049.         <?php }
  1050.             if(is_numeric($single_layout_padding_bottom)){?>
  1051.                 .single-layout-width .post-header{
  1052.                     margin-bottom: <?php echo $single_layout_padding_bottom;?>px;
  1053.                 }
  1054.             <?php
  1055.             }
  1056.                
  1057.                 $gallery_height = options::get_value('imagesizes','single_gallery_desktop_height');
  1058.                 if($gallery_height){?>
  1059.                     #gallery-slider .royalSlider, #full-width-slider .bx-wrapper{
  1060.                         max-height: <?php echo $gallery_height?>px;
  1061.                     }
  1062.  
  1063.                     .gallery-slider .flo-slick-slider{
  1064.                         height: <?php echo $gallery_height; ?>px;
  1065.                     }
  1066.  
  1067.             <?php } ?>
  1068.  
  1069.            
  1070.             <?php
  1071.                 $slick_sl_images_gutter = options::get_value( 'sliders' , 'gallery_visible_nearby_gutter' );
  1072.                 if(is_numeric($slick_sl_images_gutter)){
  1073.                     ?>
  1074.                     .flo-slick-slider .slick-slide{
  1075.                         padding: 0px <?php echo $slick_sl_images_gutter; ?>px;
  1076.                     }
  1077.                     <?php
  1078.                 }
  1079.  
  1080.                 $slick_main_slideshow_images_gutter = options::get_value( 'sliders' , 'visible_nearby_gutter' );
  1081.                 if(is_numeric($slick_sl_images_gutter)){
  1082.                     ?>
  1083.                     .main-slideshow .flo-slick-slider .slick-slide{
  1084.                         padding: 0px <?php echo $slick_main_slideshow_images_gutter/2; ?>px;
  1085.                     }
  1086.                     <?php
  1087.                 }
  1088.  
  1089.              
  1090.                 $gallery_mobile_height = options::get_value('imagesizes','single_gallery_mobile_height');
  1091.  
  1092.                 if( is_numeric($gallery_mobile_height) ){ ?>       
  1093.                     @media only screen and (max-width: 640px) {
  1094.                      
  1095.  
  1096.                         #gallery-slider .royalSlider, #full-width-slider .bx-wrapper {
  1097.                             max-height: <?php echo $gallery_mobile_height ?>px;
  1098.                         }
  1099.  
  1100.                         .full-width-slider .bx-viewport {
  1101.                             height: <?php echo $gallery_mobile_height?>px !important;
  1102.                         }
  1103.  
  1104.                         .gallery-slider .flo-slick-slider {
  1105.                             height: <?php echo $gallery_mobile_height; ?>px;
  1106.                         }
  1107.  
  1108.                     }
  1109.            
  1110.                 <?php }
  1111.             //typography styles
  1112.             /*the array keys are the same as the typography options name, and the value are elemets to which the fonts must be applied  */
  1113.             $typography_settings = array(
  1114.                     'menu_links' => '.primary-navigation .nav-menu a, .menu-one-column.logo-left .primary-navigation li a, .menu-one-column.logo-right .primary-navigation li a',
  1115.                     'menu_description' => '.nav-menu li a > .menu-description',
  1116.                     'header_mobile_label' => '.menu-toggle i:before, .menu-toggle span',
  1117.                     'slideshow_title' => '.slide-content .post-title .slide-title',
  1118.                     'slideshow_description' => '.slide-content .post-title .post-title-after',
  1119.                     'logo_font' => '.site-logo div.site-title a, .site-title, .nav-menu .site-title',
  1120.                     'h1_font' => 'h1, h1.post-title, .single-gallery .post-title',
  1121.                     'h2_font' => 'h2' ,
  1122.                     'h3_font' => 'h3, .grid-view h3',
  1123.                     'h4_font' => 'h4',
  1124.                     'h5_font' => 'h5',
  1125.                     'h6_font' => 'h6',
  1126.                     'content_text' => 'body, p, span, #content-sidebar ul li a, ul',
  1127.                     'pretitle_font' => '.post-title-before',
  1128.                     'subtitle_font' => '.post-title .post-title-after, .page-template-template-contact-form .contact-form p, .ninja-forms-all-fields-wrap .text-wrap label, .ninja-forms-all-fields-wrap .textarea-wrap label, .ninja-forms-form-wrap label',
  1129.                    
  1130.                     'share_font' => '.post-note, .post-comment, .post-tag-entry, .post-tag span, .post-tag a, .share-link, .comment-item, .social-text',
  1131.                     'meta_font' => '.post-date a .post-date, .post-category a, .post-date time, .post-category .category-item',
  1132.                     'pagination_font' => '.pagination span, .pagination a',
  1133.                     'inputs' => 'input[type="text"], input[type="password"], input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="month"],input[type="week"], input[type="email"], input[type="number"], input[type="search"], input[type="tel"], input[type="time"], input[type="url"], input[type="button"],input[type="submit"], textarea',
  1134.                     'footer_title' => '.widget-title',
  1135.                     'footer_description' => '.button-title-link, .button-title-link span',
  1136.                     'footer_bottom_text' => '.footer-bottom, .footer-bottom a, .footer-bottom span, .footer-bottom p, .footer-bottom div, .footer-bottom span',
  1137.                     'mosaic_content_font' => '.mosaic-description',
  1138.                     'mosaic_title_font' => '.mosaic-title',
  1139.  
  1140.             );
  1141.  
  1142.             // use  'flo_custom_typography_settings' filter to overwrite the default typography settings elements
  1143.             // it can be used to add more elemnts to be affected by a gived option
  1144.             $typography_settings = apply_filters('flo_custom_typography_settings', $typography_settings);
  1145.  
  1146.             echo flo_set_typography( $typography_settings );
  1147.             ?>
  1148.             <?php
  1149.  
  1150.                 $full_sidebar_below_header_margin_top =   (int)options::get_value( 'blog_post' , 'full_sidebar_below_header_margin_top' );
  1151.                 $full_sidebar_below_header_margin_bottom =   (int)options::get_value( 'blog_post' , 'full_sidebar_below_header_margin_bottom' );
  1152.                 if(is_numeric($full_sidebar_below_header_margin_top)){
  1153.                     ?>.below-header-full-width{ margin-top: <?php echo $full_sidebar_below_header_margin_top; ?>px; }<?php     
  1154.                 }
  1155.  
  1156.                 if(is_numeric($full_sidebar_below_header_margin_bottom)){
  1157.                     ?>.below-header-full-width{ margin-bottom: <?php echo $full_sidebar_below_header_margin_bottom; ?>px; }<?php       
  1158.                 }
  1159.  
  1160.  
  1161.                 $max_desktop_logo_width = options::get_value( 'styling' , 'max_logo_width_desktop' );
  1162.                 $max_desktop_logo_width_slideshow_page = options::get_value( 'styling' , 'max_logo_width_desktop_slideshow_page' );
  1163.                 $max_mobile_logo_width = options::get_value( 'styling' , 'max_logo_width_mobile' );
  1164.  
  1165.                 $site_width = options::get_value( 'layout' , 'site_width' );
  1166.  
  1167.                 if(!is_numeric($site_width)){
  1168.                     $site_width = 1130;
  1169.                 }
  1170.             ?>
  1171.  
  1172.             .row{ max-width: <?php echo $site_width; ?>px; }    /*max site content width*/
  1173.  
  1174.             <?php
  1175.                 if(is_numeric($max_desktop_logo_width)){
  1176.             ?>
  1177.             .site-logo .logo img
  1178.             {
  1179.                 max-width: <?php echo $max_desktop_logo_width ?>px;
  1180.             }
  1181.  
  1182.             <?php
  1183.                 }
  1184.  
  1185.                 if(is_numeric($max_desktop_logo_width_slideshow_page)){
  1186.             ?>
  1187.             .crowd-site-identity .site-logo .logo img
  1188.             {
  1189.                 max-width: <?php echo $max_desktop_logo_width_slideshow_page ?>px;
  1190.             }
  1191.  
  1192.             <?php
  1193.             }
  1194.  
  1195.  
  1196.                 if(is_numeric($max_mobile_logo_width)){
  1197.             ?>
  1198.             @media only screen and (max-width: 600px)
  1199.             {
  1200.                 .site-logo .logo img, .crowd-layout .site-header .logo img
  1201.                 {
  1202.                     width: <?php echo $max_mobile_logo_width ?>px;
  1203.                 }
  1204.             }
  1205.  
  1206.             <?php
  1207.                 }
  1208.             ?>
  1209.  
  1210.             <?php
  1211.                 if(is_numeric($post_images_distance)){
  1212.             ?>
  1213.             .single div.post-content a img, .single div.post-content img, body img.alignleft, body img.alignright, body img.aligncenter, body img.alignnone,
  1214.             .gallery-shortcode.flo-1-columns
  1215.             {
  1216.                 margin-bottom: <?php echo $post_images_distance; ?>px;
  1217.             }
  1218.  
  1219.             <?php
  1220.                 }
  1221.  
  1222.                 $site_width = options::get_value( 'layout' , 'site_width' );
  1223.                 if(!is_numeric($site_width)){
  1224.                     $site_width = 1130;
  1225.                 }
  1226.  
  1227.  
  1228.                 // set the distance between Header 1 menu items such that the menu
  1229.                 // will use the whole content width
  1230.                 $header_1_menu_spacing = get_option('header_1_menu_spacing', '0px');
  1231.  
  1232.                 if('0px' != $header_1_menu_spacing  && $header_1_menu_spacing > 0){
  1233.  
  1234.             ?>
  1235.                     @media only screen and (min-width: <?php echo $site_width+100; ?>px){
  1236.                         body:not(.crowd-layout).header_style1 .nav-menu>li:not(:last-child){
  1237.                             margin-right: <?php echo $header_1_menu_spacing; ?>
  1238.                         }
  1239.  
  1240.                         body.crowd-layout.crowd-simple-menu .site-header:not(.left-logo) .nav-menu>li:not(:last-child),
  1241.                         body.crowd-layout.crowd-simple-menu .site-header:not(.right-logo) .nav-menu>li:not(:last-child),
  1242.                         body.crowd-layout.crowd-simple-menu .site-header:not(.logo-inside-menu) .nav-menu>li:not(:last-child)
  1243.                         {
  1244.                             margin-right: <?php echo $header_1_menu_spacing; ?>
  1245.                         }
  1246.  
  1247.                         body.crowd-layout.crowd-simple-menu .site-header.logo-inside-menu .nav-menu>li:last-child,
  1248.                         body.crowd-layout.crowd-simple-menu .site-header.logo-inside-menu .nav-menu>li.right-logo-menu,
  1249.                         body.crowd-layout.crowd-simple-menu .site-header.logo-inside-menu .nav-menu>li.site-logo,
  1250.                         body.crowd-layout.crowd-simple-menu .site-header .nav-menu>li:last-child{
  1251.                             margin-right: 0px !important;
  1252.                         }
  1253.                         /*body.crowd-layout.crowd-simple-menu .site-header.logo-inside-menu .nav-menu>li:not(:right-logo-menu)*/
  1254.                     }
  1255.             <?php
  1256.                 }
  1257.  
  1258.             ?>
  1259.  
  1260.                 @media only screen and (min-width: 641px) and (max-width: <?php echo $site_width+99; ?>px){
  1261.                     .header_style4 .site-navigation .nav-menu>li{
  1262.                         margin-right: 20px !important;
  1263.                         margin-left: 0px !important;
  1264.                     }
  1265.                 }
  1266.  
  1267.                 /* fix for the menu items distance if the screen width is smaller that the site content width */
  1268.                 @media only screen and (min-width: 641px) and (max-width: <?php echo $site_width+100; ?>px){
  1269.                     .header_style1 .nav-menu>li:not(:last-child){
  1270.                         margin-right: 15px !important;
  1271.                     }
  1272.                 }
  1273.             <?php
  1274.  
  1275.                 // set the distance between Header 4 menu items such that the menu
  1276.                 // will use the whole content width
  1277.                 $header_4_menu_left_spacing = get_option('header_4_menu_left_spacing', '0px');
  1278.                 $header_4_menu_right_spacing = get_option('header_4_menu_right_spacing', '0px');
  1279.  
  1280.  
  1281.             ?>
  1282.  
  1283.             @media only screen and (min-width: <?php echo $site_width+100; ?>px){
  1284.                 .primary-navigation > ul > li.site-logo, .primary-navigation > ul > li.right-logo-menu{
  1285.                    margin-right: 0px;
  1286.                 }
  1287.  
  1288.                 .header_style4 .site-navigation .nav-menu>li.right-logo-menu{
  1289.                     margin-right: 0px;
  1290.                 }
  1291.                 .header_style4 li.site-logo{ margin-right: 0px; }
  1292.  
  1293.  
  1294.  
  1295.                 /*fixing the menu allignement styles*/
  1296.                 <?php if( is_numeric(options::get_value('header_settings', 'menu1_spacing'))):?>
  1297.                     .header_style1:not(.crowd-layout) .primary-navigation > ul > li,
  1298.                     .header_style5:not(.crowd-layout) .primary-navigation > ul > li,
  1299.                     .crowd-simple-menu .primary-navigation > ul > li{
  1300.                         margin-right: <?php echo options::get_value('header_settings', 'menu1_spacing'); ?>px!important;
  1301.                     }
  1302.                     .header_style1:not(.crowd-layout) .primary-navigation > ul > li:last-child,
  1303.                     .header_style5:not(.crowd-layout) .primary-navigation > ul > li:last-child,
  1304.                     .crowd-simple-menu  .primary-navigation > ul > li:last-child{
  1305.                         margin-right: 15px !important;
  1306.                     }
  1307.                 <?php endif;?>
  1308.  
  1309.                 <?php if(is_numeric(options::get_value('header_settings', 'menu2_spacing_left')) ):?>
  1310.                     .header_style4 .primary-navigation > ul > li.left-logo-menu,
  1311.                     .crowd-double-menu .primary-navigation > ul > li.left-logo-menu{
  1312.                         margin-right: <?php echo options::get_value('header_settings', 'menu2_spacing_left'); ?>px !important;
  1313.                     }
  1314.                 <?php endif;?>
  1315.                 <?php if(is_numeric(options::get_value('header_settings', 'menu2_spacing_right')) ):?>
  1316.                     .header_style4 .primary-navigation > ul > li.right-logo-menu,
  1317.                     .crowd-double-menu .primary-navigation > ul > li.right-logo-menu{
  1318.                         margin-left: <?php echo options::get_value('header_settings', 'menu2_spacing_right'); ?>px !important;
  1319.                     }
  1320.                 <?php endif;?>
  1321.             }
  1322.  
  1323.             <?php
  1324.                
  1325.                 $header_padding_top = options::get_value( 'header_settings' , 'header_padding_top' );
  1326.                 $header_padding_bottom = options::get_value( 'header_settings' , 'header_padding_bottom' );
  1327.  
  1328.                 $header_padding_top_mobile = options::get_value( 'header_settings' , 'header_padding_top_mobile' );
  1329.                 $header_padding_bottom_mobile = options::get_value( 'header_settings' , 'header_padding_bottom_mobile' );
  1330.  
  1331.                 $distance_before_footer_widgets = options::get_value( 'footer_settings' , 'distance_before_footer_widgets' );
  1332.                 $footer_bottom_distance = options::get_value( 'footer_settings' , 'footer_bottom_distance' );
  1333.                 $text_logo_padding = options::get_value( 'styling' , 'distance' );
  1334.                
  1335.                
  1336.                 $content_padding = options::get_value( 'content_settings' , 'content_padding' );
  1337.  
  1338.                 $distance_before_slideshow = options::get_value( 'sliders' , 'distance_before_slideshow' );
  1339.                 $distance_after_slideshow = options::get_value( 'sliders' , 'distance_after_slideshow' );
  1340.             ?>
  1341.             @media only screen and (max-width: 640px)
  1342.             {
  1343.                 /*header padding for mobiles*/
  1344.             <?php
  1345.                 if(is_numeric($header_padding_top_mobile)){
  1346.                     ?> header.site-header
  1347.             {
  1348.                 padding-top: <?php echo $header_padding_top_mobile; ?>px;
  1349.             }
  1350.  
  1351.             <?php
  1352.                                 }
  1353.                             ?>
  1354.             <?php
  1355.                 if(is_numeric($header_padding_bottom_mobile)){
  1356.                     ?> header.site-header
  1357.                                        {
  1358.                                            padding-bottom: <?php echo $header_padding_bottom_mobile; ?>px;
  1359.                                        }
  1360.  
  1361.             <?php
  1362.                                 }
  1363.                             ?>
  1364.             }
  1365.             <?php
  1366.                 if(is_numeric($distance_after_slideshow)){?>
  1367.                     .main-slideshow{
  1368.                         margin-bottom: <?php echo $distance_after_slideshow;?>px;
  1369.                     }
  1370.             <?php }?>
  1371.  
  1372.             @media only screen and (min-width: 641px)
  1373.             {
  1374.                 /*header padding for mobiles*/
  1375.             <?php
  1376.  
  1377.                 if(is_numeric($header_padding_top)){ ?>
  1378.                     header.site-header, .crowd-layout .site-header
  1379.                         {
  1380.                             padding-top: <?php echo $header_padding_top; ?>px;
  1381.                         }
  1382.                 <?php }?>
  1383.             <?php
  1384.                 if(is_numeric($distance_before_footer_widgets)){?>
  1385.                     .footer-top-inner{
  1386.                         padding-top: <?php echo $distance_before_footer_widgets;?>px;
  1387.                     }
  1388.             <?php }?>
  1389.             <?php
  1390.                 if(is_numeric($footer_bottom_distance)){?>
  1391.                     .footer-bottom{
  1392.                         padding-top: <?php echo $footer_bottom_distance;?>px;
  1393.                         padding-bottom: <?php echo $footer_bottom_distance;?>px;
  1394.                     }
  1395.             <?php }?>
  1396.         <?php
  1397.             if(is_numeric($distance_before_slideshow)){?>
  1398.                 .main-slideshow{
  1399.                     padding-top: <?php echo $distance_before_slideshow;?>px;
  1400.                 }
  1401.             <?php }?>
  1402.  
  1403.         <?php
  1404.             if(is_numeric($content_padding)){?>
  1405.                 .layout-width, .single-layout-width{
  1406.                     padding-top: <?php echo $content_padding;?>px!important;
  1407.                 }
  1408.             <?php }?>
  1409.         <?php
  1410.             if(is_numeric($text_logo_padding)){?>
  1411.                 header .site-identity.site-logo
  1412.                 {
  1413.                     padding-top: <?php echo $text_logo_padding; ?>px;
  1414.                     padding-bottom: <?php echo $text_logo_padding; ?>px;
  1415.                 }
  1416.         <?php }?>
  1417.         <?php
  1418.             if(is_numeric($header_padding_bottom)){ ?>
  1419.                 header.site-header, .crowd-layout .site-header
  1420.                     {
  1421.                         padding-bottom: <?php echo $header_padding_bottom; ?>px;
  1422.                     }
  1423.         <?php }?>
  1424.         }
  1425.         </style>
  1426.         <?php
  1427.         flo_get_custom_colors();
  1428.     }
  1429. }
  1430. /**
  1431.  * render custom color styles
  1432.  */
  1433. if (!function_exists('flo_get_custom_colors')) {
  1434.     function flo_get_custom_colors()
  1435.     {
  1436.         if (strlen(options::get_value('colors', 'menu_links_color'))) {
  1437.             $menu_links_color = options::get_value('colors', 'menu_links_color');
  1438.         } else {
  1439.             $menu_links_color = '';
  1440.         }
  1441.         if (strlen(options::get_value('colors', 'submenu_background'))) {
  1442.             $submenu_background = options::get_value('colors', 'submenu_background');
  1443.         } else {
  1444.             $submenu_background = '';
  1445.         }
  1446.         if (strlen(options::get_value('colors', 'background_color'))) {
  1447.             $background_color = options::get_value('colors', 'background_color');
  1448.         } else {
  1449.             $background_color = '';
  1450.         }
  1451.         if (strlen(options::get_value('colors', 'content_text_color'))) {
  1452.             $content_text_color = options::get_value('colors', 'content_text_color');
  1453.         } else {
  1454.             $content_text_color = '';
  1455.         }
  1456.         if (strlen(options::get_value('sliders', 'margin_below_sliders'))) {
  1457.             $margin_below_sliders = options::get_value('sliders', 'margin_below_sliders');
  1458.         } else {
  1459.             $margin_below_sliders = '';
  1460.         }
  1461.  
  1462.         if (strlen(options::get_value('colors', 'pretitle_color'))) {
  1463.             $pretitle_color = options::get_value('colors', 'pretitle_color');
  1464.         } else {
  1465.             $pretitle_color = '';
  1466.         }
  1467.         if (strlen(options::get_value('colors', 'subtitle_color'))) {
  1468.             $subtitle_color = options::get_value('colors', 'subtitle_color');
  1469.         } else {
  1470.             $subtitle_color = '';
  1471.         }
  1472.         if (strlen(options::get_value('colors', 'meta_share_pagination'))) {
  1473.             $meta_share_pagination = options::get_value('colors', 'meta_share_pagination');
  1474.         } else {
  1475.             $meta_share_pagination = '';
  1476.         }
  1477.         if (strlen(options::get_value('colors', 'bottom_widget_background'))) {
  1478.             $bottom_widget_background = options::get_value('colors', 'bottom_widget_background');
  1479.         } else {
  1480.             $bottom_widget_background = '';
  1481.         }
  1482.         if (strlen(options::get_value('colors', 'footer_bottom_widget_text'))) {
  1483.             $footer_bottom_widget_text = options::get_value('colors', 'footer_bottom_widget_text');
  1484.         } else {
  1485.             $footer_bottom_widget_text = '';
  1486.         }
  1487.         if (strlen(options::get_value('colors', 'links_color'))) {
  1488.             $links_color = options::get_value('colors', 'links_color');
  1489.         } else {
  1490.             $links_color = '';
  1491.         }
  1492.         if (strlen(options::get_value('colors', 'borders_color'))) {
  1493.             $borders_color = options::get_value('colors', 'borders_color');
  1494.         } else {
  1495.             $borders_color = '';
  1496.         }
  1497.  
  1498.         if (strlen(options::get_value('colors', 'borders_color'))) {
  1499.             $menu_links_hover_color = options::get_value('colors', 'menu_links_hover_color');
  1500.         } else {
  1501.             $menu_links_hover_color = '';
  1502.         }
  1503.  
  1504.         if (strlen(options::get_value('colors', 'submenu_hover'))) {
  1505.             $submenu_hover = options::get_value('colors', 'submenu_hover');
  1506.         } else {
  1507.             $submenu_hover = '';
  1508.         }
  1509.         ?>
  1510.         <style type="text/css">
  1511.  
  1512.  
  1513.  
  1514.             .crowd-header-over .sticky-holder:not(.fixed) .primary-navigation .nav-menu>li>a{
  1515.                 color:<?php echo options::get_value('colors', 'slideshow_menu_links_color');?>
  1516.             }
  1517.             .crowd-layout .sticky-holder:not(.fixed) .primary-navigation > ul > li > a:hover{
  1518.                 color:<?php echo options::get_value('colors', 'slideshow_menu_links_hover_color'); ?>
  1519.             }
  1520.  
  1521.             .primary-navigation ul li a:hover, .mobile-menu-inner ul li a:hover{
  1522.                 color:<?php echo $submenu_hover;?>
  1523.             }
  1524.             .primary-navigation > ul > li > a:hover, .mobile-menu-inner > ul > li > a:hover{
  1525.                 color:<?php echo $menu_links_hover_color;?>
  1526.             }
  1527.             .primary-navigation ul li a, .mobile-menu-inner li a, .menu-toggle i:before, .menu-toggle span{
  1528.                 color:<?php echo $menu_links_color;?>
  1529.             }
  1530.             .primary-navigation ul li ul, .crowd-full-screen .children{
  1531.                 background: <?php echo $submenu_background;?>
  1532.             }
  1533.            
  1534.            
  1535.  
  1536.             .site-header, body, .primary-navigation ul, .post-pagination .next-post .inner, .post-pagination .prev-post .inner,
  1537.             .crowd-layout .site-main,.crowd-layout .site-footer{
  1538.                 background: <?php echo $background_color?>;
  1539.             }
  1540.             body, .post-title, .widget-title{
  1541.                 color: <?php echo $content_text_color;?>;
  1542.             }
  1543.             .post-title .post-title-before{
  1544.                 color: <?php echo $pretitle_color;?>
  1545.             }
  1546.             .post-title .post-title-after{
  1547.                 color: <?php echo $subtitle_color;?>
  1548.             }
  1549.             .post-meta span a, .meta-wrap a, .meta-wrap:before, .pagination-wrapper .page-item, .pagination-wrapper .prev, .pagination-wrapper .next {
  1550.                 color: <?php echo $meta_share_pagination;?>
  1551.             }
  1552.             .widget_socialicons .social a,.content .social a{
  1553.                 color: <?php echo options::get_value('colors', 'social_icons_widget_color'); ?>;
  1554.             }
  1555.             .widget-title{
  1556.                 color: <?php echo options::get_value('colors', 'widgets_title_color'); ?>; 
  1557.             }
  1558.             .widget, .widget a{
  1559.                 color: <?php echo options::get_value('colors', 'widgets_content_color'); ?>;       
  1560.             }
  1561.            
  1562.             .footer-bottom{
  1563.                 background: <?php echo $bottom_widget_background;?>
  1564.             }
  1565.             .footer-bottom, .footer-bottom a{
  1566.                 color: <?php echo $footer_bottom_widget_text;?>
  1567.             }
  1568.             a{
  1569.                 color: <?php echo $links_color;?>
  1570.             }
  1571.             .layout-width:before, .single-layout-width:before{
  1572.                 border-top: 1px solid <?php echo $borders_color;?>;
  1573.             }
  1574.             .footer-top-inner{
  1575.                 border-top: 1px solid <?php echo $borders_color;?>;
  1576.                 border-bottom: 1px solid <?php echo $borders_color;?>;
  1577.             }
  1578.             <?php if(isset($margin_below_sliders) && $margin_below_sliders != ''):?>
  1579.                 @media only screen and (min-width: 48.063em) {
  1580.                     .full-width-slider .flo-slick-slider{
  1581.                         margin-bottom: <?php echo $margin_below_sliders;?>px;
  1582.                     }
  1583.                 }
  1584.             <?php endif;?>
  1585.         </style>
  1586.     <?php
  1587.     }
  1588.  
  1589. }
  1590.  
  1591.  
  1592. /**
  1593.  * @return array - registered social profiles
  1594.  */
  1595.  
  1596. function flo_get_available_social_services()
  1597. {
  1598.  
  1599.     $available_social_services = array();
  1600.     $social_profiles           = get_option('_social');
  1601.  
  1602.     if (sizeof($social_profiles) && is_array($social_profiles)) {
  1603.         foreach ($social_profiles as $key => $s_profile) {
  1604.             if (strlen($s_profile['title'])) {
  1605.                 $available_social_services[$s_profile['title']] = $s_profile['title'];
  1606.             }
  1607.         }
  1608.     }
  1609.  
  1610.  
  1611.     return $available_social_services;
  1612. }
  1613. function addhttp($url) {
  1614.     if (!preg_match("~^(?:f|ht)tps?://~i", $url) && (strtolower(substr($url, 0, 7)) != 'mailto:')) {
  1615.         $url = "http://" . $url;
  1616.     }
  1617.     return $url;
  1618. }
  1619.  
  1620. if (!function_exists('flo_set_typography')) {
  1621.     /**
  1622.      * returns the typography styles based on passed settings
  1623.      *
  1624.      * @param array $typography_settings -  the array of settings. The keys are the same as the typography options name, and the value are elemets to which the fonts must be applied
  1625.      * @return string
  1626.      */
  1627.         function flo_set_typography($typography_settings = array())
  1628.     {
  1629.  
  1630.         $typography_styles = '';
  1631.  
  1632.         if (is_array($typography_settings) && sizeof($typography_settings)) {
  1633.  
  1634.             $default_system_fonts = array(
  1635.                     "Cantarell, Tahoma, Verdana, Helvetica, sans-serif",
  1636.                     "'Unica One', Arial, Helvetica, sans-serif",
  1637.                     //"'Montserrat Subrayada', Arial, Helvetica, sans-serif",
  1638.                     'Arial, Helvetica, sans-serif',
  1639.                     'Times, Georgia, serif',
  1640.                     'Verdana, Tahoma, sans-serif',
  1641.                     "'Century Gothic', Helvetica, Arial, sans-serif",
  1642.                     'Helvetica, Arial, sans-serif',
  1643.                     'Georgia, Times, serif',
  1644.                     "'Lucida Grande', 'Lucida Sans Unicode', Tahoma, Verdana, sans-serif",
  1645.                     'Palatino, Georgia, serif',
  1646.                     'Tahoma, Verdana, Helvetica, sans-serif',
  1647.                     'Garamond, Palatino, Georgia, serif',
  1648.                     'Courier, monospace',
  1649.                     "'Trebuchet MS', Tahoma, Helvetica, sans-serif",
  1650.                     "'Comic Sans MS', Arial, sans-serif",
  1651.                     'Bookman, Palatino, Georgia, serif'
  1652.             );
  1653.  
  1654.             foreach ($typography_settings as $typography_option => $markup_elements) {
  1655.  
  1656.                 if (strlen(options::get_value('typography', $typography_option . '_font_size'))) {
  1657.                         $font_size = ' font-size:' . options::get_value('typography', $typography_option . '_font_size') . 'px; ';
  1658.                 } else {
  1659.                     $font_size = '';
  1660.                 }
  1661.  
  1662.                 if (strlen(options::get_value('typography', $typography_option . '_font_letter_spacing')) && is_numeric(options::get_value('typography', $typography_option . '_font_letter_spacing'))) {
  1663.                         $letter_spacing = ' letter-spacing:' . options::get_value('typography', $typography_option . '_font_letter_spacing') . 'px; ';
  1664.                 } else {
  1665.                     $letter_spacing = '';
  1666.                 }
  1667.  
  1668.                 if (strlen( trim(options::get_value('typography', $typography_option . '_font_family')) )) {
  1669.  
  1670.                     $font_fam_option = options::get_value('typography', $typography_option . '_font_family');
  1671.  
  1672.                     // usually we have this case when the fonts are loaded usin API KEY and we have several versions of the
  1673.                     // same font and font name is devided by font style by '|' i.e  Acme | italic
  1674.                     if (strstr($font_fam_option, '|') !== false) {
  1675.                         $family_exploded = explode('|', $font_fam_option);
  1676.  
  1677.                         $font_family_value = trim($family_exploded[0]);
  1678.                         if (!in_array($font_family_value, $default_system_fonts)) {
  1679.                             // IF the current font is one of the default system fonts, then we will use them without \" (quotes)
  1680.                             $font_family_value = '"' . $font_family_value . '"';
  1681.                         }
  1682.  
  1683.                         $font_family = ' font-family: ' . $font_family_value . ' ; ';
  1684.  
  1685.  
  1686.                     } else {
  1687.  
  1688.                         $font_family_value = str_replace('+', ' ', rtrim(options::get_value('typography', $typography_option . '_font_family'), '&v1'));
  1689.  
  1690.                         if (!in_array($font_family_value, $default_system_fonts)) {
  1691.                             // IF the current font is one of the default system fonts, then we will use them without \" (quotes)
  1692.                             $font_family_value = '"' . $font_family_value . '"';
  1693.                         }
  1694.  
  1695.                         $font_family = ' font-family: ' . $font_family_value . ' ; ';
  1696.  
  1697.                     }
  1698.  
  1699.  
  1700.                 } else {
  1701.                     $font_family = '';
  1702.                 }
  1703.  
  1704.                 if (strlen(options::get_value('typography', $typography_option . '_font_weight'))) {
  1705.                     $font_weight = ' font-weight:' . options::get_value('typography', $typography_option . '_font_weight') . '; ';
  1706.                 } else {
  1707.                     $font_weight = '';
  1708.                 }
  1709.  
  1710.                 if (strlen(options::get_value('typography', $typography_option . '_font_style'))) {
  1711.                     $font_style = ' font-style:' . options::get_value('typography', $typography_option . '_font_style') . '; ';
  1712.                 } else {
  1713.                     $font_style = '';
  1714.                 }
  1715.  
  1716.                 $typography_styles .= ' ' . $markup_elements . '{ ' . $font_size . $font_family . $font_weight . $font_style . $letter_spacing . '}' . ' ';
  1717.             }
  1718.         }
  1719.         /* Start Option for mobile devices*/
  1720.         $typography_styles .= '@media only screen and (max-width: 768px) {';
  1721.         foreach ($typography_settings as $typography_option => $markup_elements) {
  1722.             if (strlen(options::get_value('typography', $typography_option . '_font_size_mobile'))) {
  1723.                 $font_size = ' font-size:' . options::get_value('typography', $typography_option . '_font_size_mobile') . 'px; ';
  1724.             } else {
  1725.                 $font_size = '';
  1726.             }
  1727.  
  1728.             if (strlen(options::get_value('typography', $typography_option . '_font_letter_spacing_mobile')) && is_numeric(options::get_value('typography', $typography_option . '_font_letter_spacing_mobile'))) {
  1729.                     $letter_spacing_mobile = ' letter-spacing:' . options::get_value('typography', $typography_option . '_font_letter_spacing_mobile') . 'px; ';
  1730.             } else {
  1731.                 $letter_spacing_mobile = '';
  1732.             }
  1733.  
  1734.             $typography_styles .= ' ' . $markup_elements . '{ ' . $font_size . $letter_spacing_mobile .'}' . ' ';
  1735.         }
  1736.         $typography_styles .= '}';
  1737.         /* End Option for mobile devices*/
  1738.  
  1739.         return $typography_styles;
  1740.     }
  1741.  
  1742. }
  1743. /**
  1744.  * render social icons
  1745.  */
  1746. if (!function_exists('flo_get_social_icons')) {
  1747.     function flo_get_social_icons($enabled_services = array('facebook', 'twitter', 'gplus', 'yahoo', 'dribbble', 'linkedin', 'vimeo', 'youtube', 'tumblr', 'delicious', 'flickr', 'instagram', 'pinterest', 'skype', 'email',
  1748.             'rss'), $no_icons = false, $add_search = false)
  1749.     {
  1750.  
  1751.         if (!(is_array($enabled_services) && sizeof($enabled_services))) {
  1752.             $enabled_services = array();
  1753.         }
  1754.  
  1755.         // the following social profiles have font icons support
  1756.         $default_supported_profiles = array('facebook', 'twitter', 'gplus', 'yahoo', 'dribbble', 'linkedin', 'vimeo', 'youtube', 'tumblr', 'delicious', 'flickr', 'instagram', 'pinterest', 'skype', 'email', 'rss');
  1757.  
  1758.         $social_profiles = get_option('_social');
  1759.  
  1760.         ob_start();
  1761.         ob_clean();
  1762.  
  1763.         $social_icons_content = '';
  1764.  
  1765.         if (!$no_icons && sizeof($social_profiles) && is_array($social_profiles)) {
  1766.  
  1767.             //deb::e($social_profiles);
  1768.  
  1769.             foreach ($social_profiles as $key => $s_profile) {
  1770.  
  1771.                 //if(isset($s_profile['title']) && in_array(  trim($s_profile['title']), $enabled_services) ){
  1772.                 // backwards compatibility
  1773.  
  1774.                 $profile_url = $s_profile['url'];
  1775.  
  1776.                 if (in_array(trim($s_profile['title']), $enabled_services)) {
  1777.  
  1778.  
  1779.                     if (isset($s_profile['icon_image'])) {
  1780.                         $icon_img_src = $s_profile['icon_image'];
  1781.                     } else {
  1782.                         $icon_img_src = '';
  1783.                     }
  1784.  
  1785.                     switch (trim($s_profile['title'])) {
  1786.                         case 'facebook':
  1787.                             // backward compatibility: if user entered just FB profile name, we will built the real URL below
  1788.                             if (!cosmo_isValidURL($profile_url) && strlen($profile_url)) {
  1789.                                 $profile_url = 'http://facebook.com/people/@/' . $profile_url;
  1790.                             }
  1791.  
  1792.                             break;
  1793.  
  1794.                         case 'twitter':
  1795.                             // backward compatibility: if user entered just Twitter profile name, we will built the real URL below
  1796.                             if (!cosmo_isValidURL($profile_url) && strlen($profile_url)) {
  1797.                                 $profile_url = 'http://twitter.com/' . $profile_url;
  1798.                             }
  1799.  
  1800.                             break;
  1801.  
  1802.  
  1803.                     }
  1804.  
  1805.                     if (!isset($s_profile['icon_image']) || (isset($s_profile['icon_image']) && trim($s_profile['icon_image']) == '')
  1806.                             && isset($s_profile['title']) && in_array(trim(strtolower($s_profile['title'])), $default_supported_profiles)
  1807.                     ) {
  1808.                         //  use font icons for suported services if customicon is not uploaded
  1809.                         $icon = '<i class="icon-' . trim(strtolower($s_profile['title'])) . '"></i>';
  1810.                     } else if (isset($s_profile['icon_image_hover']) && strlen($s_profile['icon_image_hover'])) {
  1811.  
  1812.                         // for icons that have image for rol over we add a specific class "flo-social-hover" and data atributes for hove and original image.
  1813.                         $icon = '<i><img src="' . $icon_img_src . '" data-imghover="' . $s_profile['icon_image_hover'] . '" data-imgoriginal="' . $icon_img_src . '" alt="' . $s_profile['title'] . '" class="flo-social-hover" /></i>';
  1814.                     } else {
  1815.                         $icon = '<i><img src="' . $icon_img_src . '"  alt="' . $s_profile['title'] . '" /></i>';
  1816.                     }
  1817.  
  1818.                     if (strlen(trim($profile_url))) {
  1819.                         ?>
  1820.                         <a href="<?php echo addhttp($profile_url) ?>" target="_blank" class="<?php echo $s_profile['title']; ?> hover-menu"><?php echo $icon; ?></a>
  1821.                     <?php
  1822.                     }
  1823.  
  1824.                 }
  1825.  
  1826.             }
  1827.         }
  1828.  
  1829.         $social_icons_content = ob_get_clean();
  1830.  
  1831.         if ($add_search) { // append search
  1832.             $social_icons_content .= '<a href="javascript:void(0);" class="the-header-search"> <i class="icon-search"></i> </a>';
  1833.         }
  1834.         if (strlen(trim($social_icons_content))) {
  1835.             ?>
  1836.             <div class="social-links">
  1837.                 <div class="social">
  1838.                     <?php echo $social_icons_content; ?>
  1839.                 </div>
  1840.             </div>
  1841.             <?php
  1842.             if ($add_search) { // append search
  1843.                 ?>
  1844.                 <div class="header-serch">
  1845.                     <form action="<?php echo home_url(); ?>/" method="get" id="searchform-header">
  1846.                         <fieldset>
  1847.                             <input class="input" name="s" type="text" id="keywords1" value="" placeholder="search">
  1848.                             <button><i class="icon-search"></i></button>
  1849.                             <i class="icon-close"></i>
  1850.                         </fieldset>
  1851.                     </form>
  1852.                 </div>
  1853.             <?php
  1854.             }
  1855.         }
  1856.  
  1857.     }
  1858.  
  1859. }
  1860.  
  1861.  
  1862. /*
  1863.  * List Blog view width
  1864.  * Single blog post width
  1865. */
  1866. if (!function_exists('cosmo_get_post_list_width')) {
  1867.     function cosmo_get_post_list_width($args)
  1868.     {
  1869.  
  1870.         $single_blog_post_max_width = options::get_value('layout', 'single_blog_post_max_width');
  1871.         ?>
  1872.         <style type="text/css">
  1873.  
  1874.             <?php if(is_numeric($single_blog_post_max_width)){?>
  1875.                 .post-article .post-article-inner
  1876.                 {
  1877.                     max-width: <?php echo $single_blog_post_max_width."px";?>;
  1878.                 }
  1879.             <?php }?>
  1880.  
  1881.             <?php
  1882.                 // for the submenu use font with 1 pixels smaller
  1883.                 $navigation_font_size = options::get_value( 'typography' , 'menu_links_font_font_size' );
  1884.                 $submenu_nav_font_size = $navigation_font_size - 1;
  1885.             ?>
  1886.  
  1887.             @media screen and (min-width: 768px) {
  1888.                 .main-navigation .menu ul.children a{ font-size: <?php echo $submenu_nav_font_size; ?>px ; }
  1889.             }
  1890.         </style>
  1891.     <?php }
  1892. } ?>
  1893. <?php /**
  1894.  * render attached images gallery
  1895.  */
  1896. if (!function_exists('cosmo_get_post_img_slideshow')) {
  1897.     function cosmo_get_post_img_slideshow($args)
  1898.     {
  1899.  
  1900.         extract($args); // extract passed arguments
  1901.  
  1902.         // add any new arguments here
  1903.         $default_args = array(
  1904.                 'post_id'              => 0,
  1905.                 'size'                 => array('width' => 750, 'height' => 500),
  1906.                 'show_nav_thumbs'      => true,
  1907.                 'main_container_class' => 'royalSlider',
  1908.                 'slide_class'          => ''
  1909.  
  1910.         );
  1911.  
  1912.         foreach ($args as $entry_key => $entry_value) {
  1913.             $default_args[$entry_key] = $entry_value;
  1914.         }
  1915.         extract($default_args);
  1916.  
  1917.         /*check the meta data where the attached image ids are stored*/
  1918.  
  1919.         if (metadata_exists('post', $post_id, '_post_image_gallery')) {
  1920.  
  1921.             $product_image_gallery = get_post_meta($post_id, '_post_image_gallery', true);
  1922.  
  1923.             $img_id_array = array_filter(explode(',', $product_image_gallery));
  1924.         }
  1925.  
  1926.  
  1927.         if (isset($img_id_array) && is_array($img_id_array)) {
  1928.             foreach ($img_id_array as $value) {
  1929.                 $attachments[$value] = $value; // create attachments array in hte format that will work for us
  1930.             }
  1931.         }
  1932.  
  1933.  
  1934.         if (isset($attachments) && count($attachments) > 0) {
  1935.             $pretty_colection_id = mt_rand(0, 9999);
  1936.  
  1937.  
  1938.             $counter = 0; ?>
  1939.  
  1940.             <div class=" single-post-gallery not-main-slideshow rsDefault  <?php if (isset($main_container_class)) {
  1941.                 echo $main_container_class;
  1942.             }
  1943.             if (!$show_nav_thumbs) {
  1944.                 echo ' no-thumbs ';
  1945.             } ?> " style=" height:<?php echo $size['height']; // we need to set this height to have the slider size as we want ?>px; ">
  1946.                 <?php
  1947.                 foreach ($attachments as $att_id => $attachment) {
  1948.  
  1949.                     ?>
  1950.                     <div class="rsContent <?php if (isset($slide_class)) {
  1951.                         echo $slide_class;
  1952.                     } ?> ">
  1953.                         <div class="img-holder">
  1954.                             <?php
  1955.                             $full_img_url = wp_get_attachment_url($att_id);
  1956.  
  1957.                             $thumbnail_url = aq_resize($full_img_url, $size['width'], $size['height'], false, false); //resize img, Return an array containing url, width, and height.
  1958.                             $src = $thumbnail_url[0]; // use original img src
  1959.                             ?>
  1960.                             <!-- lazy load img -->
  1961.                             <a class="rsImg" href="<?php echo $src; ?>" data-rsBigImg="<?php echo $full_img_url; ?>"></a>
  1962.  
  1963.                             <?php if ($show_nav_thumbs) { ?>
  1964.                                 <?php
  1965.                                 $thumbnail_url = aq_resize($full_img_url, 150, 150, true, false); //crop img,
  1966.                                 ?>
  1967.                                 <div class="rsTmb"><img src="<?php echo $thumbnail_url[0]; ?>" width="<?php echo $thumbnail_url[1];?>" height="<?php echo $thumbnail_url[2];?>" alt=""/></div>
  1968.                             <?php } ?>
  1969.  
  1970.  
  1971.                         </div>
  1972.                     </div>
  1973.                 <?php } ?>
  1974.             </div>
  1975.  
  1976.         <?php
  1977.         }
  1978.     }
  1979.  
  1980. }
  1981.  
  1982. /**
  1983.  * params:
  1984.  * int - $post_id - the ID of the post for which we wsant to retrieve the categories
  1985.  * bool - $only_first_cat - return only first categ or all of them
  1986.  * string - $taxonomy - the name of the wanted taxonomy, 'category' by default , other values may be 'post_tag' for standard posts or something ele for custom posts
  1987.  * string - $margin_elem_start  -  it shuld be a html element that will show up before each category
  1988.  * string - $margin_elem_end  -  it shuld be a html element that will show up after each category
  1989.  * string - $delimiter  -  the string between the taxonomies
  1990.  * string - $a_class  -  the class that is used for the anchor that surrounds the taxonomies
  1991.  * string - $no_link - use or not links around the taxonomies
  1992.  */
  1993. if (!function_exists('flo_get_post_taxonomies')) {
  1994.     function flo_get_post_taxonomies($post_id, $only_first_cat = false, $taxonomy = 'category', $margin_elem_start = '', $margin_elem_end = '', $delimiter = ', ', $a_class = '', $no_link = false)
  1995.     {
  1996.  
  1997.  
  1998.         $cat        = '';
  1999.         $categories = wp_get_post_terms($post_id, $taxonomy);
  2000.         if (!empty($categories)) {
  2001.  
  2002.             $ind = 1;
  2003.             foreach ($categories as $category) {
  2004.                 $categ = get_term($category->term_id, $taxonomy);
  2005.                 if ($ind != count($categories) && !$only_first_cat) {
  2006.                     $cat_delimiter = $delimiter;
  2007.                 } else {
  2008.                     $cat_delimiter = '';
  2009.                 }
  2010.  
  2011.                 if ($no_link) {
  2012.                     $cat .= $margin_elem_start . $categ->name . $cat_delimiter . $margin_elem_end;
  2013.                 } else {
  2014.                     $cat .= $margin_elem_start . '<a href="' . get_category_link($category) . '" class="' . $a_class . '">' . $categ->name . $cat_delimiter . '</a>' . $margin_elem_end;
  2015.                 }
  2016.  
  2017.  
  2018.                 if ($only_first_cat) {
  2019.                     break;
  2020.                 }
  2021.  
  2022.  
  2023.                 $ind++;
  2024.             }
  2025.  
  2026.  
  2027.             //$cat = __('in','flotheme').' '.   $cat;
  2028.         }
  2029.  
  2030.         return $cat . ' ';
  2031.     }
  2032. }
  2033.  
  2034. /**
  2035.  * render a link to the post's post format archive, the link has a specific class depending on hte post format
  2036.  * params:
  2037.  * int - $post_id - the ID of the post for which we want to retrieve the post format
  2038.  */
  2039.  
  2040. if (!function_exists('cosmo_get_post_format_link')) {
  2041.     function cosmo_get_post_format_link($post_id)
  2042.     {
  2043.  
  2044.         $result      = '';
  2045.         $format      = get_post_format($post_id);
  2046.         $format_link = get_post_format_link($format);
  2047.         if (!strlen($format_link)) {
  2048.             $format_link = "javascript:void(0);";
  2049.         }
  2050.  
  2051.         switch ($format) {
  2052.             case 'video':
  2053.                 $result .= '<a class="entry-format" href="' . $format_link . '"><i class="icon-video"></i></a>';
  2054.                 break;
  2055.             case 'image':
  2056.                 $result .= '<a class="entry-format" href="' . $format_link . '"><i class="icon-image"></i></a>';
  2057.                 break;
  2058.             case 'audio':
  2059.                 $result .= '<a class="entry-format" href="' . $format_link . '"><i class="icon-audio"></i></a>';
  2060.                 break;
  2061.             case 'link':
  2062.                 $result .= '<a class="entry-format" href="' . $format_link . '"><i class="icon-attachment"></i></a>';
  2063.                 break;
  2064.             case 'gallery':
  2065.                 $result .= '<a class="entry-format" href="' . $format_link . '"><i class="icon-gallery"></i></a>';
  2066.                 break;
  2067.             case 'quote':
  2068.                 $result .= '<a class="entry-format" href="' . $format_link . '"><i class="icon-quote"></i></a>';
  2069.                 break;
  2070.             default:
  2071.                 $result .= '<a class="entry-format" href="' . $format_link . '"><i class="icon-standard"></i></a>';
  2072.                 break;
  2073.         }
  2074.  
  2075.         return $result;
  2076.     }
  2077. }
  2078.  
  2079.  
  2080. /**
  2081.  * retrieves the post date in the format specified in the theme settings
  2082.  * params:
  2083.  * int - $post_id - the ID of the post for which we want to retrieve the post format
  2084.  */
  2085.  
  2086. if (!function_exists('flo_get_post_date')) {
  2087.     function flo_get_post_date($post_id)
  2088.     {
  2089.         if (options::logic('blog_post', 'time')) {
  2090.             $post_date = human_time_diff(get_the_time('U', $post_id), current_time('timestamp')) . ' ' . __('ago', 'flotheme');
  2091.         } else {
  2092.             $post_date = date_i18n(get_option('date_format'), get_the_time('U', $post_id));
  2093.         }
  2094.  
  2095.         return $post_date . ' ';
  2096.     }
  2097. }
  2098.  
  2099.  
  2100. /**
  2101.  * check if a given string is a valid URL
  2102.  */
  2103. //if ( ! function_exists( 'cosmo_isValidURL' ) ) {
  2104. function cosmo_isValidURL($url)
  2105. {
  2106.     return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
  2107. }
  2108.  
  2109. //}
  2110.  
  2111. /**
  2112.  * render post meta
  2113.  */
  2114. if (!function_exists('cosmo_post_meta')) {
  2115.     function cosmo_post_meta($post)
  2116.     {
  2117.         global $wp_query;
  2118.         ?>
  2119.         <div class="post-meta-container">
  2120.             <ul class="post-meta">
  2121.                 <li><?php echo cosmo_get_post_date($post->ID); ?></li>
  2122.                 <li><a href="<?php echo get_author_posts_url($post->post_author) ?>">
  2123.                         <?php echo get_the_author_meta('display_name', $post->post_author); ?>
  2124.                     </a>
  2125.                 </li>
  2126.  
  2127.                 <?php
  2128.                 if (comments_open($post->ID)) {
  2129.                     $comments_label = __('comments', 'flotheme');
  2130.                     if (options::logic('blog_post', 'fb_comments')) {
  2131.                         ?>
  2132.                         <li class="meta-elem cosmo-comments" title=""><a href="<?php echo get_comments_link($post->ID); ?>">
  2133.                             <fb:comments-count href="<?php echo get_permalink($post->ID) ?>"></fb:comments-count> <?php echo $comments_label; ?></a></li><?php
  2134.                     } else {
  2135.  
  2136.                         if (get_comments_number($post->ID) == 1) {
  2137.                             $comments_label = __('comment', 'flotheme');
  2138.                         }
  2139.                         ?>
  2140.                     <li class="meta-elem cosmo-comments" title="<?php echo get_comments_number($post->ID);
  2141.                     echo ' ' . $comments_label; ?>"><a href="<?php echo get_comments_link($post->ID) ?>"> <?php echo get_comments_number($post->ID) . ' ' . $comments_label ?> </a></li><?php
  2142.                     }
  2143.                 }
  2144.                 ?>
  2145.  
  2146.                 <?php if (!is_page()) { ?>
  2147.                     <?php
  2148.                     $tags = wp_get_post_terms($post->ID, 'post_tag');
  2149.  
  2150.                     if (!empty($tags)) {
  2151.                         ?>
  2152.                         <li class="meta-elem">
  2153.  
  2154.                             <i class="icon-tag"></i>
  2155.                             <ul class="b_tag">
  2156.                                 <?php
  2157.  
  2158.                                 echo flo_get_post_taxonomies($post->ID, $only_first_cat = false, $taxonomy = 'post_tag', $margin_elem_start = '<li>', $margin_elem_end = '</li> ', $delimiter = ',');
  2159.  
  2160.                                 ?>
  2161.                             </ul>
  2162.  
  2163.                         </li>
  2164.                     <?php } ?>
  2165.                     <li class="meta-elem">
  2166.                         <?php
  2167.                         $categories = wp_get_post_terms($post->ID, 'category');
  2168.                         if (!empty($categories)) {
  2169.                             ?>
  2170.                             <i class="icon-category"></i>
  2171.                             <ul class="category">
  2172.                                 <?php
  2173.                                 echo flo_get_post_taxonomies($post->ID, $only_first_cat = false, $taxonomy = 'category', $margin_elem_start = '<li>', $margin_elem_end = '</li> ', $delimiter = ',');
  2174.                                 ?>
  2175.                             </ul>
  2176.                         <?php
  2177.                         }
  2178.                         ?>
  2179.                     </li>
  2180.                 <?php } ?>
  2181.  
  2182.             </ul>
  2183.         </div>
  2184.  
  2185.     <?php
  2186.     }
  2187. }
  2188.  
  2189.  
  2190. /**
  2191.  * Cosmo loop
  2192.  */
  2193. if (!function_exists('cosmo_loop')) {
  2194. function cosmo_loop($template, $column_class = 'small-12 large-9 columns', $side = '')
  2195. {
  2196.     global $wp_query, $massonry_class, $taxonomy, $post, $custom_query, $page_id, $i,$nr_cols,$count_posts,$the_query,$last;
  2197.     $custom_query = $wp_query;
  2198.     $the_query = $wp_query;
  2199.  
  2200.     //      echo "<pre>";
  2201.     //      var_dump($wp_query);die;
  2202.  
  2203.     $enable_massonry = false;
  2204.     $i = 0;
  2205.  
  2206.     if ($template == 'blog_page') {
  2207.         $view_type = options::get_value('content_settings', 'blog_listing_layout');
  2208.         $grid_cols = options::get_value('content_settings', 'blog_grid_layout');
  2209.     } else {
  2210.         $view_type = options::get_value('content_settings', 'archive_listing_layout');
  2211.         $grid_cols = options::get_value('content_settings', 'archive_grid_layout');
  2212.     }
  2213.     global $grid_class, $view_type_custom, $block_width;
  2214.  
  2215.     // set the blog width for grid and thumb view
  2216.     if (  strlen(options::get_value('content_settings', 'blog_grid_layout')) != '') {
  2217.         if ($grid_cols == 'grid1') {
  2218.             $block_width = ' small-12 large-6 ';
  2219.             $nr_cols = 2;
  2220.         } elseif ($grid_cols == 'grid2') {
  2221.             $block_width = ' small-12 large-4 ';
  2222.             $nr_cols = 3;
  2223.         }elseif ($grid_cols == 'grid3') {
  2224.             $block_width = ' small-13 large-3 ';
  2225.             $nr_cols = 4;
  2226.         }
  2227.  
  2228.     } else {
  2229.         $block_width = ' small-12 large-3 ';
  2230.         $nr_cols = 3;
  2231.     }
  2232.  
  2233.     // for grid-50_50 view type we will force 2 columns
  2234.     if('grid-50_50' == $view_type){
  2235.         $nr_cols = 2;
  2236.         $block_width = ' small-12 large-6 ';
  2237.     }
  2238.  
  2239.     $view_type_custom = $view_type;
  2240.     if (count($wp_query->posts) > 0) {
  2241.  
  2242.     if (strpos($view_type, 'list') !== false) { // if any of the list view
  2243.         ?>
  2244.         <?php
  2245.         foreach ($wp_query->posts as $index => $post) {
  2246.             $wp_query->the_post();
  2247.             $template_name = 'floshortcodes/cosmo-' . $view_type . '.php'; // in order for this to work properly you should have the templates name having the view type name.
  2248.             include(locate_template($template_name));
  2249.         }
  2250.         get_template_part('pagination');
  2251.         ?>
  2252.     <?php
  2253.     } else {
  2254.         if (!(isset($gutter_class) && strlen($gutter_class))) {
  2255.             $gutter_class = 'no-gutter';
  2256.         }
  2257.         ?>
  2258.         <?php
  2259.             $massonry_class = '';
  2260.             $enable_massonry = true;
  2261.             $i = 1;
  2262.             $counter = 1;
  2263.             $count_posts = count($wp_query->posts);
  2264.             foreach ($wp_query->posts as $index => $post) {
  2265.                 $wp_query->the_post();
  2266.                 if($post->post_type == 'video'){
  2267.                     $taxonomy = 'video-category';
  2268.                 }elseif($post->post_type == 'gallery'){
  2269.                     $taxonomy = 'gallery-category';
  2270.                 }else{
  2271.                     $taxonomy = 'category';
  2272.                 }
  2273.                 $template_name = 'floshortcodes/' . $view_type . '.php'; // in order for this to work properly you should have the templates name having the view type name.
  2274.                 include(locate_template($template_name));
  2275.                 $i++;
  2276.                 $global_count = get_option('posts_per_page',true);
  2277.                 $counter++;
  2278.  
  2279.                 if ($counter == (int)$global_count){
  2280.                     $last = true;
  2281.                 }else{
  2282.                     $last = false;
  2283.                 }
  2284.             }
  2285.             ?>
  2286. <!--        --><?php
  2287.         get_template_part('pagination');
  2288. //      ?>
  2289.     <?php
  2290.     }
  2291.     if ($enable_massonry) {
  2292.         wp_localize_script('functions', 'enable_massonry', '1');
  2293.     } else {
  2294.         wp_localize_script('functions', 'enable_massonry', '0');
  2295.     }
  2296.  
  2297.     wp_reset_postdata(); /* Restore original Post Data */
  2298.     } else {
  2299.         get_template_part('loop', '404');
  2300.     }
  2301.     }
  2302. }
  2303.  
  2304.  
  2305. /**
  2306.  * Title     : Aqua Resizer
  2307.  * Description   : this function will return the image size that will be passed to aq_resize function
  2308.  *
  2309.  *
  2310.  * @param    string $size_name - (required) the name of the size option, for example 'single_cropped'
  2311.  * @param    int $width_or_height - (not required) specifyes what demention we want to get, the width or the height of the image (default - width)
  2312.  *
  2313.  * @return str|array
  2314.  *****/
  2315.  
  2316. function get_aqua_size($size_name, $width_or_height = 'width', $option = 'imagesizes')
  2317. {
  2318.     $result = options::get_value($option, $size_name . '_' . $width_or_height);
  2319.  
  2320.     if (is_numeric(trim($result))) {
  2321.         return trim($result);
  2322.     } else {
  2323.         /*if the option is empty or not numeric for some reason, we return the default*/
  2324.         return options::$default[$option][$size_name . '_' . $width_or_height];
  2325.     }
  2326. }
  2327.  
  2328. /**
  2329.  * Description   : this function will return the class name for the blocks depending on the input (number of columns we want to have)
  2330.  *
  2331.  *
  2332.  * @param    int $arabic - number of columns we want to have
  2333.  *
  2334.  * @return str
  2335.  *****/
  2336. if (!function_exists('cosmo_columns_arabic_to_chars')) {
  2337.     function cosmo_columns_arabic_to_chars($arabic)
  2338.     {
  2339.         $words_full_width = array(0 => 'small-12 medium-12', 1 => 'small-12 medium-12', 2 => 'small-12 medium-6', 3 => 'small-12 medium-4', 4 => 'small-12 medium-3', 5 => 'small-12 medium-3', 6 => 'small-12 medium-2',
  2340.                                   7 => 'small-12 medium-2', 8 => 'small-12 medium-12', 9 => 'small-12 medium-12', 10 => 'small-12 medium-12', 11 => 'small-12 medium-12', 12 => 'small-12 medium-12');
  2341.         return $words_full_width[$arabic];
  2342.     }
  2343. }
  2344.  
  2345.  
  2346. if (!function_exists('hex2rgb')) {
  2347.     function hex2rgb($hex)
  2348.     {
  2349.         $hex = str_replace("#", "", $hex);
  2350.  
  2351.         if (strlen($hex) == 3) {
  2352.             $r = hexdec(substr($hex, 0, 1) . substr($hex, 0, 1));
  2353.             $g = hexdec(substr($hex, 1, 1) . substr($hex, 1, 1));
  2354.             $b = hexdec(substr($hex, 2, 1) . substr($hex, 2, 1));
  2355.         } else {
  2356.             $r = hexdec(substr($hex, 0, 2));
  2357.             $g = hexdec(substr($hex, 2, 2));
  2358.             $b = hexdec(substr($hex, 4, 2));
  2359.         }
  2360.         //$rgb = array($r, $g, $b);
  2361.         $rgb = $r . ',' . $g . ',' . $b . ', ';
  2362.  
  2363.         //return implode(",", $rgb); // returns the rgb values separated by commas
  2364.         return $rgb; // returns an array with the rgb values
  2365.     }
  2366. }
  2367.  
  2368. /**
  2369.  * cosmo_get_post_types_hc
  2370.  */
  2371. if (!function_exists('cosmo_get_post_types_hc')) {
  2372.     /**
  2373.      * Description   : this function will return an array of registered custom post types
  2374.      *
  2375.      * @return array
  2376.      *****/
  2377.     function cosmo_get_post_types_hc()
  2378.     {
  2379.         //of course it can be done via get_post_types, but for some reason it return only posts and pages, and no custom posts, and we have to hardcode this shit
  2380.  
  2381.  
  2382.         return array('post' => __('Post', 'flotheme'), 'video' => __('Video', 'flotheme'), 'gallery' => __('Gallery', 'flotheme'), 'page' => __('Pages', 'flotheme'));
  2383.     }
  2384. }
  2385.  
  2386.  
  2387. if (!function_exists('cosmo_get_prev_next_elem')) {
  2388.     /**
  2389.      * Description   : this function will return the the next and prev siblings of the given element from an string
  2390.      *
  2391.      * params:
  2392.      * $haystack -  string of elements separated by comma  where we are looking for our values
  2393.      * $current_elem - string, the current element for which we need the siblings
  2394.      * @return array that contains next and prev elem
  2395.      *****/
  2396.     function cosmo_get_prev_next_elem($haystack, $current_elem)
  2397.     {
  2398.         $haystack_array = explode(",", $haystack);
  2399.  
  2400.         $current_key = array_search($current_elem, $haystack_array);
  2401.  
  2402.         if (isset($haystack_array[$current_key - 1])) {
  2403.             $siblings['previous'] = $haystack_array[$current_key - 1];
  2404.         } else {
  2405.             $siblings['previous'] = 0;
  2406.         }
  2407.  
  2408.         if (isset($haystack_array[$current_key + 1])) {
  2409.             $siblings['next'] = $haystack_array[$current_key + 1];
  2410.         } else {
  2411.             $siblings['next'] = 0;
  2412.         }
  2413.  
  2414.         return $siblings;
  2415.     }
  2416. }
  2417.  
  2418.  
  2419. if (!function_exists('cosmo_get_distinct_post_terms')) {
  2420.     /*
  2421.             Returns distinct taxonomies for a given post, or nothig if nothing found.
  2422.         */
  2423.     function cosmo_get_distinct_post_terms($post_id, $taxonomy, $return_names = false, $filter_type = '')
  2424.     {
  2425.  
  2426.         $ids   = array();
  2427.         $names = '';
  2428.  
  2429.         $terms = wp_get_post_terms($post_id, $taxonomy);
  2430.  
  2431.         if (is_array($terms)) {
  2432.             foreach ($terms as $term) {
  2433.                 if (!in_array($term->term_id, $ids)) {
  2434.                     $ids[] = $term->term_id;
  2435.  
  2436.                     $names .= ' ' . $term->slug . '-' . $filter_type . ' ';
  2437.                 }
  2438.             }
  2439.         }
  2440.  
  2441.         if ($return_names) {
  2442.             return $names;
  2443.         } else {
  2444.             return $ids;
  2445.         }
  2446.     }
  2447. }
  2448.  
  2449. if (!function_exists('cosmo_get_filters')) {
  2450.     /*
  2451.             this function returns the filter by taxonomy
  2452.             Params:
  2453.             $term_ids - and array or term IDs
  2454.             $taxonomy -  for example 'category' or 'portfolio'
  2455.             $filter_type - we need that to have distinct data-value, to not affect other filters
  2456.         */
  2457.     function cosmo_get_filters($term_slugs, $taxonomy, $filter_type = 'thumbs', $title = '')
  2458.     {
  2459.         //var_dump($term_slugs, $taxonomy);die;
  2460.         $result = '';
  2461.         if (is_array($term_slugs) && sizeof($term_slugs)) {
  2462.             $result .= $title;
  2463.             $result .= '<a href="#filter" data-option-value="*" class="selected">' . __('All', 'flotheme') . '</a>';
  2464.             $i = 0;
  2465.             foreach ($term_slugs as $term_slug) {
  2466.                 if ($term_slug != 'all') {
  2467.                     $i++;
  2468.                     //$term = get_term( $term_id, $taxonomy );
  2469.  
  2470.                     $term = get_term_by('slug', $term_slug, $taxonomy);
  2471.                     //                  var_dump($term);die;
  2472.                     $result .= '<a href="' . esc_url(add_query_arg('term', $term_slug) ) . '" data-filter=".' . $term->slug . '">' . $term->name . '</a>';
  2473.                 }
  2474.             }
  2475.         }
  2476.         return $result;
  2477.     }
  2478. }
  2479.  
  2480.  
  2481. if (!function_exists('cosmoSendContact')) {
  2482.     function cosmoSendContact()
  2483.     {
  2484.         if (isset($_POST['action']) && $_POST['action'] == 'cosmoSendContact') {
  2485.             $result = array();
  2486.  
  2487.             $tomail   = $_POST['cosmo-contact-email'];
  2488.             $frommail = '';
  2489.  
  2490.             if (isset($_POST['cosmo-name']) && strlen($_POST['cosmo-name'])) {
  2491.                 $name = trim($_POST['cosmo-name']);
  2492.             } else {
  2493.                 $result['contact_name'] = '<p class="text-error">' . __('Error, name is required field. ', 'flotheme') . '</p>';
  2494.                 $name                   = '';
  2495.             }
  2496.  
  2497.             if (isset($_POST['cosmo-email']) && is_email($_POST['cosmo-email'])) {
  2498.                 $frommail = trim($_POST['cosmo-email']);
  2499.             } else {
  2500.  
  2501.                 $result['contact_email'] = '<p class="text-error">' . __('Error, please enter a valid email address. ', 'flotheme') . '</p>';
  2502.  
  2503.             }
  2504.  
  2505.             $message = '';
  2506.             if (isset($_POST['cosmo-name'])) {
  2507.                 $message .= __('Contact name: ', 'flotheme') . trim($_POST['cosmo-name']) . "\n";
  2508.             }
  2509.             if (isset($_POST['cosmo-email'])) {
  2510.                 $message .= __('Contact email: ', 'flotheme') . trim($_POST['cosmo-email']) . "\n";
  2511.             }
  2512.             if (isset($_POST['cosmo-phone'])) {
  2513.                 $message .= __('Contact phone: ', 'flotheme') . trim($_POST['cosmo-phone']) . "\n\n";
  2514.             }
  2515.             if (isset($_POST['cosmo-subject'])) {
  2516.                 $message .= __('Subject: ', 'flotheme') . trim($_POST['cosmo-subject']) . "\n\n";
  2517.             }
  2518.  
  2519.             $message .= trim($_POST['cosmo-message']);
  2520.  
  2521.             if (is_email($tomail) && strlen($tomail) && strlen($frommail) && strlen($name) && strlen($message)) {
  2522.  
  2523.                 // if this option is enabled, then we will use the visitor email in the Form field
  2524.                 if( options::logic('blog_post', 'contact_page_from_field_source_user_email') ){
  2525.                     $headers = 'From: '.trim($_POST['cosmo-name']).' <'.trim($_POST['cosmo-email']).'>';
  2526.                 }else{
  2527.                     $headers = '';
  2528.                 }
  2529.                
  2530.                 $subject = __('New email from', 'flotheme') . ' ' . get_bloginfo('name') . '.' . __(' Sent via contact form.', 'flotheme');
  2531.                 wp_mail($tomail, $subject, $message, $headers);
  2532.  
  2533.                 if (isset($_POST['thx_msg']) && strlen(trim($_POST['thx_msg']))) {
  2534.                     $thx_msg = urldecode($_POST['thx_msg']);
  2535.                 } else {
  2536.                     $thx_msg = __('Email was sent successfully ', 'flotheme');
  2537.                 }
  2538.  
  2539.                 $result['message'] = '<span class="text-success" >' . $thx_msg . '</span>';
  2540.  
  2541.             }
  2542.  
  2543.             echo json_encode($result);
  2544.         }
  2545.  
  2546.  
  2547.         exit();
  2548.     }
  2549. }
  2550.  
  2551. if (!function_exists('flo_get_slideshow')) {
  2552.     function flo_get_slideshow($slideshow_id)
  2553.     {
  2554.         global $post;
  2555.         if(strpos(get_page_template_slug( $post->ID), 'template-contact-form') == false &&
  2556.             strpos(get_page_template_slug( $post->ID), 'template-gallery') == false ){
  2557.             global $slideshow;
  2558.             $slideshow = meta::get_meta($slideshow_id, '_floslideshow');
  2559.  
  2560.             if (!(isset($slideshow) && is_array($slideshow) && count($slideshow))) {
  2561.                 return;
  2562.             }
  2563.  
  2564.             if (!empty($slideshow) && is_array($slideshow) ) {
  2565.  
  2566.                 $page_slyder_info = flo_get_page_slyder_info();
  2567.  
  2568.                 if(isset($page_slyder_info['slideshow_type']) && $page_slyder_info['slideshow_type'] != 'content_width' ){
  2569.                     $slider_type = 'full_width'; // will use full-width.php slidehow template
  2570.                 }else{
  2571.                     $slider_type = 'content_width';
  2572.                 }
  2573.  
  2574.                 // use Royal slider
  2575.  
  2576.                 get_template_part( '/parts/slideshow/'.$slider_type);
  2577.  
  2578.  
  2579.             }
  2580.         }
  2581.  
  2582.     }
  2583. }
  2584.  
  2585. /**
  2586.  * Reset options
  2587.  * @return void
  2588.  */
  2589. if (!function_exists('cResetOptions')) {
  2590.     function cResetOptions()
  2591.     {
  2592.  
  2593.         $theme_options = options::$menu['flothemes'];
  2594.         if (sizeof($theme_options)) {
  2595.             foreach ($theme_options as $key => $value) {
  2596.                 delete_option($key);
  2597.             }
  2598.         }
  2599.     }
  2600. }
  2601.  
  2602. /**
  2603.  * get category taxonomy
  2604.  * @param int - post_id
  2605.  * @return string - category taxony slug for the passed post id
  2606.  */
  2607. if (!function_exists('flo_get_categ_tax')) {
  2608.     function flo_get_categ_tax($post_id)
  2609.     {
  2610.  
  2611.         $current_post_type = get_post_type($post_id);
  2612.  
  2613.         // category taxonomy array for each post type
  2614.         $categ_taxonomies = array('post'    => 'category',
  2615.                                   'video'   => 'video-category',
  2616.                                   'gallery' => 'gallery-category'
  2617.         );
  2618.         if (isset($categ_taxonomies[$current_post_type])) {
  2619.             return $categ_taxonomies[$current_post_type];
  2620.         } else {
  2621.             return '';
  2622.         }
  2623.  
  2624.     }
  2625. }
  2626.  
  2627.  
  2628. if (!function_exists('flo_video_embed')) {
  2629.     function flo_video_embed()
  2630.     { //echo 'qweqweqwe';
  2631.         if (isset($_POST['post_id']) && is_numeric($_POST['post_id'])) { // if post ID is passed vide URL
  2632.             $embed_meta = get_post_meta($_POST['post_id'], 'cosmoembed', true);
  2633.  
  2634.             $result = array();
  2635.             if (cosmo_isValidURL($embed_meta['url'])) {
  2636.                 // for URL
  2637.                 global $wp_embed;
  2638.                 $wp_embed->post_ID = $_POST['post_id']; // use this trick to make the video work via ajax :)
  2639.  
  2640.                 $result['video'] = $wp_embed->run_shortcode('[embed autoplay="1"   ]' . trim($embed_meta['url']) . '[/embed]');
  2641.             } else {
  2642.                 // for embeds
  2643.                 $result['video'] = $embed_meta['url'];
  2644.             }
  2645.  
  2646.             echo json_encode($result);
  2647.         }
  2648.         exit();
  2649.     }
  2650.  
  2651. }
  2652.  
  2653. if (!function_exists('flo_post_nav')) :
  2654.     /**
  2655.      * Displays navigation to next/previous post when applicable.
  2656.      *
  2657.      *
  2658.      * @return void
  2659.      */
  2660.     function flo_post_nav($middle_page_id = 0)
  2661.     {
  2662.         global $post;
  2663.         $previous           = (is_attachment()) ? get_post($post->post_parent) : get_adjacent_post(false, '', true);
  2664.         $next               = (is_attachment()) ? get_post($post->post_parent) : get_adjacent_post(false, '', false);
  2665.         $gallery_next_label = options::get_value('labels', 'next_gallery_label');
  2666.         $gallery_prev_label = options::get_value('labels', 'prev_gallery_label');
  2667.         $post_next_label    = options::get_value('labels', 'next_post_label');
  2668.         $post_prev_label    = options::get_value('labels', 'prev_post_label');
  2669.         $video_next_label   = options::get_value('labels', 'next_video_label');
  2670.         $video_prev_label   = options::get_value('labels', 'prev_video_label');
  2671.         if ($previous) {
  2672.             if ($post->post_type == 'gallery') {
  2673.                 previous_post_link('%link', _x('<span class="the-text link prev-gallery"><span class="link-separator">/&nbsp;</span>' . $gallery_prev_label . '</span>', 'Previous post link', 'flotheme'));
  2674.             } elseif ($post->post_type == 'video') {
  2675.                 previous_post_link('%link', _x('<span class="the-text link next">' . $video_prev_label . '</span>', 'Previous post link', 'flotheme'));
  2676.             } else {
  2677.                 previous_post_link('%link', _x('<span class="the-text link next">' . $post_prev_label . '</span>', 'Previous post link', 'flotheme'));
  2678.             }
  2679.         } else {
  2680.             echo '<a href="#" rel="prev"><span></span></a>';
  2681.         }
  2682.         if ($post->post_type == 'gallery') {
  2683.             next_post_link('%link', _x('<span class="the-text link next-gallery"><span class="link-separator">/&nbsp;</span>' . $gallery_next_label . '</span> ', 'Next post link', 'flotheme'));
  2684.         } elseif ($post->post_type == 'video') {
  2685.             next_post_link('%link', _x('<span class="the-text link prev">' . $video_next_label . '</span> ', 'Next post link', 'flotheme'));
  2686.         } else {
  2687.             next_post_link('%link', _x('<span class="the-text link prev">' . $post_next_label . '</span> ', 'Next post link', 'flotheme'));
  2688.         }
  2689.         ?>
  2690.  
  2691.     <?php
  2692.     }
  2693. endif;
  2694. /**
  2695.  * // returns the gallery type assigned for a given gallery, or the default setting if the given post does not have that setting.
  2696.  */
  2697. if (!function_exists('get_posts_gallery_type')) {
  2698.     function get_posts_gallery_type($post_id)
  2699.     {
  2700.         $gallerytype = meta::get_meta($post_id, 'gallerytype');
  2701.  
  2702.         if (isset($gallerytype['value']) && strlen($gallerytype['value'])) {
  2703.             return $gallerytype['value'];
  2704.         } else {
  2705.             return options::get_value('content_settings', 'single_gallery_layout');
  2706.         }
  2707.  
  2708.     }
  2709. }
  2710.  
  2711. /**
  2712.  * Include gallery manager
  2713.  */
  2714. include_once('attached_images_manager.php');
  2715.  
  2716. // slideshow manager
  2717. include_once('slideshow_attached_images_manager.php');
  2718.  
  2719. /*----------------------------------------------------------------------------------------------------------------------------------------*/
  2720.  
  2721. /* related posts by herarchical taxonomy */
  2722. /* get tax slugs and number of similar posts  */
  2723. function similar_query($post_id, $taxonomy, $posts_per_page = 4)
  2724. {
  2725.  
  2726.     $the_post_type = get_post_type($post_id);
  2727.     if ('video' == $the_post_type) {
  2728.         if ($taxonomy == 'post_tag') {
  2729.             $taxonomy = 'tag';
  2730.         }
  2731.         $taxonomy = 'video-' . $taxonomy;
  2732.     }
  2733.  
  2734.     $topics = wp_get_post_terms($post_id, $taxonomy);
  2735.  
  2736.     $terms = array();
  2737.     if (!empty($topics)) {
  2738.         foreach ($topics as $topic) {
  2739.             $term = get_term($topic->term_id, $taxonomy);
  2740.             if (isset($term->slug)) {
  2741.                 array_push($terms, $term->slug);
  2742.             }
  2743.  
  2744.         }
  2745.     }
  2746.  
  2747.     if (!empty($terms)) {
  2748.         $query = new WP_Query(array(
  2749.                 'post_type'           => $the_post_type,
  2750.                 'post__not_in'        => array($post_id),
  2751.                 'posts_per_page'      => $posts_per_page,
  2752.                 'orderby'             => 'rand',
  2753.                 'ignore_sticky_posts' => 1,
  2754.                 'tax_query'           => array(
  2755.                         array(
  2756.                                 'taxonomy' => $taxonomy,
  2757.                                 'field'    => 'slug',
  2758.                                 'terms'    => $terms,
  2759.                         )
  2760.                 )
  2761.         ));
  2762.     } else {
  2763.         $query = array();
  2764.     }
  2765.  
  2766.  
  2767.     return $query;
  2768. }
  2769.  
  2770. if (!function_exists('flo_set_transparent_header')) {
  2771.     function flo_set_transparent_header()
  2772.     {
  2773.         //deb::e(is_page());
  2774.         if ((is_page() || (is_single() && get_post_type() == 'post')) && !wp_is_mobile()) { //only for pages
  2775.             global $post;
  2776.  
  2777.             $sl_settings = meta::get_meta($post->ID, 'slideshowSettings');
  2778.  
  2779.             if ((isset($sl_settings['slideshow_select']) && is_numeric($sl_settings['slideshow_select']) && $sl_settings['slideshow_select'] != '0') ||
  2780.                     (is_single() && has_post_thumbnail($post->ID) && options::logic('blog_post', 'show_single_featured') && !post_password_required())
  2781.             ) {
  2782.  
  2783.  
  2784.                 ?>
  2785.             <?php
  2786.  
  2787.             }
  2788.  
  2789.         }
  2790.     }
  2791. }
  2792.  
  2793. /**
  2794.  * gallery shortcode using massonry
  2795.  *
  2796.  * @param string $output
  2797.  * @param array $attr
  2798.  *
  2799.  * @return string
  2800.  */
  2801. function flo_post_gallery($output, $attr)
  2802. {
  2803.     global $post, $wp_locale;
  2804.  
  2805.     static $instance = 0;
  2806.     $instance++;
  2807.  
  2808.     if (isset($attr['orderby'])) {
  2809.         $attr['orderby'] = sanitize_sql_orderby($attr['orderby']);
  2810.         if (!$attr['orderby'])
  2811.             unset($attr['orderby']);
  2812.     }
  2813.  
  2814.     $size = 'large';
  2815.  
  2816.     extract(shortcode_atts(array(
  2817.             'order'      => 'ASC',
  2818.             'orderby'    => 'menu_order ID',
  2819.             'id'         => $post->ID,
  2820.             'itemtag'    => 'dl',
  2821.             'icontag'    => 'dt',
  2822.             'captiontag' => 'dd',
  2823.             'columns'    => 3,
  2824.             'size'       => $size,
  2825.             'include'    => '',
  2826.             'exclude'    => ''
  2827.     ), $attr));
  2828.  
  2829.     $id = intval($id);
  2830.     if ('RAND' == $order)
  2831.         $orderby = 'none';
  2832.  
  2833.     if (!empty($include)) {
  2834.         $include      = preg_replace('/[^0-9,]+/', '', $include);
  2835.         $_attachments = get_posts(array('include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby));
  2836.  
  2837.         $attachments = array();
  2838.         foreach ($_attachments as $key => $val) {
  2839.             $attachments[$val->ID] = $_attachments[$key];
  2840.         }
  2841.     } elseif (!empty($exclude)) {
  2842.         $exclude     = preg_replace('/[^0-9,]+/', '', $exclude);
  2843.         $attachments = get_children(array('post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby));
  2844.     } else {
  2845.         $attachments = get_children(array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby));
  2846.     }
  2847.  
  2848.     if (empty($attachments))
  2849.         return '';
  2850.  
  2851.     if (is_feed()) {
  2852.         $output = "\n";
  2853.         foreach ($attachments as $att_id => $attachment)
  2854.             $output .= wp_get_attachment_link($att_id, $size, true) . "\n";
  2855.         return $output;
  2856.     }
  2857.  
  2858.     // check if the massonry is enabled
  2859.     if(options::logic( 'content_settings' , 'use_massonry_gallery_shortcode' )){
  2860.         $shcode_massonry_class = 'js-masonry';
  2861.     }else{
  2862.         $shcode_massonry_class = '';
  2863.     }
  2864.  
  2865.     // if there is only 1 column, then the massonry is disabled
  2866.     if($columns == 1){
  2867.         $shcode_massonry_class = 1;
  2868.     }
  2869.    
  2870.  
  2871.     $output = '<section class="flo-gallery-shortcode grid-view grid-masonry gallery-'.$columns.'-columns"><div class="gallery-shortcode-wrap '.$shcode_massonry_class.'">';
  2872.  
  2873.  
  2874.     $i       = 0;
  2875.     $rand_id = mt_rand(1, 1000);
  2876.  
  2877.     $block_width = ' ' . cosmo_columns_arabic_to_chars($columns) . ' ';
  2878.  
  2879.     foreach ($attachments as $id => $attachment) {
  2880.         $image_attributes = wp_get_attachment_image_src($id, 'full');
  2881.  
  2882.         if (isset($attachment->post_excerpt) && strlen($attachment->post_excerpt)) {
  2883.             $image_caption = $attachment->post_excerpt;
  2884.         } else {
  2885.             $image_caption = '';
  2886.         }
  2887.  
  2888.         if (isset($attachment->post_content) && strlen($attachment->post_content)) {
  2889.             $image_description = $attachment->post_content;
  2890.         } else {
  2891.             $image_description = '';
  2892.         }
  2893.  
  2894.         $src = wp_get_attachment_image_src($id, 'full'); // get full attachment source
  2895.         if (isset($src[0])) {
  2896.             $src = $src[0];
  2897.         } else {
  2898.             $src = '';
  2899.         }
  2900.  
  2901.         if($columns == 1){
  2902.             // if the user is using 1 columns, we will crop the images differently
  2903.             options::get_value( 'layout' , 'site_width' );
  2904.             if(!is_numeric($site_width)){
  2905.                 $site_width = 1130;
  2906.             }
  2907.  
  2908.             $img_url = aq_resize($src, $site_width, 9999, $crop = false, $single = true); //resize img , height 400px  
  2909.         }else{
  2910.             $img_url = aq_resize($src, 9999, 900, $crop = false, $single = true); //resize img , height 400px
  2911.         }
  2912.        
  2913.  
  2914.         // if for some reason it is not possible to resize the image, we will use the original image
  2915.         if($img_url == ''){
  2916.             $img_url = $src;
  2917.         }
  2918.  
  2919.         //$link = '<a href="'.$image_attributes[0].'" data-fancybox-group="prettyPhoto['.$rand_id.']" title="'.$image_caption . $image_description.'" >'.wp_get_attachment_image($id, $size, false).'</a>';
  2920.         $link = '<div class=" post-preview gallery-shortcode flo-' . $columns . '-columns" ><a href="' . $image_attributes[0] . '"  class="no-lazy"  data-fancybox-group="prettyPhoto[' . $rand_id . ']"  title="' . esc_attr($image_caption) .' '. esc_attr($image_description) . '" ><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-original="' . $img_url . '" alt="' . $attachment->post_title . '"  /></a></div>';
  2921.         $output .= $link;
  2922.  
  2923.     }
  2924.  
  2925.     $output .= "</div></section>\n";
  2926.  
  2927.     //enable massonry
  2928.     wp_localize_script('functions', 'enable_massonry', '1');
  2929.  
  2930.     /* include jquery.fancybox.pack*/
  2931.     wp_register_style('fancybox', get_template_directory_uri() . '/js/fancybox/jquery.fancybox.css');
  2932.     wp_enqueue_style('fancybox');
  2933.  
  2934.     wp_enqueue_script('apps', get_template_directory_uri() . '/js/fancybox/jquery.fancybox.pack.js', array( 'jquery' ),'',true);
  2935.  
  2936.     return $output;
  2937. }
  2938.  
  2939. /**
  2940.  *  render the comments
  2941.  */
  2942. function flo_comment($comment, $args, $depth)
  2943. {
  2944.  
  2945. $GLOBALS['comment'] = $comment;
  2946. switch ($comment->comment_type) {
  2947. case '' :
  2948. {
  2949.     ?>
  2950.     <li <?php comment_class(); ?> id="li-comment-<?php comment_ID(); ?>">
  2951.         <article id="comment-<?php comment_ID(); ?>" class="comment-body">
  2952.             <div class="comment-meta">
  2953.                 <h2 class="comment-author-name"><?php echo get_comment_author_link($comment->comment_ID); ?> <span><?php echo _e('said', 'flotheme') ?>:</span></h2>
  2954.                 <!-- <span class="comment-period"><?php _e('on', 'flotheme'); ?> <?php printf(__('%1$s&nbsp;&nbsp;%2$s', 'flotheme'), get_comment_date(), get_comment_time()); ?></span> -->
  2955.                 <div class="reply-wrap">
  2956.                     <span class="gray reply fr"><?php comment_reply_link(array_merge($args, array('depth' => $depth, 'max_depth' => $args['max_depth']))); ?></span>
  2957.                 </div>
  2958.             </div>
  2959.             <div class="comment-content-wrap">
  2960.                 <div class="comment-content">
  2961.                     <p>
  2962.                         <?php
  2963.                         $order = array("\r\n", "\n", "\r");
  2964.                         $replace = '<br />';
  2965.                         echo str_replace($order, $replace, get_comment_text());
  2966.                         ?>
  2967.                     </p>
  2968.                 </div>
  2969.                 <!-- end .comment-content -->
  2970.             </div>
  2971.         </article>
  2972.     <?php
  2973.     break;
  2974. }
  2975. case 'pingback'  :
  2976. {
  2977. }
  2978. case 'trackback' :
  2979. {
  2980. ?>
  2981. <li class="pingback">
  2982.     <p>
  2983.         <?php
  2984.         _e('Pingback', 'flotheme'); ?> : <?php comment_author_link(); ?><?php edit_comment_link('(' . __('Edit', 'flotheme') . ')', ' ');
  2985.         ?>
  2986.     </p>
  2987.     <?php
  2988.     break;
  2989.     }
  2990.     }
  2991.     }
  2992.  
  2993.  
  2994.     /* imports dummy content and settings */
  2995.     function importDummyData()
  2996.     {
  2997.  
  2998.  
  2999.         //$import_archive = get_theme_root(PLAYGROUND_TEMPLATE) . '/' . PLAYGROUND_TEMPLATE . '/import-archives/' . implode('#', array($theme_slug, $skin_slug, $homepage_slug)) . '.zip';
  3000.  
  3001.         require_once get_template_directory() . '/lib/demo_content/flo-importer/wordpress-importer.php';
  3002.  
  3003.         //$tmp_dir = dirname($import_archive) . '/' . uniqid() . md5(time());
  3004.         if (isset($_POST['folder'])) {
  3005.             $import_dir = $_POST['folder'];
  3006.         } else {
  3007.             $import_dir = 'export';
  3008.         }
  3009.         $tmp_dir = get_template_directory() . '/lib/demo_content/' . $import_dir . '/';
  3010.  
  3011.         if (class_exists('Flo_Import_Dummy_Data')) {
  3012.  
  3013.             $flo_importer = new Flo_Import_Dummy_Data();
  3014.             ob_start();
  3015.             $result = $flo_importer->install_programatically($tmp_dir);
  3016.             $buffer = ob_get_clean();
  3017.             if ($result && stripos($buffer, '<p>All done.') !== false) {
  3018.                 die(json_encode(array('message' => 'All good!', 'code' => 1)));
  3019.             } else {
  3020.                 die(json_encode(array('message' => 'Something went wrong. Please contact administrator', 'code' => -1)));
  3021.             }
  3022.         } else {
  3023.             die(json_encode(array('message' => 'Missing importer class. Please contact administrator.', 'code' => -1)));
  3024.         }
  3025.  
  3026.         exit();
  3027.     }
  3028.  
  3029.  
  3030.     if (!function_exists('flo_wpforce_featured')) {
  3031.         /* if a post does not have featured image, then we set the first attached image as feat img */
  3032.         function flo_wpforce_featured()
  3033.         {
  3034.             if (options::logic('blog_post', 'auto_feat_img')) {
  3035.                 global $post;
  3036.  
  3037.                 $post_types_to_work_with = array('post', 'gallery'); // add more posts here if you want.
  3038.  
  3039.                 if (isset($post->ID)) {
  3040.                     $the_post_format = get_post_type($post->ID);
  3041.                 } else {
  3042.                     $the_post_format = 'unknown';
  3043.                 }
  3044.  
  3045.  
  3046.                 if (in_array($the_post_format, $post_types_to_work_with)) {
  3047.                     $already_has_thumb = has_post_thumbnail($post->ID);
  3048.                     if (!$already_has_thumb) {
  3049.                         $attached_image = get_children("post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=1");
  3050.                         if ($attached_image) {
  3051.                             foreach ($attached_image as $attachment_id => $attachment) {
  3052.                                 set_post_thumbnail($post->ID, $attachment_id);
  3053.                             }
  3054.                         }
  3055.                     }
  3056.                 }
  3057.  
  3058.             }
  3059.  
  3060.         } //end function
  3061.     }
  3062.  
  3063.     add_action('the_post', 'flo_wpforce_featured');
  3064.     add_action('save_post', 'flo_wpforce_featured');
  3065.     add_action('draft_to_publish', 'flo_wpforce_featured');
  3066.     add_action('new_to_publish', 'flo_wpforce_featured');
  3067.     add_action('pending_to_publish', 'flo_wpforce_featured');
  3068.     add_action('future_to_publish', 'flo_wpforce_featured');
  3069.  
  3070.  
  3071.     function flo_dashboard_documentation()
  3072.     {
  3073.         return array("<li class='flo-docs' ><a href='"._FLO_DOCS_."' target='_blank' ><img src='" . get_template_directory_uri() . "/images/documentation_img.jpg' /></a></li>");
  3074.     }
  3075.  
  3076.     add_filter('dashboard_glance_items', 'flo_dashboard_documentation');
  3077.  
  3078.  
  3079.     /**
  3080.      * check if a link exists and don’t return a 404 message
  3081.      *
  3082.      * @params: string - the URL that must be checked
  3083.      * @return boolean
  3084.      */
  3085.     if (!function_exists('flo_maybe_image_exists')) {
  3086.         function flo_maybe_image_exists($url)
  3087.         {
  3088.             // Let's see if we have a cached version of HTTP request
  3089.             $cached_request = get_transient(md5($url));
  3090.  
  3091.  
  3092.             if (false === $cached_request) {
  3093.                 $response = wp_remote_get($url);
  3094.  
  3095.                 // save to transieant to not make requests every time
  3096.                 set_transient(md5($url), $response, 60 * 60 * 24 * 30); /* save transient for 30 days */
  3097.             } else {
  3098.                 $response = $cached_request;
  3099.  
  3100.             }
  3101.  
  3102.  
  3103.             if (is_wp_error($response))
  3104.                 //request can't performed
  3105.                 return false;
  3106.             if (wp_remote_retrieve_response_code($response) == '404') {
  3107.                 //request succeed and link not found
  3108.                 return false;
  3109.             }
  3110.  
  3111.             //request succeed and link exist
  3112.             return true;
  3113.         }
  3114.     }
  3115.  
  3116.  
  3117.     // add action for footer credits
  3118.     // only if it is not overwritten by a plugin
  3119.     if (!has_action('flo_footer_credits')) {
  3120.         add_action('flo_footer_credits', 'flo_get_footer_credits', 10);
  3121.     }
  3122.  
  3123.     /**
  3124.      * outputs the footer credits
  3125.      *
  3126.      * @params: none
  3127.      * @return ---
  3128.      */
  3129.     if (!function_exists('flo_get_footer_credits')) {
  3130.         function flo_get_footer_credits()
  3131.         {
  3132.             echo '<br/><a href="http://flothemes.com/"><img src="'.get_template_directory_uri().'/favicon.ico" /></a>';
  3133.         }
  3134.  
  3135.     }
  3136.  
  3137.     /**
  3138.      * check if a given page has sidebar
  3139.      *
  3140.      * @params: none
  3141.      * @return --- bool
  3142.      */
  3143.     if (!function_exists('flo_has_sidebar')) {
  3144.  
  3145.         function flo_has_sidebar(){
  3146.             $has_sidebar = false;
  3147.  
  3148.             global $post;
  3149.  
  3150.             if(is_singular()){
  3151.  
  3152.  
  3153.                 $layout = meta::get_meta($post -> ID, 'layout');
  3154.  
  3155.                 $post_type = get_post_type($post -> ID);
  3156.  
  3157.  
  3158.                 switch ($post_type) {
  3159.                     case 'page':
  3160.  
  3161.                         if(isset($layout['type']) ){
  3162.                             if( 'left' == $layout['type'] || 'right' == $layout['type'] ){
  3163.                                 $has_sidebar = true;
  3164.                             }
  3165.                         }else{
  3166.                             $default_page_layout = options::get_value('layout', 'page');
  3167.                             if('full' != $default_page_layout){
  3168.                                 $has_sidebar = true;
  3169.                             }
  3170.                         }
  3171.  
  3172.                         break;
  3173.  
  3174.                     case 'post':
  3175.                         if(isset($layout['type']) ){
  3176.                             if( 'left' == $layout['type'] || 'right' == $layout['type'] ){
  3177.                                 $has_sidebar = true;
  3178.                             }
  3179.                         }else{
  3180.                             $default_page_layout = options::get_value('layout', 'single');
  3181.                             if('full' != $default_page_layout){
  3182.                                 $has_sidebar = true;
  3183.                             }
  3184.                         }
  3185.                         break;
  3186.  
  3187.                     default:
  3188.  
  3189.                         break;
  3190.                 }
  3191.  
  3192.             }else{
  3193.  
  3194.                 if (is_search()) {
  3195.                     $the_layout = options::get_value('layout', 'search');
  3196.                     if('full' != $the_layout){
  3197.                         $has_sidebar = true;
  3198.                     }
  3199.                 } elseif (is_tag() || is_tax('video-tag')|| is_tax('gallery-tag')) {
  3200.                     $the_layout = options::get_value('layout', 'tag');
  3201.                     if('full' != $the_layout){
  3202.                         $has_sidebar = true;
  3203.                     }
  3204.  
  3205.                 } elseif (is_category()|| is_tax('video-category')|| is_tax('gallery-category') ) {
  3206.                     $the_layout = options::get_value('layout', 'category');
  3207.                     if('full' != $the_layout){
  3208.                         $has_sidebar = true;
  3209.                     }
  3210.  
  3211.                 } elseif (is_author()) {
  3212.                     $the_layout = options::get_value('layout', 'author');
  3213.                     if('full' != $the_layout){
  3214.                         $has_sidebar = true;
  3215.                     }
  3216.  
  3217.                 } elseif (is_home()) { /*blog page*/
  3218.                     $the_layout = options::get_value('layout', 'blog_page');
  3219.                     if('full' != $the_layout){
  3220.                         $has_sidebar = true;
  3221.                     }
  3222.  
  3223.                 }  elseif (is_archive()) {
  3224.                     $the_layout = options::get_value('layout', 'archive');
  3225.                     if('full' != $the_layout){
  3226.                         $has_sidebar = true;
  3227.                     }
  3228.  
  3229.                 } elseif (is_404()) {
  3230.                     $the_layout = options::get_value('layout', '404');
  3231.                     if('full' != $the_layout){
  3232.                         $has_sidebar = true;
  3233.                     }
  3234.  
  3235.                 }
  3236.             }
  3237.  
  3238.             return $has_sidebar;
  3239.         }
  3240.  
  3241.  
  3242.     }
  3243.  
  3244.  
  3245.  
  3246.     /*Upload image for title decoration */
  3247.     function true_include_myuploadscript() {
  3248.         // у вас в админке уже должен быть подключен jQuery, если нет - раскомментируйте следующую строку:
  3249.         // wp_enqueue_script('jquery');
  3250.         // дальше у нас идут скрипты и стили загрузчика изображений WordPress
  3251.         if ( ! did_action( 'wp_enqueue_media' ) ) {
  3252.             wp_enqueue_media();
  3253.         }
  3254.         // само собой - меняем admin.js на название своего файла
  3255.         wp_enqueue_script( 'myuploadscript', get_template_directory_uri() . '/js/admin.js', array('jquery'), null, false );
  3256.     }
  3257.  
  3258.     add_action( 'admin_enqueue_scripts', 'true_include_myuploadscript' );
  3259.  
  3260.     function true_image_uploader_field( $name, $value = '', $w = 115, $h = 90) {
  3261.         $default = get_template_directory_uri() . '/images/no_img.png';
  3262.         if( $value ) {
  3263.             $image_attributes = wp_get_attachment_image_src( $value, array($w, $h) );
  3264.             $src = $image_attributes[0];
  3265.         } else {
  3266.             $src = $default;
  3267.         }
  3268.  
  3269.         echo '
  3270.     <div>
  3271.         <img data-src="' . $default . '" src="' . $src . '" width="' . $w . 'px" height="' . $h . 'px" />
  3272.         <div>
  3273.             <input type="hidden" name="' . $name . '" id="' . $name . '" value="' . $value . '" />
  3274.             <button type="submit" class="upload_image_button button">Upload</button>
  3275.             <button type="submit" class="remove_image_button button">&times;</button>
  3276.         </div>
  3277.     </div>
  3278.     ';
  3279.     }
  3280.  
  3281.     /*
  3282.      * Добавляем метабокс
  3283.      */
  3284.     function true_meta_boxes_u() {
  3285.         $post_types = array('post', 'page');
  3286.         add_meta_box('truediv', 'Title decoration image', 'true_print_box_u', 'page', 'side');
  3287.         add_meta_box('truediv', 'Title decoration image', 'true_print_box_u', 'post', 'side');
  3288.         add_meta_box('truediv', 'Title decoration image', 'true_print_box_u', 'video', 'side');
  3289.         add_meta_box('truediv', 'Title decoration image', 'true_print_box_u', 'gallery', 'side');
  3290.     }
  3291.  
  3292.     add_action( 'admin_menu', 'true_meta_boxes_u' );
  3293.  
  3294.     /*
  3295.      * Заполняем метабокс
  3296.      */
  3297.     function true_print_box_u($post) {
  3298.         if( function_exists( 'true_image_uploader_field' ) ) {
  3299.             true_image_uploader_field( 'uploader_custom', get_post_meta($post->ID, 'uploader_custom',true) );
  3300.         }
  3301.     }
  3302.  
  3303.     /*
  3304.      * Сохраняем данные произвольного поля
  3305.      */
  3306.     function true_save_box_data_u( $post_id ) {
  3307.         if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
  3308.             return $post_id;
  3309.         if(isset($_POST['uploader_custom'])){
  3310.             update_post_meta( $post_id, 'uploader_custom', $_POST['uploader_custom']);
  3311.         }
  3312.         return $post_id;
  3313.     }
  3314.  
  3315.     add_action('save_post', 'true_save_box_data_u');
  3316.  
  3317.     function true_add_options_page_u() {
  3318.         if ( isset( $_GET['page'] ) == 'uplsettings' ) {
  3319.             if ( 'save' == isset( $_REQUEST['action'] ) ) {
  3320.                 if(isset($_REQUEST[ 'uploader_custom' ])){
  3321.                     update_option('uploader_custom', $_REQUEST[ 'uploader_custom' ]);
  3322.                     header("Location: ". site_url() ."/wp-admin/options-general.php?page=uplsettings&saved=true");
  3323.                 die;
  3324.                 }
  3325.             }
  3326.         }
  3327. //      add_submenu_page('options-general.php','Дополнительные настройки','Настройки','edit_posts', 'uplsettings', 'true_print_options_u');
  3328.     }
  3329.  
  3330.     function true_print_options_u() {
  3331.         if ( isset( $_REQUEST['saved'] ) ){
  3332.             echo '<div class="updated"><p>Saved.</p></div>';
  3333.         }
  3334.         ?><div class="wrap">
  3335.         <form method="post">
  3336.             <?php
  3337.             if( function_exists( 'true_image_uploader_field' ) ) {
  3338.                 true_image_uploader_field('uploader_custom', get_option('uploader_custom'));
  3339.             }
  3340.             ?><p class="submit">
  3341.                 <input name="save" type="submit" class="button-primary" value="Save changes" />
  3342.                 <input type="hidden" name="action" value="save" />
  3343.             </p>
  3344.         </form>
  3345.  
  3346.         </div><?php
  3347.     }
  3348.  
  3349.     add_action('admin_menu', 'true_add_options_page_u');
  3350.  
  3351.     /* START : Code for register two new metaboxes in the admin panel for all post types*/
  3352.  
  3353.  
  3354.     add_action( 'save_post','_save_post' );
  3355.     add_action( 'admin_head', '_add_admin_styles' );
  3356.     add_action( 'edit_form_top', '_add_before_field');
  3357.     add_action( 'edit_form_after_title', '_add_after_field' );
  3358. //
  3359. //  function custom_add_meta_boxes() {
  3360. //
  3361. //      var_dump($post_types);die;
  3362. //      foreach ( $post_types as $post_type ) {
  3363. //          add_meta_box( 'wps_subtitle_panel',  $post_type , '_add_subtitle_meta_box', $post_type, 'normal', 'high' );
  3364. //
  3365. //      }
  3366. //  }
  3367.     function _add_subtitle_meta_box() {
  3368.         global $post;
  3369.         if($post->post_type == 'page' || $post->post_type == 'video' || $post->post_type == 'gallery' || $post->post_type == 'post' ){
  3370.             echo '<input type="hidden" name="wps_noncename" id="wps_noncename" value="' . wp_create_nonce( 'wp-subtitle' ) . '" />';
  3371.             echo '<input type="text" id="wpsubtitle" name="wps_subtitle" value="" style="width:99%;" />';
  3372.             //  echo apply_filters( 'wps_subtitle_field_description', '', $post );
  3373.         }
  3374.     }
  3375.     function _add_before_field() {
  3376.         global $post;
  3377.         if($post->post_type == 'page' || $post->post_type == 'video' || $post->post_type == 'gallery' || $post->post_type == 'post'){
  3378.             echo '<div id="subtitlediv" class="top" style="margin-right: 300px">';
  3379.             echo '<div id="subtitlewrap">';
  3380.             echo '<input type="text" id="wpsubtitle" name="wps_before" value="'.get_post_meta($post->ID,'wps_before',true).'" autocomplete="off" />';
  3381.             echo '<div class="subtitledescription">'. __('This text is before the title. ( Optional field )','flotheme').'</div>';
  3382.             echo '</div>';
  3383.             echo '</div>';
  3384.             echo '<div class="clear"></div>';
  3385.         }
  3386.     }
  3387.     function _add_after_field() {
  3388.         global $post;
  3389.         if($post->post_type == 'page' || $post->post_type == 'video' || $post->post_type == 'gallery' || $post->post_type == 'post' ){
  3390.             echo '<div id="subtitlediv" class="top with_bottom_margin" style="line-height: 32px;">';
  3391.             echo '<div id="subtitlewrap">';
  3392.             echo '<input type="text" id="wpsubtitle" name="wps_after" value="'.get_post_meta($post->ID,'wps_after',true).'" autocomplete="off" />';
  3393.             echo '<div class="subtitledescription">'. __('This text is after the title. ( Optional field )','flotheme') .'</div>';
  3394.             echo '</div>';
  3395.             echo '</div>';
  3396.             echo '<div class="clear"></div>';
  3397.         }
  3398.     }
  3399.  
  3400.     function _save_post( $post_id ) {
  3401.         if ( isset( $_POST['wps_before'] ) ) {
  3402.             update_post_meta( $post_id, 'wps_before', $_POST['wps_before'] );
  3403.         }
  3404.         if ( isset( $_POST['wps_after'] ) ) {
  3405.             update_post_meta( $post_id, 'wps_after', $_POST['wps_after'] );
  3406.         }
  3407.     }
  3408.  
  3409.     function _add_admin_styles() {
  3410.         ?>
  3411.         <style>
  3412.             #subtitlediv.top {
  3413.                 top:5px;
  3414.                 position: relative;
  3415.             }
  3416.             #subtitlediv.top #subtitlewrap {
  3417.                 border: 0;
  3418.                 padding: 0;
  3419.             }
  3420.             .with_bottom_margin{
  3421.                 bottom: 5px;
  3422.             }
  3423.             #subtitlediv.top #wpsubtitle {
  3424.                 background-color: #fff;
  3425.                 font-size: 1.4em;
  3426.                 line-height: 1em;
  3427.                 margin: 0;
  3428.                 outline: 0;
  3429.                 padding: 3px 8px;
  3430.                 width: 50%;
  3431.                 height: 1.7em;
  3432.                 float:  left;
  3433.             }
  3434.             #subtitlediv.top #wpsubtitle::-webkit-input-placeholder { padding-top: 3px; }
  3435.             #subtitlediv.top #wpsubtitle:-moz-placeholder { padding-top: 3px; }
  3436.             #subtitlediv.top #wpsubtitle::-moz-placeholder { padding-top: 3px; }
  3437.             #subtitlediv.top #wpsubtitle:-ms-input-placeholder { padding-top: 3px; }
  3438.             #subtitlediv.top .subtitledescription {
  3439.                 margin: 5px 10px 0 10px;
  3440.                 float:  left;
  3441.             }
  3442.         </style>
  3443.     <?php
  3444.     }
  3445.     /* END : Code for register two new metaboxes in the admin panel for all post types*/
  3446.  
  3447.     /* START :  This is the function for show (if exist )custom titles by Sliva */
  3448.  
  3449.     function flo_title($post_id) {
  3450.         $new_title = '';
  3451.         //if (in_the_loop()){
  3452.             $before = get_post_meta($post_id,'wps_before',true);
  3453.             $title = get_the_title($post_id);
  3454.             $after = get_post_meta($post_id,'wps_after',true);
  3455.             if($before){
  3456.                 $new_title .= '<span class="post-title-before">'.$before.'</span>';
  3457.             }
  3458.             $new_title .= $title;
  3459.             if($after){
  3460.                 $new_title .= '<span class="post-title-after">'.$after.'</span>';
  3461.             }
  3462.         //}
  3463.         return $new_title;
  3464.     }
  3465.     /* END : This is the function for show (if exist )custom titles by Sliva */
  3466.  
  3467.     /**
  3468.      * params:
  3469.      * int - $post_id - the ID of the post for which we wsant to retrieve the categories
  3470.      * bool - $only_first_cat - return only first categ or all of them
  3471.      * string - $taxonomy - the name of the wanted taxonomy, 'category' by default , other values may be 'post_tag' for standard posts or something ele for custom posts
  3472.      * string - $margin_elem_start  -  it shuld be a html element that will show up before each category
  3473.      * string - $margin_elem_end  -  it shuld be a html element that will show up after each category
  3474.      * string - $delimiter  -  the string between the taxonomies
  3475.      * string - $a_class  -  the class that is used for the anchor that surrounds the taxonomies
  3476.      * string - $no_link - use or not links around the taxonomies
  3477.      */
  3478.     if ( ! function_exists( 'cosmo_get_post_taxonomies' ) ) {
  3479.         function cosmo_get_post_taxonomies($post_id, $only_first_cat = false, $taxonomy = 'category', $margin_elem_start = '', $margin_elem_end = '', $delimiter = ', ',  $a_class = '', $no_link = false){
  3480.  
  3481.  
  3482.  
  3483.             $cat = '';
  3484.             $categories = wp_get_post_terms($post_id, $taxonomy );
  3485.             if (!empty($categories)) {
  3486.  
  3487.                 $ind = 1;
  3488.                 foreach ($categories as $category) {
  3489.                     $categ = get_term( $category->term_id, $taxonomy);
  3490.                     if($ind != count($categories) && !$only_first_cat){
  3491.                         $cat_delimiter = $delimiter;
  3492.                     }else{
  3493.                         $cat_delimiter = '';
  3494.                     }
  3495.  
  3496.                     if($no_link){
  3497.                         $cat .= $margin_elem_start . $categ->name . $cat_delimiter  . $margin_elem_end;
  3498.                     }else{
  3499.                         $cat .= $margin_elem_start . '<a href="' . get_category_link($category) . '" class="'.$a_class.'">' . $categ->name . $cat_delimiter . '</a>' . $margin_elem_end;
  3500.                     }
  3501.  
  3502.  
  3503.                     if($only_first_cat){
  3504.                         break;
  3505.                     }
  3506.  
  3507.  
  3508.                     $ind ++;
  3509.                 }
  3510.  
  3511.  
  3512.                 //$cat = __('in','flotheme').' '.   $cat;
  3513.             }
  3514.  
  3515.             return $cat .' ' ;
  3516.         }
  3517.     }
  3518.  
  3519.     if ( ! function_exists( 'flo_get_mosaic_settings_box' ) ) {
  3520.         function flo_get_mosaic_settings_box($number_blocks,$block_class){
  3521.  
  3522.             $mosaic_type = $block_class; // we will use the unique block class as mosaic_type name
  3523.  
  3524.             // check if the post ID is set in the URL (that eans we are editing a Mosaic post)
  3525.             if(isset($_GET['post'])){
  3526.                 $post_id = $_GET['post'];
  3527.  
  3528.  
  3529.                 if ( metadata_exists( 'post', $post_id, '_flomosaic' ) ) {
  3530.  
  3531.                     $_flomosaic = get_post_meta( $post_id, '_flomosaic', true );
  3532.  
  3533.                     if(isset($_flomosaic[$block_class] )){
  3534.                         $mosaic_data = $_flomosaic[$block_class]; // the array containing the data for the whole mosaic block
  3535.                     }else{
  3536.                         $mosaic_data = array();
  3537.                     }
  3538.  
  3539.                 }
  3540.             }else{
  3541.                 $post_id = 0;
  3542.                 $mosaic_data = array();
  3543.             }
  3544.  
  3545.             ob_start();
  3546.             ob_clean();
  3547.     ?>
  3548.             <div class="flo-mosaic-blocks <?php echo $block_class; ?>">
  3549.     <?php
  3550.             for($i=0; $i<$number_blocks; $i++){
  3551.  
  3552.                 if(isset($mosaic_data[$i])){
  3553.                     $data = $mosaic_data[$i];
  3554.                 }else{
  3555.                     $data = array();
  3556.                 }
  3557.  
  3558.                 if(isset($data['image_id']) && is_numeric($data['image_id'])){
  3559.                     $img_src_obj = wp_get_attachment_image_src( $data['image_id'] , 'medium' );
  3560.                     $bg_img = ' background-image: url('. $img_src_obj[0]  .'); ' ;
  3561.                 }else{
  3562.                     $bg_img = '';
  3563.                 }
  3564.  
  3565.     ?>
  3566.                 <div class="mosaic_block block_<?php echo $i; ?>" id="mosaic_<?php echo $block_class . '_' . $i; ?>" style="<?php echo $bg_img; ?>">
  3567.                     <div class="flo-mosaic-actions">
  3568.                         <span class=" dashicons dashicons-edit edit-flo-mosaic " title="<?php _e('Click to edit the block settings','flotheme'); ?>"></span>
  3569.                         <span class=" dashicons dashicons-upload upload-flo-mosaic " title="<?php _e('Click to upload image','flotheme'); ?>"></span>
  3570.                         <span class=" dashicons dashicons-no no-flo-mosaic " title="<?php _e('Click to delete the uploaded image','flotheme'); ?>"></span>
  3571.                     </div>
  3572.                     <?php
  3573.                         echo flo_get_mosaic_block_meta($mosaic_type, $data, $post_id , $i) ;
  3574.                     ?>
  3575.                 </div>
  3576.     <?php
  3577.             }
  3578.     ?>
  3579.             </div>
  3580.     <?php
  3581.             $result = ob_get_clean();
  3582.  
  3583.             return $result;
  3584.         }
  3585.     }
  3586.  
  3587.  
  3588.     /**
  3589.      * Helper method for retrieving the slider image metadata.
  3590.      *
  3591.      * @param int $mosaic_type
  3592.      * @param array $data  Array of data for the item.
  3593.      * @param int $post_id The current post ID.
  3594.      * @return string      The HTML output for the slider item.
  3595.      */
  3596.     function flo_get_mosaic_block_meta($mosaic_type, $data, $post_id , $key) {
  3597.  
  3598.         ob_start();
  3599.         ?>
  3600.         <div id="flomosaic-meta-<?php echo $mosaic_type; ?>" class="flomosaic-meta-container" style="display:none;">
  3601.             <div class="media-modal wp-core-ui">
  3602.                 <a class="media-modal-close" href="#"><span class="media-modal-icon"></span></a>
  3603.                 <div class="media-modal-content">
  3604.                     <div class="media-frame flomosaic-media-frame wp-core-ui hide-menu hide-router flomosaic-meta-wrap">
  3605.                         <div class="media-frame-title">
  3606.                             <h1><?php _e( 'Edit Metadata', 'flotheme' ); ?></h1>
  3607.                         </div>
  3608.                         <div class="media-frame-content">
  3609.                             <div class="attachments-browser">
  3610.                                 <div class="flomosaic-meta attachments">
  3611.  
  3612.                                     <input id="flomosaic-id-<?php echo $mosaic_type; ?>" class="flomosaic-id" type="hidden" name="_flomosaic[<?php echo $mosaic_type; ?>][<?php echo $key; ?>][image_id]" value="<?php echo ( ! empty( $data['image_id'] ) ? esc_attr( $data['image_id'] ) : '' ); ?>" />
  3613.  
  3614.                                     <table id="flomosaic-meta-table-<?php echo $mosaic_type; ?>" class="form-table flomosaic-meta-table" >
  3615.                                         <tbody>
  3616.                                             <tr id="flomosaic-title-box-<?php echo $mosaic_type; ?>" valign="middle">
  3617.                                                 <th scope="row"><label for="flomosaic-title-<?php echo $mosaic_type; ?>"><?php _e( 'Image Title', 'flotheme' ); ?></label></th>
  3618.                                                 <td>
  3619.                                                     <input id="flomosaic-title-<?php echo $mosaic_type; ?>" class="flomosaic-title" type="text" name="_flomosaic[<?php echo $mosaic_type; ?>][<?php echo $key; ?>][title]" value="<?php echo ( ! empty( $data['title'] ) ? esc_attr( $data['title'] ) : '' ); ?>" />
  3620.                                                     <p class="description"><?php _e( 'Sets the image title attribute for the image.', 'flotheme' ); ?></p>
  3621.                                                 </td>
  3622.                                             </tr>
  3623.  
  3624.                                             <tr id="flomosaic-title-box-<?php echo $mosaic_type; ?>" valign="middle">
  3625.                                                 <th scope="row"><label for="flomosaic-title-<?php echo $mosaic_type; ?>"><?php _e( 'Image Description', 'flotheme' ); ?></label></th>
  3626.                                                 <td>
  3627.                                                     <input id="flomosaic-description-<?php echo $mosaic_type; ?>" class="flomosaic-description" type="text" name="_flomosaic[<?php echo $mosaic_type; ?>][<?php echo $key; ?>][description]" value="<?php echo ( ! empty( $data['description'] ) ? esc_attr( $data['description'] ) : '' ); ?>" />
  3628.                                                     <p class="description"><?php _e( 'Add here the image description.', 'flotheme' ); ?></p>
  3629.                                                 </td>
  3630.                                             </tr>
  3631.  
  3632.                                             <tr id="flomosaic-link_url-box-<?php echo $mosaic_type; ?>" class="flomosaic-link-cell" valign="middle">
  3633.                                                 <th scope="row"><label for="flomosaic-link-<?php echo $mosaic_type; ?>"><?php _e( 'Image & Tile URL', 'flotheme' ); ?></label></th>
  3634.                                                 <td>
  3635.                                                     <input id="flomosaic-link_url-<?php echo $mosaic_type; ?>" class="flomosaic-link_url" type="text" name="_flomosaic[<?php echo $mosaic_type; ?>][<?php echo $key; ?>][link_url]" value="<?php echo ( ! empty( $data['link_url'] ) ? esc_url( $data['link_url'] ) : '' ); ?>" />
  3636.                                                 </td>
  3637.                                             </tr>
  3638.  
  3639.                                             <!-- Text color option -->
  3640.                                             <tr id="flomosaic-text-color-box-<?php echo $mosaic_type; ?>"  valign="middle">
  3641.                                                 <th scope="row"><label for="flomosaic-text-color-<?php echo $mosaic_type; ?>"><?php _e( 'Text Color', 'flotheme' ); ?></label></th>
  3642.                                                 <td>
  3643.                                                     <input type="text" name="_flomosaic[<?php echo $mosaic_type; ?>][<?php echo $key; ?>][text_color]" value="<?php echo ( ! empty( $data['text_color'] ) ? esc_attr( $data['text_color'] ) : '' ); ?>" class="generic-meta-color-picker generic-record settings-color-field flo-slideshow-color-picker " />
  3644.                                                     <p class="description"><?php _e( 'Title and description text color', 'flotheme' ); ?></p>
  3645.                                                 </td>
  3646.                                             </tr>
  3647.  
  3648.                                             <!-- Background color option -->
  3649.                                             <tr id="flomosaic-bg-color-box-<?php echo $mosaic_type; ?>"  valign="middle">
  3650.                                                 <th scope="row"><label for="flomosaic-bg-color-<?php echo $mosaic_type; ?>"><?php _e( 'Background Color', 'flotheme' ); ?></label></th>
  3651.                                                 <td>
  3652.                                                     <input type="text" name="_flomosaic[<?php echo $mosaic_type; ?>][<?php echo $key; ?>][bg_color]" value="<?php echo ( ! empty( $data['bg_color'] ) ? esc_attr( $data['bg_color'] ) : '' ); ?>" class="generic-meta-color-picker generic-record settings-color-field flo-slideshow-color-picker " />
  3653.                                                     <p class="description"><?php _e( 'Background color. Will be visible only if no image is uploaded to this block.', 'flotheme' ); ?></p>
  3654.                                                 </td>
  3655.                                             </tr>
  3656.  
  3657.                                             <?php do_action( 'flomosaic_after_image_meta_settings', $mosaic_type, $data, $post_id, $key ); ?>
  3658.                                         </tbody>
  3659.                                     </table>
  3660.                                     <?php do_action( 'flomosaic_after_image_meta_table', $mosaic_type, $data, $post_id, $key ); ?>
  3661.                                 </div><!-- end .flomosaic-meta -->
  3662.                                 <div class="media-sidebar">
  3663.                                     <div class="flomosaic-meta-sidebar">
  3664.                                         <h3><?php _e( 'Helpful Tips', 'flotheme' ); ?></h3>
  3665.                                         <strong><?php _e( 'Saving and Exiting', 'flotheme' ); ?></strong>
  3666.                                         <p class="no-margin"><?php _e( 'To save the added data, close this modal window and click on Update post button. You can close this window by either clicking on the "X" above or hitting the <code>esc</code> key on your keyboard.', 'flotheme' ); ?></p>
  3667.                                     </div><!-- end .flomosaic-meta-sidebar -->
  3668.                                 </div><!-- end .media-sidebar -->
  3669.                             </div><!-- end .attachments-browser -->
  3670.                         </div><!-- end .media-frame-content -->
  3671.  
  3672.  
  3673.  
  3674.                     </div><!-- end .media-frame -->
  3675.                 </div><!-- end .media-modal-content -->
  3676.             </div><!-- end .media-modal -->
  3677.             <div class="media-modal-backdrop"></div>
  3678.         </div>
  3679.         <?php
  3680.  
  3681.         return ob_get_clean();
  3682.  
  3683.     }
  3684.  
  3685.     add_action('save_post', 'flo_save_mosaic_settings');
  3686.  
  3687.     // save attached images meta data
  3688.     function flo_save_mosaic_settings($post_id){
  3689.         //// GLOBAL $POST
  3690.         global $post;
  3691.  
  3692.  
  3693.         //  Slideshow images Data
  3694.         if(isset($_POST['_flomosaic'] )){
  3695.             // Sanitize user input.
  3696.             $mosaic_data = $_POST['_flomosaic'];
  3697.             update_post_meta( $post_id, '_flomosaic', $mosaic_data );
  3698.  
  3699.         }
  3700.     }
  3701.     include('mosaic/mosaic.shortcode.php');
  3702.     if (class_exists('Flo_Mosaic')){
  3703.         add_shortcode( 'flo_mosaic', 'mosaic__code' ); 
  3704.     }else{
  3705.         add_shortcode( 'flo_mosaic', 'mosaic_code' );
  3706.     }
  3707.  
  3708.  
  3709.     /*
  3710.     process the ajax request that sends the distance between header 1 menu elements
  3711.     Updates a option with the received data
  3712.     */
  3713. //  function flo_header_1_menu_items_margin(){
  3714. //      if(isset($_POST['header_1_menu_spacing_nonce']) && isset($_POST['menu_items_margin_right']) && strlen($_POST['menu_items_margin_right']) ){
  3715. //            // check to see if the submitted nonce matches with the
  3716. //            // generated nonce we created earlier
  3717. //            if ( ! wp_verify_nonce( $_POST['header_1_menu_spacing_nonce'], 'header_1_menu_spacing_nonce_val' ) ){
  3718. //                die ( 'Busted! Wrong Nonce');
  3719. //            }
  3720. //
  3721. //            // update the option with the value we got
  3722. //            update_option( 'header_1_menu_spacing', ( $_POST['menu_items_margin_right'] ) );
  3723. //
  3724. //            echo get_option( 'header_1_menu_spacing', true);
  3725. //
  3726. //        }
  3727. //
  3728. //        exit();
  3729. //  }
  3730.  
  3731.     /*
  3732.     process the ajax request that sends the distance between header 4 menu elements
  3733.     Updates the options with the received data
  3734.     */
  3735. //  function flo_header_4_menu_items_margin(){
  3736. //      if(isset($_POST['header_4_menu_spacing_nonce']) && isset($_POST['left_spacing']) && strlen($_POST['left_spacing']) && isset($_POST['right_spacing']) && strlen($_POST['right_spacing']) ){
  3737. //            // check to see if the submitted nonce matches with the
  3738. //            // generated nonce we created earlier
  3739. //            if ( ! wp_verify_nonce( $_POST['header_4_menu_spacing_nonce'], 'header_4_menu_spacing_nonce_val' ) ){
  3740. //                die ( 'Busted! Wrong Nonce');
  3741. //            }
  3742. //
  3743. //            // update the options with the value we recived
  3744. //            update_option( 'header_4_menu_left_spacing', ( $_POST['left_spacing'] ) );
  3745. //            update_option( 'header_4_menu_right_spacing', ( $_POST['right_spacing'] ) );
  3746. //
  3747. //            echo get_option( 'header_4_menu_left_spacing', true) .' & '.get_option( 'header_4_menu_right_spacing', true);
  3748. //
  3749. //        }
  3750. //
  3751. //        exit();
  3752. //  }
  3753.  
  3754.     function floTestimonials_insert_dialog_content(){
  3755.    
  3756.         /* latest Galleries template settings  */
  3757.         $testimonial_categories = get_terms('testimonial-category', array(
  3758.                 'hide_empty' => 0
  3759.         ));
  3760.  
  3761.         if(is_array($testimonial_categories)  && sizeof($testimonial_categories)){
  3762.             $gallery_category_options = array();
  3763.             //deb::e($video_categories);
  3764.             foreach ($testimonial_categories as $type) {
  3765.                 $gallery_category_options[$type->slug] = $type->name;
  3766.             }  
  3767.     ?>
  3768.             <div>
  3769.                 <label><?php _e('Setlect testimonials categories:','flotheme'); ?></label> <br/>
  3770.                 <select  name="shcode-testim-categ[]" multiple="multiple" class="generic-record shcode-testim-categ" style="width: 220px; height: 90px;"  >
  3771.     <?php
  3772.                     foreach ($gallery_category_options as $key => $value) {
  3773.     ?>
  3774.                         <option value="<?php echo $key; ?>"><?php echo $value; ?></option>
  3775.     <?php              
  3776.                     }
  3777.     ?>         
  3778.                 </select>
  3779.             </div>
  3780.  
  3781.     <?php      
  3782.         }
  3783.     ?> 
  3784.             <div>
  3785.                 <label><?php _e('Number of testimonials to show:','flotheme'); ?></label> <br/>
  3786.                 <input type="text" class="digit tesimonial-nr-posts" name="tesimonial-nr-posts" value="" >
  3787.             </div>
  3788.     <?php  
  3789.  
  3790.         exit();
  3791.     }
  3792.  
  3793.     if (!function_exists('flo_testimonials')) {
  3794.         function flo_testimonials( $atts, $content = null ) {
  3795.             extract(shortcode_atts(array(
  3796.                 'categories'         => '',
  3797.                 'nr_posts'   => get_option('posts_per_page')
  3798.             ), $atts));
  3799.        
  3800.             if(!is_numeric($nr_posts)){
  3801.                 $nr_posts = get_option('posts_per_page');
  3802.             }
  3803.             $args = array('post_type' => 'testimonial',
  3804.                     'posts_per_page' => $nr_posts
  3805.                 );
  3806.             if(strlen(trim($categories))){
  3807.                 $categories = explode(',', $categories);
  3808.  
  3809.                 $args['tax_query'] = array(
  3810.                         array(
  3811.                                 'taxonomy' => 'testimonial-category',
  3812.                                 'field'    => 'slug',
  3813.                                 'terms'    => $categories,
  3814.                             )
  3815.                     );
  3816.             }
  3817.  
  3818.             $testimonials = new WP_Query( $args );
  3819.  
  3820.             $result = '';
  3821.  
  3822.             if ( $testimonials->have_posts() ) {
  3823.                 $result .= '<div class="testimonials-container ">';
  3824.                     $result .= '<div class="rsDefault  arrow-glyph9">';
  3825.                         while ( $testimonials->have_posts() ) {
  3826.                             $testimonials->the_post();
  3827.                            
  3828.                             $tesminonials_info =  get_post_meta( $testimonials->post->ID, 'info', true );
  3829.  
  3830.                             $result .= '<div class="rsContent">';
  3831.                                 $result .= '<h3 class="testimonial-title post-title">'.get_the_title( $testimonials->post->ID).'</h3>';
  3832.                                 $result .= '<div class="testimonial-content">'.get_the_content( $testimonials->post->ID).'</div>';
  3833.                                 $result .= '<div class="testimonial-delimiter"></div>';
  3834.                                 if(isset($tesminonials_info['author'])){
  3835.                                     $result .= '<span class="testimonial-author">'.$tesminonials_info['author'].'</span>';
  3836.  
  3837.                                 }
  3838.                                 if(isset($tesminonials_info['title'])){
  3839.                                     $result .= '<span class="testimonial-author-title">'.$tesminonials_info['title'].'</span>';
  3840.                                    
  3841.                                 }
  3842.                             $result .= '</div>';
  3843.  
  3844.                            
  3845.                            
  3846.                         }
  3847.                         wp_reset_query();
  3848.                     $result .= '</div>';
  3849.                 $result .= '</div>';
  3850.            
  3851.             }else{
  3852.                 $result .= __('No testimonials were found using the given criteria.','flotheme');              
  3853.             }
  3854.  
  3855.             return $result;
  3856.         }
  3857.        
  3858.     }
  3859.    
  3860.     add_shortcode('flo_testimonials', 'flo_testimonials');
  3861.  
  3862.     /**
  3863.      * Check if the current post is a Video post and if Lightbox video is enabled
  3864.      * we return the link to video instead of the permalink
  3865.      *
  3866.      *
  3867.      * @return string the class that will be added to the article
  3868.      */
  3869.     if ( ! function_exists( 'maybeGetVideoLightboxlink' ) ) {
  3870.         function maybeGetVideoLightboxlink($post){
  3871.             if( options::logic( 'content_settings' , 'vide_grid_lightbox' ) && get_post_type( $post ) == 'video'){
  3872.  
  3873.                 $embed_meta = get_post_meta($post->ID, 'cosmoembed', true);
  3874.                
  3875.                 if ( isset($embed_meta['url']) && filter_var($embed_meta['url'], FILTER_VALIDATE_URL) !== false ) {
  3876.                     return $embed_meta['url'];
  3877.                    
  3878.                 }else{
  3879.                     return get_permalink($post->ID);
  3880.                 }
  3881.             }else{
  3882.                 return get_permalink($post->ID);
  3883.             }
  3884.         }
  3885.     }
  3886.  
  3887.     /**
  3888.      * Check if the current post is a Video post and if Lightbox video is enabled
  3889.      * we return a specific class
  3890.      *
  3891.      *
  3892.      * @return string the class that will be added to the article
  3893.      */
  3894.     if ( ! function_exists( 'maybeGetVideoLightboxClass' ) ) {
  3895.         function maybeGetVideoLightboxClass($post){
  3896.             if(options::logic( 'content_settings' , 'vide_grid_lightbox' ) && get_post_type( $post ) == 'video'){
  3897.  
  3898.                 $embed_meta = get_post_meta($post->ID, 'cosmoembed', true);
  3899.                
  3900.                 if ( isset($embed_meta['url']) && filter_var($embed_meta['url'], FILTER_VALIDATE_URL) !== false ) {
  3901.                     return 'flo-fancybox-media';
  3902.                    
  3903.                 }else{
  3904.                     return ''; 
  3905.                 }
  3906.             }else{
  3907.                 return '';
  3908.             }
  3909.         }
  3910.     }
  3911.  
  3912.     /**
  3913.      * Check if we are on a page and if the page has a slider assigned.
  3914.      * If all that is trye, then return an array with the selected slider options
  3915.      *
  3916.      *
  3917.      * @return array containing the selected slider options
  3918.      */
  3919.     if ( ! function_exists( 'flo_get_page_slyder_info' ) ) {
  3920.         function flo_get_page_slyder_info(){
  3921.             global $post;
  3922.  
  3923.             $response = array('selected_slider_id' => 0,
  3924.                             'slideshow_type' => 'content_width',
  3925.                             'menu_position' => 'crowd-header-bottom',
  3926.                             'logo_position' => 'middle-center'
  3927.                             );
  3928.             if(is_page()){
  3929.                 $slideshow_settings = meta::get_meta($post->ID, 'slideshowSettings');
  3930.                 if (isset($slideshow_settings['slideshow_select']) && $slideshow_settings['slideshow_select'] != 0) {
  3931.                     $response['selected_slider_id'] = $slideshow_settings['slideshow_select'];
  3932.  
  3933.                     if(isset($slideshow_settings['slideshow_type'])){
  3934.                         $response['slideshow_type'] = $slideshow_settings['slideshow_type'];
  3935.                     }
  3936.                     if(isset($slideshow_settings['menu_position'])){
  3937.                         $response['menu_position'] = $slideshow_settings['menu_position'];
  3938.                     }
  3939.                     if(isset($slideshow_settings['logo_position'])){
  3940.                         $response['logo_position'] = $slideshow_settings['logo_position'];
  3941.                     }
  3942.                 }
  3943.                
  3944.             }
  3945.  
  3946.             return $response;
  3947.         }
  3948.     }
  3949.  
  3950.     /**
  3951.      * Check if we are on a pge and it has one of the full width slideshowa
  3952.      *
  3953.      * @return bool
  3954.      */
  3955.     if ( ! function_exists( 'is_flo_full_slider_width_page' ) ) {
  3956.         function is_flo_full_slider_width_page(){
  3957.             $page_slyder_info = flo_get_page_slyder_info();
  3958.             global $post;
  3959.             // if the we have a slideshow on the current page and if it is a full width slideshow
  3960.             if($page_slyder_info['selected_slider_id'] > 0 && $page_slyder_info['slideshow_type'] != 'content_width' && (
  3961.                     strpos(get_page_template_slug( $post->ID), 'template-contact-form') == false &&
  3962.                     strpos(get_page_template_slug( $post->ID), 'template-gallery') == false
  3963.                 )){
  3964.                 return true;
  3965.             }
  3966.  
  3967.             return false;
  3968.         }
  3969.     }
  3970.  
  3971.    
  3972.  
  3973.     function flo_get_body_slideshow_classes($classes){
  3974.         $page_slyder_info = flo_get_page_slyder_info();
  3975.  
  3976.         if($page_slyder_info['selected_slider_id'] > 0 && $page_slyder_info['slideshow_type'] != 'content_width'&& (
  3977.                 strpos(get_page_template_slug( get_the_ID()), 'template-contact-form') == false &&
  3978.                 strpos(get_page_template_slug( get_the_ID()), 'template-gallery') == false
  3979.             )){
  3980.             // the following 2 classes are necessary for the paralax effect
  3981.             $classes[] = 'crowd-layout';
  3982.             $classes[] = 'crowd-mobile-menu';
  3983.  
  3984.             // menu position class
  3985.             $classes[] = $page_slyder_info['menu_position'];       
  3986.  
  3987.             // full screen OR full width slideshow
  3988.            
  3989.             if($page_slyder_info['slideshow_type'] == 'full_screen'){
  3990.                 $classes[] = 'crowd-full-screen';
  3991.             }else{
  3992.                 $classes[] = 'crowd-full-width';
  3993.             }
  3994.  
  3995.             // for menu w/o logo in the same row
  3996.             if($page_slyder_info['logo_position'] != 'left' && $page_slyder_info['logo_position'] != 'right' && $page_slyder_info['logo_position'] != 'logo-inside-menu'){
  3997.                 $classes[] = 'crowd-simple-menu';
  3998.             }
  3999.  
  4000.            
  4001.             // necessary when the menu has the description
  4002.             if(options::logic('header_settings', 'enable_menu_description')){
  4003.                 $classes[] = 'crowd-double-menu';
  4004.             }
  4005.  
  4006.             if(options::get_value('sliders', 'enable_paralax') == 'no'){
  4007.                 $classes[] = 'flo-no-paralax';
  4008.             }
  4009.  
  4010.  
  4011.         }
  4012.  
  4013.  
  4014.         return $classes;
  4015.     }
  4016.     add_filter( 'body_class', 'flo_get_body_slideshow_classes' );
  4017.  
  4018.  
  4019.     // check if it is necessary to load a full width slideshow
  4020.     // this is called usually in the header
  4021.     function flo_maybe_get_full_width_slideshow(){
  4022.         $page_slyder_info = flo_get_page_slyder_info();
  4023.  
  4024.         // if the we have a slideshow on the current page and if it is a full width slideshow
  4025.         if($page_slyder_info['selected_slider_id'] > 0 && $page_slyder_info['slideshow_type'] != 'content_width'){
  4026.             flo_get_slideshow($page_slyder_info['selected_slider_id']);
  4027.         }
  4028.     }
  4029.  
  4030.     if(!function_exists('flo_render_gallery_container')){
  4031.         function flo_render_gallery_container($gallery_type){
  4032.             switch ($gallery_type) {
  4033.                 case 'full_width_content':
  4034.                     # code...
  4035.  
  4036.                     return array(
  4037.                             'start' => '<div class="gallery horizontal-long">',
  4038.                             'end' => '</div>'
  4039.                         );
  4040.                     break;
  4041.                 case 'grid':
  4042.                     if(isset($settings['gallery_grid_gutter'])){
  4043.                         $grid_gutter = $settings['gallery_grid_gutter'];
  4044.                     }else{
  4045.                         $grid_gutter = options::get_value('sliders', 'gallery_grid_gutter');
  4046.                     }
  4047.  
  4048.  
  4049.                     return array(
  4050.                             'start' => '<section class="grid-view grid-masonry '.$grid_gutter.'" >
  4051.                                             <div class="row js-masonry ">',
  4052.                             'end' => '      </div>
  4053.                                         </section>'
  4054.                         );
  4055.                     break; 
  4056.  
  4057.                 default:
  4058.                     //simple_slider
  4059.                     $arrows_type = options::get_value('sliders','slider_arrows_type', true);
  4060.                     return array(
  4061.                             'start' => '<section id="gallery-slider" class="gallery-slider simple-slider '.$arrows_type.'">
  4062.                                             <div class="royalSlider rsDefaultInv">',
  4063.                             'end' => '      </div>
  4064.                                         </section>'
  4065.                         );
  4066.  
  4067.                     break;
  4068.             }
  4069.         }
  4070.     }
  4071.  
  4072.     if(!function_exists('flo_pp_gallery_types')){
  4073.         function flo_pp_gallery_types(){
  4074.             $img_path = get_template_directory_uri() . '/lib/images/pattern/';
  4075.             $gallery_types = array(
  4076.                 //'full_with_content' => $img_path.'slider_2.jpg',
  4077.                 'visible_arrow' => $img_path.'slider_1.jpg',
  4078.                 'grid' => $img_path.'slider_3.jpg'
  4079.             );
  4080.  
  4081.             return $gallery_types;
  4082.         }
  4083.     }
  4084.  
  4085.     /**
  4086.      *
  4087.      * Render the gallery slider
  4088.      *
  4089.      */
  4090.    
  4091.     if(!function_exists('flo_render_gallery_images')){
  4092.         function flo_render_gallery_images($gallery_type, $images, $before_images = '', $after_images = '', $number_columns){
  4093.  
  4094.             $img_id_array = array_filter(explode(',', $images));
  4095.  
  4096.  
  4097.             switch ($gallery_type) {
  4098.                 case 'grid':
  4099.  
  4100.  
  4101.                     if ($number_columns == 2) {
  4102.                         $block_width = ' small-12 medium-6 large-6 ';
  4103.                     } elseif ($number_columns == 3) {
  4104.                         $block_width = ' small-12 medium-6 large-4 ';
  4105.                     } elseif ($number_columns == 4) {
  4106.                         $block_width = ' small-12 medium-6 large-3 ';
  4107.                     }elseif ($number_columns == 6) {
  4108.                         $block_width = ' small-12 medium-6 large-2 ';
  4109.                     }
  4110.                    
  4111.                     echo $before_images;
  4112.                     if ( count($img_id_array) > 0) {
  4113.  
  4114.                         $rand_id = mt_rand(1, 1000);
  4115.  
  4116.                         foreach ($img_id_array as $key => $value) {
  4117.                             $img_url1 = wp_get_attachment_url($value, 'full'); //get img URL
  4118.  
  4119.                             $width = options::get_value('imagesizes', 'single_gallery_grid');  
  4120.                             if ( ! ( intval($width) > 10 ) ) $width = 400;
  4121.  
  4122.                             $img_url = aq_resize($img_url1, $width, 9999, false, false);
  4123.  
  4124.                             $attachment = get_post($value);
  4125.                             if (isset($attachment->post_excerpt) && strlen($attachment->post_excerpt)) {
  4126.                                 $image_caption = $attachment->post_excerpt;
  4127.                             } else {
  4128.                                 $image_caption = '';
  4129.                             }
  4130.  
  4131.                             if (isset($attachment->post_content) && strlen($attachment->post_content)) {
  4132.                                 $image_description = $attachment->post_content;
  4133.                             } else {
  4134.                                 $image_description = '';
  4135.                             }
  4136.  
  4137.                             $alt = get_post_meta($value , '_wp_attachment_image_alt', true);
  4138.                     ?>
  4139.                             <article <?php echo post_class('columns post-preview title-over '.$block_width)?> >
  4140.                                 <div class="post-preview-inner">
  4141.                                     <a class="post-preview-image" href="<?php echo $img_url1; ?>" data-fancybox-group="prettyPhoto['<?php echo $rand_id; ?>']" title="<?php echo esc_attr($image_caption) .' '. esc_attr($image_description); ?> " >
  4142.                                         <img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-original="<?php echo $img_url[0]; ?>" width="<?php echo $img_url[1];?>" height="<?php echo $img_url[2];?>" class="attachment-post-thumbnail wp-post-image"  alt="<?php echo esc_attr($alt); ?>"/>
  4143.                                     </a>
  4144.                                 </div>
  4145.                             </article>
  4146.                     <?php      
  4147.                         }
  4148.                     }
  4149.                     echo $after_images;
  4150.                     break;
  4151.                
  4152.                 default:
  4153.                     /*simple_slider*/
  4154.                     echo $before_images;
  4155.                    
  4156.                     if (isset($img_id_array) && count($img_id_array) > 0) {
  4157.  
  4158.  
  4159.                         $counter = 0;
  4160.                         foreach ($img_id_array as $key => $value) {
  4161.                             $img_original_size = wp_get_attachment_metadata( $value  );
  4162.                             $original_height = $img_original_size['height'];
  4163.  
  4164.                             $img_url = wp_get_attachment_url($value, 'full'); //get img URL
  4165.                             $size = "single_gallery_desktop";
  4166.                             // if original image is smaller than retina size then use ratio 1
  4167.  
  4168.                             $image = aq_resize($img_url, 9999, get_aqua_size($size, 'height'), false, false);
  4169.  
  4170.                             $attachment_info   = get_post($value); //deb::e($attachment_info );
  4171.                             $caption           = $attachment_info->post_excerpt;
  4172.                             $image_description = $attachment_info->post_content;
  4173.                             $src               = $image[0]; // use original img src    for the first image
  4174.                             $img_class         = '';
  4175.                             $alt_title         = get_post_meta($value, '_wp_attachment_image_alt', true);
  4176.                         ?>
  4177.                             <!-- First slide with contetn: image and content -->
  4178.                             <div class="slide">
  4179.                                 <?php  if(options::logic('sliders', 'gallery_visible_arrow_pin_btn') ){ ?>
  4180.                                     <a class="pin-button" href="http://www.pinterest.com/pin/create/button/?media=<?php echo $src; ?>" data-pin-do="buttonPin"  data-pin-config="above" target="_blank"></a>
  4181.                                 <?php
  4182.                                 } // EOF if gallery_visible_arrow_pin_btn
  4183.  
  4184.                                 if ($counter > 5) { ?>
  4185.                                 <a class="rsImg" href="<?php echo $src; ?>" width="<?php echo $image[1]; ?>"></a>
  4186.                                 <?php }else{?>
  4187.  
  4188.                                             <img class="rsImg" src="<?php echo $src; ?>" width="<?php echo $image[1]; ?>" height="<?php echo $image[2];?>" alt="<?php echo $alt_title;?>">
  4189.                                        
  4190.                                 <?php }
  4191.                                     $counter++;
  4192.                                 ?>
  4193.                             </div>
  4194.  
  4195.                             <?php
  4196.                         } //EOF FOREACH
  4197.  
  4198.                     }
  4199.  
  4200.                     echo $after_images;
  4201.                     break;
  4202.             }
  4203.  
  4204.  
  4205.         }
  4206.     }
  4207.  
  4208.  
  4209.     if(!is_user_logged_in()){
  4210.         global $wp_version;
  4211.         if ( version_compare( $wp_version, '4.4', '>=' ) ) {
  4212.             add_filter('comment_form_fields','flo_crowd_comment_form_fields',50, 1);
  4213.         }
  4214.        
  4215.     }
  4216.     function flo_crowd_comment_form_fields($comment_fields){//deb::e($comment_fields);
  4217.  
  4218.         $new_comment_fields = array(
  4219.                                 $comment_fields['author'],
  4220.                                 $comment_fields['email'],
  4221.                                 $comment_fields['url'],
  4222.                                 $comment_fields['comment']
  4223.                             );
  4224.  
  4225.         return $new_comment_fields;
  4226.     }
  4227.  
  4228.     // Add custom css for the full width sliders containers
  4229.     add_action('wp_head', 'flo_get_custom_css_slider_height');
  4230.     function flo_get_custom_css_slider_height(){
  4231.        
  4232.         $page_slyder_info = flo_get_page_slyder_info();
  4233.  
  4234.         // if the we have a slideshow on the current page and if it is a full width slideshow
  4235.         if($page_slyder_info['selected_slider_id'] > 0 && $page_slyder_info['slideshow_type'] != 'content_width'){
  4236.  
  4237.             $slides_image_size = array('content_width' => 'slideshow',
  4238.                             'simple_full_width' => 'slideshowfullwidth',
  4239.                             'visible_near_by' => 'slideshowvisiblenearby',
  4240.                             'full_screen' => 'slideshowfullscreen',
  4241.                             'slick' => 'slideshowvisiblenearby',
  4242.                         );
  4243.  
  4244.             $height_option_name = $slides_image_size[$page_slyder_info['slideshow_type'] ];
  4245.            
  4246.             $slider_height = options::get_value('sliders', $height_option_name.'_height');
  4247.  
  4248.             if(!is_numeric($slider_height)){
  4249.                 $slider_height = 500;
  4250.             }
  4251.  
  4252.             if($page_slyder_info['slideshow_type'] == 'visible_near_by'){
  4253.                 $nearby_width_option_name = $slides_image_size[$page_slyder_info['slideshow_type'] ].'_width';
  4254.                 $nearby_width = options::get_value('sliders', $nearby_width_option_name);
  4255.  
  4256.                 if(!is_numeric($nearby_width)){
  4257.                     $nearby_width = 400;
  4258.                 }
  4259.             }
  4260.  
  4261.            
  4262.             $full_width_slideshow_mobile_height = options::get_value('sliders', 'full_width_slideshow_mobile_height');
  4263.  
  4264.             $visible_nearby_gutter = options::get_value('sliders', 'visible_nearby_gutter');
  4265.             if(is_numeric($visible_nearby_gutter)){
  4266.                 $visible_nearby_gutter = $visible_nearby_gutter/2;
  4267.             }
  4268.  
  4269.  
  4270.     ?> 
  4271.  
  4272.         <style>
  4273.             <?php  
  4274.                 $media = false;
  4275.                 if(is_numeric($full_width_slideshow_mobile_height)){
  4276.                     $media = true;
  4277.                     ?>  
  4278.                     .crowd-full{
  4279.                         height: <?php echo $full_width_slideshow_mobile_height; ?>px;
  4280.                     }
  4281.  
  4282.                     <?php
  4283.                 } else if ( ! empty($full_width_slideshow_mobile_height) && strpos($full_width_slideshow_mobile_height, 'vh') !== false ) {
  4284.                     $media = true;
  4285.                     ?>  
  4286.                     .crowd-full{
  4287.                         height: <?php echo $full_width_slideshow_mobile_height; ?>;
  4288.                     }
  4289.  
  4290.                    
  4291.                     <?php
  4292.                 }
  4293.                 if ($media) { ?>
  4294.                     @media only screen and (max-width: 640px) {
  4295.  
  4296.                         .crowd-full .main-slideshow .royalSlider {
  4297.                             height: 100% !important;
  4298.                         }
  4299.  
  4300.                         .crowd-full .main-slideshow .royalSlider > div {
  4301.                             height: 100% !important;
  4302.                         }
  4303.  
  4304.                     }
  4305.                 <?php }
  4306.             ?>
  4307.            
  4308.             @media only screen and (min-width: 641px) {
  4309.                 .crowd-full-width .crowd-push, .crowd-full-width .crowd-full{
  4310.                     height: <?php echo $slider_height; ?>px;
  4311.                 }
  4312.                 <?php
  4313.                 if(is_numeric($visible_nearby_gutter)) { ?>
  4314.                     .crowd-nearby-slider .rsSlide{
  4315.                         padding: 0 <?php echo $visible_nearby_gutter; ?>px;
  4316.                     }
  4317.                 <?php } ?>
  4318.  
  4319.                 <?php
  4320.                     $slick_slideshow_height = options::get_value('sliders','slideshowvisiblenearby_height');
  4321.  
  4322.                     if( is_numeric($slick_slideshow_height) ){
  4323.                     ?>
  4324.                         .main-slideshow .flo-slick-slider{
  4325.                             height: <?php echo $slick_slideshow_height; ?>px;
  4326.                         }
  4327.                     <?php
  4328.                     }
  4329.                 ?>
  4330.  
  4331.             }
  4332.  
  4333.             <?php
  4334.                 if($page_slyder_info['slideshow_type'] == 'visible_near_by'){
  4335.             ?>
  4336.                     .main-slideshow .crowd-nearby-slider{
  4337.                         max-width: <?php echo $nearby_width ?>px;
  4338.                     }
  4339.             <?php
  4340.                 }
  4341.  
  4342.  
  4343.             ?>
  4344.  
  4345.  
  4346.         </style>
  4347.     <?php
  4348.  
  4349.  
  4350.         }
  4351.  
  4352.     }
  4353.  
  4354.  
  4355.     // use 'hentry' class only on single blog posts
  4356.     function flo_remove_hentry( $classes ) {
  4357.         global $post;
  4358.         //var_dump(in_array(get_post_type( $post ), array('video','gallery')));
  4359.         if ( !(get_post_type( $post ) == 'post' && is_single()) ) {
  4360.             $classes = array_diff( $classes, array( 'hentry' ) );
  4361.         }
  4362.         return $classes;
  4363.     }
  4364.     add_filter( 'post_class','flo_remove_hentry' );
  4365.  
  4366.     // the maximum image width to be included in a srcset attribute will be the image width
  4367.     // default is 1600
  4368.     if(!function_exists('flo_custom_max_srcset_image_width')){
  4369.         function flo_custom_max_srcset_image_width( $max_width, $size_array ) {
  4370.             $width = $size_array[0];
  4371.  
  4372.             // set the max image width the value of the this image width
  4373.             return $width;
  4374.         }
  4375.     }
  4376.  
  4377.     if(!function_exists('flo_disable_max_srcset_image_width')){
  4378.         function flo_disable_max_srcset_image_width() {
  4379.             return 1;
  4380.         }
  4381.     }
  4382.  
  4383. ?>
  4384. <?php
  4385.     if(!function_exists('flo_create_image_srcset')){
  4386.         function flo_create_image_srcset($size_array,$image_meta, $original_img_url, $crop = false){
  4387.             $image_width = $image_meta['width'];
  4388.             $image_height = $image_meta['height'];
  4389.             $srcset = '';
  4390.             $srcset_array = array();
  4391.             if(is_array($size_array) && sizeof($size_array)){
  4392.  
  4393.                 foreach ($size_array as $srcset_dimensions) {
  4394.  
  4395.                     if(isset( $srcset_dimensions['resize_method'])){
  4396.                         $resize_method = $srcset_dimensions['resize_method'];
  4397.                     }else{
  4398.                         $resize_method = 'width_base'; // the default
  4399.                     }
  4400.                     if( ($resize_method == 'width_base' && $image_width > $srcset_dimensions['width']) ||
  4401.                         ($resize_method == 'height_base' && $image_height > $srcset_dimensions['height'])
  4402.  
  4403.                      ){
  4404.                         $srcset_img_url = aq_resize($original_img_url, $srcset_dimensions['width'], $srcset_dimensions['height'], $crop, false);
  4405.                         if(is_array($srcset_img_url) && isset($srcset_img_url[0]) && strlen($srcset_img_url[0])){
  4406.                             if(isset($srcset_dimensions['srcset_width'])){
  4407.                                 $srcset_width = $srcset_dimensions['srcset_width'];
  4408.                                 if(!strstr($srcset_width,'x')){
  4409.                                     $srcset_width .= 'w';
  4410.                                 }
  4411.                             }else{
  4412.                                 $srcset_width = $srcset_img_url[1].'w';
  4413.                             }
  4414.                            
  4415.                             $srcset_array[] = $srcset_img_url[0] .' '.$srcset_width;
  4416.                         }
  4417.  
  4418.                     }else if(!in_array($original_img_url .' '.$image_width.'w',$srcset_array)){
  4419.                         $srcset_array[] = $original_img_url .' '.$image_width.'w';
  4420.                     }
  4421.                 }
  4422.  
  4423.                 //$srcset_array[] = $original_img_url .' '.$image_width.'w';
  4424.             }
  4425.  
  4426.             if(sizeof($srcset_array)){
  4427.                 $srcset = implode(', ', $srcset_array);
  4428.             }
  4429.  
  4430.             return $srcset;
  4431.         }
  4432.     }
  4433.  
  4434.     /**
  4435.      *
  4436.      * Function that renders the top dashboard link
  4437.      * http://i.imgur.com/k7BxRME.png
  4438.      */
  4439.     if(!function_exists('flo_render_dashboard_top_bar')){
  4440.         function flo_render_dashboard_top_bar(){
  4441.             ob_start();
  4442.             ob_clean();
  4443.         ?>
  4444.             <div class="flo-dashboard-top">
  4445.             <ul>
  4446.                 <li class="doc"><a href="<?php echo _FLO_DOCS_; ?>" target="_blank"><?php _e('Documentation','flotheme') ?></a></li>
  4447.                 <!-- <li class="manage"><a href="admin.php?page=_flo_options&tab=16"><?php _e('Manage','flotheme') ?></a></li> -->
  4448.                 <li class="updated"><a href="admin.php?page=flotheme_updater"><?php _e('Updates','flotheme') ?></a></li>
  4449.                 <li class="news"><a href="<?php echo _FLO_NEWS_; ?>" target="_blank" ><?php _e('News','flotheme') ?></a></li>
  4450.                 <li class="support"><a href="<?php echo _FLO_SUPPORT_; ?>" target="_blank"><?php _e('Support','flotheme') ?></a></li>
  4451.             </ul>
  4452.             </div>
  4453.         <?php
  4454.             $top_dashboard = ob_get_clean();
  4455.  
  4456.             return $top_dashboard;
  4457.         }
  4458.     }
  4459.  
  4460.     /**
  4461.      * @since      2.3
  4462.      *
  4463.      * Previously the tiles for single blog posts and pages were
  4464.      * using H2s, and we decided to change them to H1s
  4465.      * The following function will update thw H1 typography settings to what
  4466.      * was used for H2s to not have visual changes on the site when user
  4467.      * updates the theme.
  4468.      * Normaly that update should run just once
  4469.      *
  4470.      */
  4471.     add_action('init', 'flo_migrate_h2_to_h1');
  4472.     if(!function_exists('flo_migrate_h2_to_h1')){
  4473.         function flo_migrate_h2_to_h1(){
  4474.  
  4475.             if(!get_option('flo_h1_updated')){
  4476.                 $ct = wp_get_theme();
  4477.                 if(isset($ct->version) && $ct->version < 2.4){ // we will run this only till version 2.4
  4478.                     //deb::e(get_option('typography'));
  4479.  
  4480.                     $flo_typography = get_option('typography');
  4481.                    
  4482.                     if($flo_typography){ // if the options are defined
  4483.                         // we want to have H1 using the same font as H2
  4484.  
  4485.                         //font_font_family
  4486.                         if(isset($flo_typography['h2_font_font_family'])){
  4487.                             $flo_typography['h1_font_font_family'] = $flo_typography['h2_font_font_family'];
  4488.                         }
  4489.  
  4490.                         //font_font_weight
  4491.                         if(isset($flo_typography['h2_font_font_weight'])){
  4492.                             $flo_typography['h1_font_font_weight'] = $flo_typography['h2_font_font_weight'];
  4493.                         }
  4494.  
  4495.                         //font_font_style
  4496.                         if(isset($flo_typography['h2_font_font_style'])){
  4497.                             $flo_typography['h1_font_font_style'] = $flo_typography['h2_font_font_style'];
  4498.                         }
  4499.  
  4500.                         //font_font_size
  4501.                         if(isset($flo_typography['h2_font_font_size'])){
  4502.                             $flo_typography['h1_font_font_size'] = $flo_typography['h2_font_font_size'];
  4503.                         }
  4504.  
  4505.                         //font_font_size_mobile
  4506.                         if(isset($flo_typography['h2_font_font_size_mobile'])){
  4507.                             $flo_typography['h1_font_font_size_mobile'] = $flo_typography['h2_font_font_size_mobile'];
  4508.                         }
  4509.  
  4510.                         //font_font_letter_spacing
  4511.                         if(isset($flo_typography['h2_font_font_letter_spacing'])){
  4512.                             $flo_typography['h1_font_font_letter_spacing'] = $flo_typography['h2_font_font_letter_spacing'];
  4513.                         }
  4514.  
  4515.                         //font_font_letter_spacing_mobile
  4516.                         if(isset($flo_typography['h2_font_font_letter_spacing_mobile'])){
  4517.                             $flo_typography['h1_font_font_letter_spacing_mobile'] = $flo_typography['h2_font_font_letter_spacing_mobile'];
  4518.                         }
  4519.  
  4520.                         //update the theme h1 options
  4521.                         update_option('typography',$flo_typography);
  4522.                     }
  4523.  
  4524.                     update_option('flo_h1_updated','1');
  4525.                 }
  4526.             }
  4527.  
  4528.         }
  4529.     }
  4530.  
  4531.     /**
  4532.      *
  4533.      * Try to retrieve the change log from flothemes.com
  4534.      * if that is not possible for some reason, we just read the change log file
  4535.      * @params string t_n  theme name
  4536.      */
  4537.     if(!function_exists('flo_get_change_log')){
  4538.         function flo_get_change_log($t_n = _TN_){
  4539.             $transient_name = $t_n.'_change-remote-log';
  4540.  
  4541.             //delete_transient($transient_name );
  4542.  
  4543.             if ( FALSE == $response = get_transient( $transient_name ) ) {
  4544.  
  4545.                 $theme_name = strtolower($t_n);
  4546.                 $url = 'https://flothemes.com/themes/'.$theme_name.'/?change_log=1';
  4547.                 $args = array(
  4548.                             'sslverify'   => false,
  4549.                         );
  4550.  
  4551.                 $response = wp_remote_get( $url, $args );
  4552.  
  4553.                 set_transient( $transient_name, $response, 60 * 60 * 24 ); // 1 day
  4554.             }
  4555.  
  4556.             //for debugging purpuses
  4557.             if(isset($_GET['flo_debug_change_log']) && $_GET['flo_debug_change_log'] == 1){
  4558.                 echo '<pre>';
  4559.                 var_dump($response);
  4560.                 echo '</pre>';
  4561.                 die();
  4562.             }
  4563.  
  4564.             if (is_wp_error($response) || $response['response']['code'] != '200' || !isset($response['body']) || strpos($response['body'], 'container main-header') ) {
  4565.                 // in case something went wrong retrieving the log from our server,
  4566.                 // then we just load if from the change log file available in the theme.
  4567.                 return flo_get_change_log_from_file();
  4568.             }
  4569.  
  4570.             $result = $response['body'];
  4571.  
  4572.             return $result;
  4573.  
  4574.         }
  4575.  
  4576.     }
  4577.  
  4578.     if(!function_exists('flo_get_change_log_from_file')){
  4579.         function flo_get_change_log_from_file(){
  4580.             global $wp_filesystem;
  4581.             // Initialize the WP filesystem, no more using 'file-put-contents' function
  4582.             if (empty($wp_filesystem)) {
  4583.                 require_once (ABSPATH . '/wp-admin/includes/file.php');
  4584.                 WP_Filesystem();
  4585.             }
  4586.             $change_log_abs_file_path = get_stylesheet_directory().'/change-log.txt';
  4587.            
  4588.             // read the change log file;
  4589.             $change_log_content = $wp_filesystem->get_contents($change_log_abs_file_path);
  4590.  
  4591.             return  nl2br($change_log_content) ;
  4592.         }
  4593.     }
  4594. ?>
Add Comment
Please, Sign In to add comment