Mercurial > defr > drupal > core
comparison includes/common.inc @ 15:4347c45bb494 6.7
Drupal 6.7
| author | Franck Deroche <webmaster@defr.org> |
|---|---|
| date | Tue, 23 Dec 2008 14:32:44 +0100 |
| parents | 8b6c45761e01 |
| children | 8e6257f3ae39 |
comparison
equal
deleted
inserted
replaced
| 14:626fcabfa4b8 | 15:4347c45bb494 |
|---|---|
| 1 <?php | 1 <?php |
| 2 // $Id: common.inc,v 1.756.2.29 2008/10/22 19:26:01 goba Exp $ | 2 // $Id: common.inc,v 1.756.2.35 2008/12/10 22:30:13 goba Exp $ |
| 3 | 3 |
| 4 /** | 4 /** |
| 5 * @file | 5 * @file |
| 6 * Common functions that many Drupal modules will need to reference. | 6 * Common functions that many Drupal modules will need to reference. |
| 7 * | 7 * |
| 497 } | 497 } |
| 498 | 498 |
| 499 $request = $method .' '. $path ." HTTP/1.0\r\n"; | 499 $request = $method .' '. $path ." HTTP/1.0\r\n"; |
| 500 $request .= implode("\r\n", $defaults); | 500 $request .= implode("\r\n", $defaults); |
| 501 $request .= "\r\n\r\n"; | 501 $request .= "\r\n\r\n"; |
| 502 if ($data) { | 502 $request .= $data; |
| 503 $request .= $data ."\r\n"; | 503 |
| 504 } | |
| 505 $result->request = $request; | 504 $result->request = $request; |
| 506 | 505 |
| 507 fwrite($fp, $request); | 506 fwrite($fp, $request); |
| 508 | 507 |
| 509 // Fetch response. | 508 // Fetch response. |
| 663 } | 662 } |
| 664 | 663 |
| 665 /** | 664 /** |
| 666 * Translate strings to the page language or a given language. | 665 * Translate strings to the page language or a given language. |
| 667 * | 666 * |
| 668 * All human-readable text that will be displayed somewhere within a page should | 667 * Human-readable text that will be displayed somewhere within a page should |
| 669 * be run through the t() function. | 668 * be run through the t() function. |
| 670 * | 669 * |
| 671 * Examples: | 670 * Examples: |
| 672 * @code | 671 * @code |
| 673 * if (!$info || !$info['extension']) { | 672 * if (!$info || !$info['extension']) { |
| 730 * Here is an example of t() used correctly: | 729 * Here is an example of t() used correctly: |
| 731 * @code | 730 * @code |
| 732 * $output .= '<p>'. t('Go to the <a href="@contact-page">contact page</a>.', array('@contact-page' => url('contact'))) .'</p>'; | 731 * $output .= '<p>'. t('Go to the <a href="@contact-page">contact page</a>.', array('@contact-page' => url('contact'))) .'</p>'; |
| 733 * @endcode | 732 * @endcode |
| 734 * | 733 * |
| 735 * Also avoid escaping quotation marks wherever possible. | 734 * Avoid escaping quotation marks wherever possible. |
| 736 * | 735 * |
| 737 * Incorrect: | 736 * Incorrect: |
| 738 * @code | 737 * @code |
| 739 * $output .= t('Don\'t click me.'); | 738 * $output .= t('Don\'t click me.'); |
| 740 * @endcode | 739 * @endcode |
| 741 * | 740 * |
| 742 * Correct: | 741 * Correct: |
| 743 * @code | 742 * @code |
| 744 * $output .= t("Don't click me."); | 743 * $output .= t("Don't click me."); |
| 745 * @endcode | 744 * @endcode |
| 745 * | |
| 746 * Because t() is designed for handling code-based strings, in almost all | |
| 747 * cases, the actual string and not a variable must be passed through t(). | |
| 748 * | |
| 749 * Extraction of translations is done based on the strings contained in t() | |
| 750 * calls. If a variable is passed through t(), the content of the variable | |
| 751 * cannot be extracted from the file for translation. | |
| 752 * | |
| 753 * Incorrect: | |
| 754 * @code | |
| 755 * $message = 'An error occurred.'; | |
| 756 * drupal_set_message(t($message), 'error'); | |
| 757 * $output .= t($message); | |
| 758 * @endcode | |
| 759 * | |
| 760 * Correct: | |
| 761 * @code | |
| 762 * $message = t('An error occurred.'); | |
| 763 * drupal_set_message($message, 'error'); | |
| 764 * $output .= $message; | |
| 765 * @endcode | |
| 766 * | |
| 767 * The only case in which variables can be passed safely through t() is when | |
| 768 * code-based versions of the same strings will be passed through t() (or | |
| 769 * otherwise extracted) elsewhere. | |
| 770 * | |
| 771 * In some cases, modules may include strings in code that can't use t() | |
| 772 * calls. For example, a module may use an external PHP application that | |
| 773 * produces strings that are loaded into variables in Drupal for output. | |
| 774 * In these cases, module authors may include a dummy file that passes the | |
| 775 * relevant strings through t(). This approach will allow the strings to be | |
| 776 * extracted. | |
| 777 * | |
| 778 * Sample external (non-Drupal) code: | |
| 779 * @code | |
| 780 * class Time { | |
| 781 * public $yesterday = 'Yesterday'; | |
| 782 * public $today = 'Today'; | |
| 783 * public $tomorrow = 'Tomorrow'; | |
| 784 * } | |
| 785 * @endcode | |
| 786 * | |
| 787 * Sample dummy file. | |
| 788 * @code | |
| 789 * // Dummy function included in example.potx.inc. | |
| 790 * function example_potx() { | |
| 791 * $strings = array( | |
| 792 * t('Yesterday'), | |
| 793 * t('Today'), | |
| 794 * t('Tomorrow'), | |
| 795 * ); | |
| 796 * // No return value needed, since this is a dummy function. | |
| 797 * } | |
| 798 * @endcode | |
| 799 * | |
| 800 * Having passed strings through t() in a dummy function, it is then | |
| 801 * okay to pass variables through t(). | |
| 802 * | |
| 803 * Correct (if a dummy file was used): | |
| 804 * @code | |
| 805 * $time = new Time(); | |
| 806 * $output .= t($time->today); | |
| 807 * @endcode | |
| 808 * | |
| 809 * However tempting it is, custom data from user input or other non-code | |
| 810 * sources should not be passed through t(). Doing so leads to the following | |
| 811 * problems and errors: | |
| 812 * - The t() system doesn't support updates to existing strings. When user | |
| 813 * data is updated, the next time it's passed through t() a new record is | |
| 814 * created instead of an update. The database bloats over time and any | |
| 815 * existing translations are orphaned with each update. | |
| 816 * - The t() system assumes any data it receives is in English. User data may | |
| 817 * be in another language, producing translation errors. | |
| 818 * - The "Built-in interface" text group in the locale system is used to | |
| 819 * produce translations for storage in .po files. When non-code strings are | |
| 820 * passed through t(), they are added to this text group, which is rendered | |
| 821 * inaccurate since it is a mix of actual interface strings and various user | |
| 822 * input strings of uncertain origin. | |
| 823 * | |
| 824 * Incorrect: | |
| 825 * @code | |
| 826 * $item = item_load(); | |
| 827 * $output .= check_plain(t($item['title'])); | |
| 828 * @endcode | |
| 829 * | |
| 830 * Instead, translation of these data can be done through the locale system, | |
| 831 * either directly or through helper functions provided by contributed | |
| 832 * modules. | |
| 833 * @see hook_locale() | |
| 834 * | |
| 835 * During installation, st() is used in place of t(). Code that may be called | |
| 836 * during installation or during normal operation should use the get_t() | |
| 837 * helper function. | |
| 838 * @see st() | |
| 839 * @see get_t() | |
| 746 * | 840 * |
| 747 * @param $string | 841 * @param $string |
| 748 * A string containing the English string to translate. | 842 * A string containing the English string to translate. |
| 749 * @param $args | 843 * @param $args |
| 750 * An associative array of replacements to make after translation. Incidences | 844 * An associative array of replacements to make after translation. Incidences |
| 1818 // Prefix with base and remove '../' segments where possible. | 1912 // Prefix with base and remove '../' segments where possible. |
| 1819 $path = $_base . $matches[1]; | 1913 $path = $_base . $matches[1]; |
| 1820 $last = ''; | 1914 $last = ''; |
| 1821 while ($path != $last) { | 1915 while ($path != $last) { |
| 1822 $last = $path; | 1916 $last = $path; |
| 1823 $path = preg_replace('`(^|/)(?!../)([^/]+)/../`', '$1', $path); | 1917 $path = preg_replace('`(^|/)(?!\.\./)([^/]+)/\.\./`', '$1', $path); |
| 1824 } | 1918 } |
| 1825 return 'url('. $path .')'; | 1919 return 'url('. $path .')'; |
| 1826 } | 1920 } |
| 1827 | 1921 |
| 1828 /** | 1922 /** |
| 3535 // Change query-strings on css/js files to enforce reload for all users. | 3629 // Change query-strings on css/js files to enforce reload for all users. |
| 3536 _drupal_flush_css_js(); | 3630 _drupal_flush_css_js(); |
| 3537 | 3631 |
| 3538 drupal_clear_css_cache(); | 3632 drupal_clear_css_cache(); |
| 3539 drupal_clear_js_cache(); | 3633 drupal_clear_js_cache(); |
| 3540 system_theme_data(); | 3634 |
| 3635 // If invoked from update.php, we must not update the theme information in the | |
| 3636 // database, or this will result in all themes being disabled. | |
| 3637 if (defined('MAINTENANCE_MODE') && MAINTENANCE_MODE == 'update') { | |
| 3638 _system_theme_data(); | |
| 3639 } | |
| 3640 else { | |
| 3641 system_theme_data(); | |
| 3642 } | |
| 3643 | |
| 3541 drupal_rebuild_theme_registry(); | 3644 drupal_rebuild_theme_registry(); |
| 3542 menu_rebuild(); | 3645 menu_rebuild(); |
| 3543 node_types_rebuild(); | 3646 node_types_rebuild(); |
| 3544 // Don't clear cache_form - in-progress form submissions may break. | 3647 // Don't clear cache_form - in-progress form submissions may break. |
| 3545 // Ordered so clearing the page cache will always be the last action. | 3648 // Ordered so clearing the page cache will always be the last action. |
