Current Path : /var/www/html/clients/nsmk.e-nk.ru/application/maxsite/plugins/random_gal/ |
Current File : /var/www/html/clients/nsmk.e-nk.ru/application/maxsite/plugins/random_gal/index.php |
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); /** * MaxSite CMS * (c) http://max-3000.com/ */ # функция автоподключения плагина function random_gal_autoload($args = array()) { mso_register_widget('random_gal_widget', t('Галерея', 'plugins')); # регистрируем виджет } # функция выполняется при деинсталяции плагина function random_gal_uninstall($args = array()) { mso_delete_option_mask('random_gal_widget_', 'plugins'); // удалим созданные опции return $args; } # функция, которая берет настройки из опций виджетов function random_gal_widget($num = 1) { $widget = 'random_gal_widget_' . $num; // имя для опций = виджет + номер $options = mso_get_option($widget, 'plugins', array() ); // получаем опции // заменим заголовок, чтобы был в h2 class="box" if ( isset($options['header']) and $options['header'] ) $options['header'] = '<h2 class="box"><span>' . $options['header'] . '</span></h2>'; else $options['header'] = ''; return random_gal_widget_custom($options, $num); } # форма настройки виджета # имя функции = виджет_form function random_gal_widget_form($num = 1) { $widget = 'random_gal_widget_' . $num; // имя для формы и опций = виджет + номер // получаем опции $options = mso_get_option($widget, 'plugins', array()); if ( !isset($options['header']) ) $options['header'] = ''; if ( !isset($options['gal']) ) $options['gal'] = ''; if ( !isset($options['galother']) ) $options['galother'] = ''; if ( !isset($options['count']) ) $options['count'] = 3; if ( !isset($options['style']) ) $options['style'] = ''; if ( !isset($options['style_img']) ) $options['style_img'] = ''; if ( !isset($options['html']) ) $options['html'] = ''; if ( !isset($options['sort']) ) $options['sort'] = 'random'; if ( !isset($options['filter']) ) $options['filter'] = ''; if ( !isset($options['class']) ) $options['class'] = ''; // вывод самой формы $CI = & get_instance(); $CI->load->helper('form'); $CI->load->helper('directory'); // получим все каталоги в uploads $all_dirs = directory_map(getinfo('uploads_dir'), true); // только в uploads $out = array('uploads/'=>'uploads/'); foreach ($all_dirs as $d) { // это каталог if (is_dir( getinfo('uploads_dir') . $d) and $d != '_mso_float' and $d != 'mini' and $d != '_mso_i' and $d != 'smiles') $out[$d] = $d; } $form = '<p><div class="t150">' . t('Заголовок:', 'plugins') . '</div> '. form_input( array( 'name'=>$widget . 'header', 'value'=>$options['header'] ) ) . '</p>'; $form .= '<p><div class="t150">' . t('Галерея:', 'plugins') . '</div> '. form_dropdown( $widget . 'gal', $out, $options['gal']) . '</p>'; $form .= '<p><div class="t150">' . t('несколько, через |:', 'plugins') . '</div> '. form_input( array( 'name'=>$widget . 'galother', 'value'=>$options['galother'] ) ) . '</p>' ; $form .= '<p><div class="t150">' . t('Количество:', 'plugins') . '</div> '. form_input( array( 'name'=>$widget . 'count', 'value'=>$options['count'] ) ) . '</p>' ; $form .= '<p><div class="t150">' . t('CSS-cтиль блока:', 'plugins') . '</div> '. form_input( array( 'name'=>$widget . 'style', 'value'=>$options['style'] ) ) . '</p>' ; $form .= '<p><div class="t150">' . t('Дополнит. class:', 'plugins') . '</div> '. form_input( array( 'name'=>$widget . 'class', 'value'=>$options['class'] ) ) . '</p>' ; $form .= '<p><div class="t150">' . t('CSS-cтиль img:', 'plugins') . '</div> '. form_input( array( 'name'=>$widget . 'style_img', 'value'=>$options['style_img'] ) ) . '</p>'; $form .= '<p><div class="t150">' . t('Свой HTML-блок:', 'plugins') . '</div> '. form_input( array( 'name'=>$widget . 'html', 'value'=>$options['html'] ) ) . '</p>'; $form .= '<p><div class="t150">' . t('Сортировка:', 'plugins') . '</div> '. form_dropdown( $widget . 'sort', array( 'random'=>'Случайно', 'name_file'=>'По именам файлов', 'name_file_desc'=>'По именам файлов (обратный порядок)', 'description'=>'По описанию', 'description_desc'=>'По описанию (обратный порядок)', 'name_file_description'=>'По именам, потом по описанию', 'description_name_file'=>'По описанию, потом по именам', 'datefile'=>'По времени создания файлов', 'datefile_desc'=>'По времени создания файлов (обратный порядок)', ), $options['sort']) . '</p>'; $form .= '<p><div class="t150">' . t('Фильтр:', 'plugins') . '</div> '. form_input( array( 'name'=>$widget . 'filter', 'value'=>$options['filter'] ) ) . '</p>'; $form .='<p><div class="t150"> </div>Можно указать фразу, с которой должно начинаться хотя бы одно слово в описании файла.</p>'; return $form; } # сюда приходят POST из формы настройки виджета # имя функции = виджет_update function random_gal_widget_update($num = 1) { $widget = 'random_gal_widget_' . $num; // имя для опций = виджет + номер // получаем опции $options = $newoptions = mso_get_option($widget, 'plugins', array()); # обрабатываем POST $newoptions['header'] = mso_widget_get_post($widget . 'header'); $newoptions['gal'] = mso_widget_get_post($widget . 'gal'); $newoptions['galother'] = mso_widget_get_post($widget . 'galother'); $newoptions['count'] = mso_widget_get_post($widget . 'count'); $newoptions['style'] = mso_widget_get_post($widget . 'style'); $newoptions['style_img'] = mso_widget_get_post($widget . 'style_img'); $newoptions['html'] = mso_widget_get_post($widget . 'html'); $newoptions['sort'] = mso_widget_get_post($widget . 'sort'); $newoptions['filter'] = mso_widget_get_post($widget . 'filter'); $newoptions['class'] = mso_widget_get_post($widget . 'class'); if ( $options != $newoptions ) mso_add_option($widget, $newoptions, 'plugins'); } # вспомогательные для сортировки массива function random_gal_cmp_name_file($a, $b) { if ( $a['file'] == $b['file'] ) return 0; return ( $a['file'] > $b['file'] ) ? 1 : -1; } function random_gal_cmp_name_file_desc($a, $b) { if ( $a['file'] == $b['file'] ) return 0; return ( $a['file'] > $b['file'] ) ? -1 : 1; } function random_gal_cmp_description($a, $b) { if ( $a['descritions'] == $b['descritions'] ) return 0; return ( $a['descritions'] > $b['descritions'] ) ? 1 : -1; } function random_gal_cmp_description_desc($a, $b) { if ( $a['descritions'] == $b['descritions'] ) return 0; return ( $a['descritions'] > $b['descritions'] ) ? -1 : 1; } function random_gal_cmp_datefile($a, $b) { if ( $a['datefile'] == $b['datefile'] ) return 0; return ( $a['datefile'] > $b['datefile'] ) ? 1 : -1; } function random_gal_cmp_datefile_desc($a, $b) { if ( $a['datefile'] == $b['datefile'] ) return 0; return ( $a['datefile'] > $b['datefile'] ) ? -1 : 1; } # функция плагина function random_gal_widget_custom($options = array(), $num = 1) { $out = ''; if ( !isset($options['header']) ) $options['header'] = ''; if ( !isset($options['gal']) ) $options['gal'] = 'uploads/'; if ( !isset($options['galother']) ) $options['galother'] = ''; if ( !isset($options['count']) ) $options['count'] = 3; if ( !isset($options['style']) ) $options['style'] = ''; // стиль div блока if ( !isset($options['style_img']) ) $options['style_img'] = ''; // стиль каждой картинки if ( !isset($options['html']) ) $options['html'] = ''; // дополнительный html в конце вывода if ( !isset($options['sort']) ) $options['sort'] = 'random'; if ( !isset($options['filter']) ) $options['filter'] = ''; else $options['filter'] = trim(mb_strtolower($options['filter'], 'UTF-8')); if ( !isset($options['class']) ) $options['class'] = ''; // дополнительный class div блока if ($options['gal'] == 'uploads/') $options['gal'] = ''; $CI = & get_instance(); $CI->load->helper('file'); $CI->load->helper('directory'); // получим список всех файлов в указаном каталоге if ($options['gal']) $options['gal'] .= '/'; if ($options['galother']) { // если указано несколько каталогов, то потрошим срочку $all_dirs = explode('|', $options['galother']); foreach($all_dirs as $key=>$var) $all_dirs[$key] = trim($var) . '/'; } else $all_dirs = array($options['gal']); $all_files = array(); // массив для всех нужных файлов $allowed_ext = array('gif', 'jpg', 'jpeg', 'png'); foreach($all_dirs as $one_dir) // проходимся по каждому каталогу { if ($one_dir == '//') $one_dir = ''; $dir0 = getinfo('uploads_dir') . $one_dir . '/'; $dir = getinfo('uploads_dir') . $one_dir . 'mini/'; $dir_url = getinfo('uploads_url') . $one_dir; $dir_url_mini = getinfo('uploads_url') . $one_dir . 'mini/'; if (!is_dir($dir)) return ''; // нет каталога $fn_mso_descritions = $dir0 . '_mso_i/_mso_descriptions.dat'; if (file_exists( $fn_mso_descritions )) { // массив данных: fn => описание $descritions = unserialize( read_file($fn_mso_descritions) ); // получим из файла все описания } else $descritions = array(); $files = directory_map($dir, true); // все файлы в каталоге if (!$files) $files = array(); foreach ($files as $file) { if (@is_dir($dir . $file)) continue; // это каталог else { $ext = strtolower(str_replace('.', '', strrchr($file, '.'))); // расширение файла if ( !in_array($ext, $allowed_ext) ) continue; // запрещенный тип файла $description = (isset($descritions[$file])) ? $descritions[$file] : ''; if ($options['filter']) // нужно применить фильтр в описании { $go = false; if ($description) { $arr_desc = array_unique(explode(' ', trim(mb_strtolower($description, 'UTF-8')))); foreach ($arr_desc as $val) { if (strpos($val, $options['filter']) === 0) // есть вхождение { $go = true; break; } } } } else $go = true; if ($go) $all_files[$one_dir . $file] = array( 'file' => $file, 'dir' => $one_dir, 'descritions' => str_replace('#', '', $description), 'datefile' => filemtime($dir . $file), ); } } } if ($options['sort'] == 'random') shuffle($all_files); // перемешиваем массив elseif ($options['sort'] == 'name_file') // отсортируем по ['file'] { uasort($all_files, 'random_gal_cmp_name_file'); } elseif ($options['sort'] == 'description')// отсортируем по ['description'] { uasort($all_files, 'random_gal_cmp_description'); } elseif ($options['sort'] == 'name_file_description') // По именам, потом по описанию { uasort($all_files, 'random_gal_cmp_name_file'); uasort($all_files, 'random_gal_cmp_description'); } elseif ($options['sort'] == 'description_name_file') // По описанию, потом по именам { uasort($all_files, 'random_gal_cmp_description'); uasort($all_files, 'random_gal_cmp_name_file'); } elseif ($options['sort'] == 'name_file_desc') // По именам файлов (обратный порядок) { uasort($all_files, 'random_gal_cmp_name_file_desc'); } elseif ($options['sort'] == 'description_desc') // По описанию (обратный порядок) { uasort($all_files, 'random_gal_cmp_description_desc'); } elseif ($options['sort'] == 'datefile') // По времени файла { uasort($all_files, 'random_gal_cmp_datefile'); } elseif ($options['sort'] == 'datefile_desc') // По времени файла обратно { uasort($all_files, 'random_gal_cmp_datefile_desc'); } // pr($all_files); $all_files = array_slice($all_files, 0, (int) $options['count']); // только нужное нам количество if ($options['style_img']) $options['style_img'] = ' style="' . $options['style_img'] . '"'; foreach ($all_files as $key=>$val) { if ($val['descritions']) $title = ' title="' . $val['descritions'] . '"'; else $title = ''; $out .= '<a href="' . getinfo('uploads_url') . $val['dir'] . $val['file'] . '" class="lightbox"' . $title . '><img src="' . getinfo('uploads_url') . $val['dir'] . 'mini/' . $val['file'] . '" alt=""' . $options['style_img'] . '></a>' . NR; } if ($out) { if ($options['class']) $options['class'] = ' class="random-gal-widget ' . $options['class']. '"'; else $options['class'] = ' class="random-gal-widget"'; if ($options['style']) $options['style'] = ' style="' . $options['style'] . '"'; $out = '<div' . $options['class'] . $options['style'] . '>' . $out . '</div>' . $options['html']; } if ($out and $options['header']) $out = $options['header'] . $out; return $out; } # end file