'Smileys', 'description' => 'Customize your smiley.', 'page callback' => 'drupal_get_form', 'page arguments' => array('smiley_overview_form'), 'access arguments' => array('administer smiley'), 'file' => 'smiley.admin.inc', ); $items['admin/config/content/smiley/view'] = array( 'title' => 'View', 'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -10, ); $items['admin/config/content/smiley/settings'] = array( 'title' => 'Settings', 'page callback' => 'drupal_get_form', 'page arguments' => array('smiley_settings_form'), 'access arguments' => array('administer smiley'), 'weight' => 0, 'type' => MENU_LOCAL_TASK, 'file' => 'smiley.admin.inc', ); $items['admin/config/content/smiley/import'] = array( 'title' => 'Import', 'page callback' => 'drupal_get_form', 'page arguments' => array('smiley_import_form'), 'access arguments' => array('administer smiley'), 'weight' => 1, 'type' => MENU_LOCAL_TASK, 'file' => 'smiley.admin.inc', ); return $items; } /** * Implements hook_theme(). */ function smiley_theme() { return array( 'smiley_overview_form' => array( 'file' => 'smiley.admin.inc', 'render element' => 'form', ) ); } /** * Implements hook_permission(). */ function smiley_permission() { return array( 'administer smiley' => array( 'title' => t('Administer smiley'), 'restrict access' => TRUE, ), ); } /** * Implementation of hook_filter_info(). */ function smiley_filter_info() { $filters['smiley'] = array( 'title' => t('Smileys filter'), 'description' => t('Replaces textual smiley inside posts with images.'), 'process callback' => 'smiley_filter_process', 'tips callback' => 'smiley_filter_tips', ); return $filters; } /** * Smileys filter process callback */ function smiley_filter_process($text, $filter, $format) { global $base_path; $smileys = db_query('SELECT * FROM {smiley} WHERE status = 1')->fetchAll(); $chunks = preg_split('#(]*>)#i', $text, -1, PREG_SPLIT_DELIM_CAPTURE); $output = ''; $ignore = 0; $packs_path = variable_get('smiley_path', drupal_get_path('module', 'smiley') . '/packs'); $css_class = check_plain(variable_get('smiley_css_class', '')); if (!empty($css_class)) $css_class = 'class="' . $css_class . '" '; foreach ($chunks AS $key => $chunk) { if ($chunk == '' || $chunk == '
') {
      $ignore++;
    }
    elseif ($chunk == '' || $chunk == '
') { $ignore--; } // There are no unclosed code and pre tags. elseif ($chunk && !$ignore) { foreach ($smileys as $smiley) { $image = 'smiley'; $acronyms = explode(' ', $smiley->acronyms); foreach($acronyms as $acronym) { if (strlen($acronym) == 0) continue; $chunk = preg_replace('~(^|>|\s+| )(' . preg_quote($acronym, '~') . ')($|acronyms); $rows[] = array( ''. $acronyms[0] .'', check_plain($smiley->acronyms) ); } $form['smiley_table'] = array( '#markup' => theme('table', array('header' => $header, 'rows' => $rows)), ); return drupal_render($form); } function smiley_filter_tips($filter, $format, $long = FALSE) { if ($long) { return t('If you include a textual smiley in your post (see chart below), it will be replaced by a graphical smiley.') . '
' . smiley_filter_tips_table(); } else { return t('Textual smiley will be replaced with graphical ones.', array('!smiley_help' => url('filter/tips', array('fragment' => 'filter-smiley')))); } }