Same name and namespace in other branches
  1. 4.7.x modules/filter.module \filter_filter_tips()
  2. 5.x modules/filter/filter.module \filter_filter_tips()
  3. 6.x modules/filter/filter.module \filter_filter_tips()

Implementation of hook_filter_tips().

File

modules/filter.module, line 49
Framework for handling filtering of content.

Code

function filter_filter_tips($delta, $format, $long = false) {
  global $base_url;
  switch ($delta) {
    case 0:
      if (variable_get("filter_html_{$format}", FILTER_HTML_STRIP) == FILTER_HTML_STRIP) {
        if ($allowed_html = variable_get("allowed_html_{$format}", '<a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>')) {
          switch ($long) {
            case 0:
              return t('Allowed HTML tags') . ': ' . check_plain($allowed_html);
            case 1:
              $output = '<p>' . t('Allowed HTML tags') . ': ' . check_plain($allowed_html) . '</p>';
              if (!variable_get("filter_html_help_{$format}", 1)) {
                return $output;
              }
              $output .= t('<p>This site allows HTML content. While learning all of HTML may feel intimidating, learning how to use a very small number of the most basic HTML "tags" is very easy. This table provides examples for each tag that is enabled on this site.</p>
<p>For more information see W3C\'s <a href="http://www.w3.org/TR/html/">HTML Specifications</a> or use your favorite search engine to find other sites that explain HTML.</p>');
              $tips = array(
                'a' => array(
                  t('Anchors are used to make links to other pages.'),
                  '<a href="' . $base_url . '">' . variable_get('site_name', 'drupal') . '</a>',
                ),
                'br' => array(
                  t('By default line break tags are automatically added, so use this tag to add additional ones. Use of this tag is different because it is not used with an open/close pair like all the others. Use the extra " /" inside the tag to maintain XHTML 1.0 compatibility'),
                  t('Text with <br />line break'),
                ),
                'p' => array(
                  t('By default paragraph tags are automatically added, so use this tag to add additional ones.'),
                  '<p>' . t('Paragraph one.') . '</p> <p>' . t('Paragraph two.') . '</p>',
                ),
                'strong' => array(
                  t('Strong'),
                  '<strong>' . t('Strong') . '</strong>',
                ),
                'em' => array(
                  t('Emphasized'),
                  '<em>' . t('Emphasized') . '</em>',
                ),
                'cite' => array(
                  t('Cited'),
                  '<cite>' . t('Cited') . '</cite>',
                ),
                'code' => array(
                  t('Coded text used to show programming source code'),
                  '<code>' . t('Coded') . '</code>',
                ),
                'b' => array(
                  t('Bolded'),
                  '<b>' . t('Bolded') . '</b>',
                ),
                'u' => array(
                  t('Underlined'),
                  '<u>' . t('Underlined') . '</u>',
                ),
                'i' => array(
                  t('Italicized'),
                  '<i>' . t('Italicized') . '</i>',
                ),
                'sup' => array(
                  t('Superscripted'),
                  t('<sup>Super</sup>scripted'),
                ),
                'sub' => array(
                  t('Subscripted'),
                  t('<sub>Sub</sub>scripted'),
                ),
                'pre' => array(
                  t('Preformatted'),
                  '<pre>' . t('Preformatted') . '</pre>',
                ),
                'blockquote' => array(
                  t('Block quoted'),
                  '<blockquote>' . t('Block quoted') . '</blockquote>',
                ),
                'q' => array(
                  t('Quoted inline'),
                  '<q>' . t('Quoted inline') . '</q>',
                ),
                // Assumes and describes tr, td, th.
                'table' => array(
                  t('Table'),
                  '<table> <tr><th>' . t('Table header') . '</th></tr> <tr><td>' . t('Table cell') . '</td></tr> </table>',
                ),
                'tr' => NULL,
                'td' => NULL,
                'th' => NULL,
                'del' => array(
                  t('Deleted'),
                  '<del>' . t('Deleted') . '</del>',
                ),
                'ins' => array(
                  t('Inserted'),
                  '<ins>' . t('Inserted') . '</ins>',
                ),
                // Assumes and describes li.
                'ol' => array(
                  t('Ordered list - use the &lt;li&gt; to begin each list item'),
                  '<ol> <li>' . t('First item') . '</li> <li>' . t('Second item') . '</li> </ol>',
                ),
                'ul' => array(
                  t('Unordered list - use the &lt;li&gt; to begin each list item'),
                  '<ul> <li>' . t('First item') . '</li> <li>' . t('Second item') . '</li> </ul>',
                ),
                'li' => NULL,
                // Assumes and describes dt and dd.
                'dl' => array(
                  t('Definition lists are similar to other HTML lists. &lt;dl&gt; begins the definition list, &lt;dt&gt; begins the definition term and &lt;dd&gt; begins the definition description.'),
                  '<dl> <dt>' . t('First term') . '</dt> <dd>' . t('First definition') . '</dd> <dt>' . t('Second term') . '</dt> <dd>' . t('Second definition') . '</dd> </dl>',
                ),
                'dt' => NULL,
                'dd' => NULL,
                'h1' => array(
                  t('Header'),
                  '<h1>' . t('Title') . '</h1>',
                ),
                'h2' => array(
                  t('Header'),
                  '<h2>' . t('Subtitle') . '</h2>',
                ),
                'h3' => array(
                  t('Header'),
                  '<h3>' . t('Subtitle three') . '</h3>',
                ),
                'h4' => array(
                  t('Header'),
                  '<h4>' . t('Subtitle four') . '</h4>',
                ),
                'h5' => array(
                  t('Header'),
                  '<h5>' . t('Subtitle five') . '</h5>',
                ),
                'h6' => array(
                  t('Header'),
                  '<h6>' . t('Subtitle six') . '</h6>',
                ),
              );
              $header = array(
                t('Tag Description'),
                t('You Type'),
                t('You Get'),
              );
              preg_match_all('/<([a-z0-9]+)[^a-z0-9]/i', $allowed_html, $out);
              foreach ($out[1] as $tag) {
                if (array_key_exists($tag, $tips)) {
                  if ($tips[$tag]) {
                    $rows[] = array(
                      array(
                        'data' => $tips[$tag][0],
                        'class' => 'description',
                      ),
                      array(
                        'data' => '<code>' . check_plain($tips[$tag][1]) . '</code>',
                        'class' => 'type',
                      ),
                      array(
                        'data' => $tips[$tag][1],
                        'class' => 'get',
                      ),
                    );
                  }
                }
                else {
                  $rows[] = array(
                    array(
                      'data' => t('No help provided for tag %tag.', array(
                        '%tag' => check_plain($tag),
                      )),
                      'class' => 'description',
                      'colspan' => 3,
                    ),
                  );
                }
              }
              $output .= theme('table', $header, $rows);
              $output .= t('<p>Most unusual characters can be directly entered without any problems.</p>
<p>If you do encounter problems, try using HTML character entities. A common example looks like &amp;amp; for an ampersand &amp; character. For a full list of entities see HTML\'s <a href="http://www.w3.org/TR/html4/sgml/entities.html">entities</a> page. Some of the available characters include:</p>');
              $entities = array(
                array(
                  t('Ampersand'),
                  '&amp;',
                ),
                array(
                  t('Greater than'),
                  '&gt;',
                ),
                array(
                  t('Less than'),
                  '&lt;',
                ),
                array(
                  t('Quotation mark'),
                  '&quot;',
                ),
              );
              $header = array(
                t('Character Description'),
                t('You Type'),
                t('You Get'),
              );
              unset($rows);
              foreach ($entities as $entity) {
                $rows[] = array(
                  array(
                    'data' => $entity[0],
                    'class' => 'description',
                  ),
                  array(
                    'data' => '<code>' . check_plain($entity[1]) . '</code>',
                    'class' => 'type',
                  ),
                  array(
                    'data' => $entity[1],
                    'class' => 'get',
                  ),
                );
              }
              $output .= theme('table', $header, $rows);
              return $output;
          }
        }
      }
      else {
        return t('No HTML tags allowed');
      }
      break;
    case 1:
      switch ($long) {
        case 0:
          return t('You may post PHP code. You should include &lt;?php ?&gt; tags.');
        case 1:
          return t('
<h4>Using custom PHP code</h4>
<p>If you know how to script in PHP, Drupal gives you the power to embed any script you like. It will be executed when the page is viewed and dynamically embedded into the page. This gives you amazing flexibility and power, but of course with that comes danger and insecurity if you don\'t write good code. If you are not familiar with PHP, SQL or with the site engine, avoid experimenting with PHP because you can corrupt your database or render your site insecure or even unusable! If you don\'t plan to do fancy stuff with your content then you\'re probably better off with straight HTML.</p>
<p>Remember that the code within each PHP item must be valid PHP code - including things like correctly terminating statements with a semicolon. It is highly recommended that you develop your code separately using a simple test script on top of a test database before migrating to your production environment.</p>
<p>Notes:</p><ul><li>You can use global variables, such as configuration parameters, within the scope of your PHP code but remember that global variables which have been given values in your code will retain these values in the engine afterwards.</li><li>register_globals is now set to <strong>off</strong> by default. If you need form information you need to get it from the "superglobals" $_POST, $_GET, etc.</li><li>You can either use the <code>print</code> or <code>return</code> statement to output the actual content for your item.</li></ul>
<p>A basic example:</p>
<blockquote><p>You want to have a box with the title "Welcome" that you use to greet your visitors. The content for this box could be created by going:</p>
<pre>
  print t("Welcome visitor, ... welcome message goes here ...");
</pre>
<p>If we are however dealing with a registered user, we can customize the message by using:</p>
<pre>
  global $user;
  if ($user->uid) {
    print t("Welcome $user->name, ... welcome message goes here ...");
  }
  else {
    print t("Welcome visitor, ... welcome message goes here ...");
  }
</pre></blockquote>
<p>For more in-depth examples, we recommend that you check the existing Drupal code and use it as a starting point, especially for sidebar boxes.</p>');
      }
    case 2:
      switch ($long) {
        case 0:
          return t('Lines and paragraphs break automatically.');
        case 1:
          return t('Lines and paragraphs are automatically recognized. The &lt;br /&gt; line break, &lt;p&gt; paragraph and &lt;/p&gt; close paragraph tags are inserted automatically. If paragraphs are not recognized simply add a couple blank lines.');
          break;
      }
  }
}