comparison includes/common.inc @ 19:3edae6ecd6c6 6.9

Drupal 6.9
author Franck Deroche <franck@defr.org>
date Thu, 15 Jan 2009 10:15:56 +0100
parents 8e6257f3ae39
children
comparison
equal deleted inserted replaced
18:f5131a9cd9e5 19:3edae6ecd6c6
1 <?php 1 <?php
2 // $Id: common.inc,v 1.756.2.37 2008/12/11 17:39:42 goba Exp $ 2 // $Id: common.inc,v 1.756.2.42 2009/01/14 23:34:07 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 *
412 * @return 412 * @return
413 * An object containing the HTTP request headers, response code, headers, 413 * An object containing the HTTP request headers, response code, headers,
414 * data and redirect status. 414 * data and redirect status.
415 */ 415 */
416 function drupal_http_request($url, $headers = array(), $method = 'GET', $data = NULL, $retry = 3) { 416 function drupal_http_request($url, $headers = array(), $method = 'GET', $data = NULL, $retry = 3) {
417 static $self_test = FALSE;
418 $result = new stdClass(); 417 $result = new stdClass();
419 // Try to clear the drupal_http_request_fails variable if it's set. We
420 // can't tie this call to any error because there is no surefire way to
421 // tell whether a request has failed, so we add the check to places where
422 // some parsing has failed.
423 if (!$self_test && variable_get('drupal_http_request_fails', FALSE)) {
424 $self_test = TRUE;
425 $works = module_invoke('system', 'check_http_request');
426 $self_test = FALSE;
427 if (!$works) {
428 // Do not bother with further operations if we already know that we
429 // have no chance.
430 $result->error = t("The server can't issue HTTP requests");
431 return $result;
432 }
433 }
434 418
435 // Parse the URL and make sure we can handle the schema. 419 // Parse the URL and make sure we can handle the schema.
436 $uri = parse_url($url); 420 $uri = parse_url($url);
437 421
438 if ($uri == FALSE) { 422 if ($uri == FALSE) {
466 if (!$fp) { 450 if (!$fp) {
467 // When a network error occurs, we use a negative number so it does not 451 // When a network error occurs, we use a negative number so it does not
468 // clash with the HTTP status codes. 452 // clash with the HTTP status codes.
469 $result->code = -$errno; 453 $result->code = -$errno;
470 $result->error = trim($errstr); 454 $result->error = trim($errstr);
455
456 // Mark that this request failed. This will trigger a check of the web
457 // server's ability to make outgoing HTTP requests the next time that
458 // requirements checking is performed.
459 // @see system_requirements()
460 variable_set('drupal_http_request_fails', TRUE);
461
471 return $result; 462 return $result;
472 } 463 }
473 464
474 // Construct the path to act on. 465 // Construct the path to act on.
475 $path = isset($uri['path']) ? $uri['path'] : '/'; 466 $path = isset($uri['path']) ? $uri['path'] : '/';
682 * Any text within t() can be extracted by translators and changed into 673 * Any text within t() can be extracted by translators and changed into
683 * the equivalent text in their native language. 674 * the equivalent text in their native language.
684 * 675 *
685 * Special variables called "placeholders" are used to signal dynamic 676 * Special variables called "placeholders" are used to signal dynamic
686 * information in a string which should not be translated. Placeholders 677 * information in a string which should not be translated. Placeholders
687 * can also be used for text that may change from time to time 678 * can also be used for text that may change from time to time (such as
688 * (such as link paths) to be changed without requiring updates to translations. 679 * link paths) to be changed without requiring updates to translations.
689 * 680 *
690 * For example: 681 * For example:
691 * @code 682 * @code
692 * $output = t('There are currently %members and %visitors online.', array( 683 * $output = t('There are currently %members and %visitors online.', array(
693 * '%members' => format_plural($total_users, '1 user', '@count users'), 684 * '%members' => format_plural($total_users, '1 user', '@count users'),
699 * useful for inserting variables into things like e-mail. 690 * useful for inserting variables into things like e-mail.
700 * @code 691 * @code
701 * $message[] = t("If you don't want to receive such e-mails, you can change your settings at !url.", array('!url' => url("user/$account->uid", array('absolute' => TRUE)))); 692 * $message[] = t("If you don't want to receive such e-mails, you can change your settings at !url.", array('!url' => url("user/$account->uid", array('absolute' => TRUE))));
702 * @endcode 693 * @endcode
703 * 694 *
704 * - @variable, which indicates that the text should be run through check_plain, 695 * - @variable, which indicates that the text should be run through
705 * to escape HTML characters. Use this for any output that's displayed within 696 * check_plain, to escape HTML characters. Use this for any output that's
706 * a Drupal page. 697 * displayed within a Drupal page.
707 * @code 698 * @code
708 * drupal_set_title($title = t("@name's blog", array('@name' => $account->name))); 699 * drupal_set_title($title = t("@name's blog", array('@name' => $account->name)));
709 * @endcode 700 * @endcode
710 * 701 *
711 * - %variable, which indicates that the string should be HTML escaped and 702 * - %variable, which indicates that the string should be HTML escaped and
714 * @code 705 * @code
715 * $message = t('%name-from sent %name-to an e-mail.', array('%name-from' => $user->name, '%name-to' => $account->name)); 706 * $message = t('%name-from sent %name-to an e-mail.', array('%name-from' => $user->name, '%name-to' => $account->name));
716 * @endcode 707 * @endcode
717 * 708 *
718 * When using t(), try to put entire sentences and strings in one t() call. 709 * When using t(), try to put entire sentences and strings in one t() call.
719 * This makes it easier for translators, as it provides context as to what each 710 * This makes it easier for translators, as it provides context as to what
720 * word refers to. HTML markup within translation strings is allowed, but should 711 * each word refers to. HTML markup within translation strings is allowed, but
721 * be avoided if possible. The exception are embedded links; link titles add a 712 * should be avoided if possible. The exception are embedded links; link
722 * context for translators, so should be kept in the main string. 713 * titles add a context for translators, so should be kept in the main string.
723 * 714 *
724 * Here is an example of incorrect usage of t(): 715 * Here is an example of incorrect usage of t():
725 * @code 716 * @code
726 * $output .= t('<p>Go to the @contact-page.</p>', array('@contact-page' => l(t('contact page'), 'contact'))); 717 * $output .= t('<p>Go to the @contact-page.</p>', array('@contact-page' => l(t('contact page'), 'contact')));
727 * @endcode 718 * @endcode
840 * 831 *
841 * @param $string 832 * @param $string
842 * A string containing the English string to translate. 833 * A string containing the English string to translate.
843 * @param $args 834 * @param $args
844 * An associative array of replacements to make after translation. Incidences 835 * An associative array of replacements to make after translation. Incidences
845 * of any key in this array are replaced with the corresponding value. 836 * of any key in this array are replaced with the corresponding value. Based
846 * Based on the first character of the key, the value is escaped and/or themed: 837 * on the first character of the key, the value is escaped and/or themed:
847 * - !variable: inserted as is 838 * - !variable: inserted as is
848 * - @variable: escape plain text to HTML (check_plain) 839 * - @variable: escape plain text to HTML (check_plain)
849 * - %variable: escape text and theme as a placeholder for user-submitted 840 * - %variable: escape text and theme as a placeholder for user-submitted
850 * content (check_plain + theme_placeholder) 841 * content (check_plain + theme_placeholder)
851 * @param $langcode 842 * @param $langcode
929 /** 920 /**
930 * Verify the syntax of the given URL. 921 * Verify the syntax of the given URL.
931 * 922 *
932 * This function should only be used on actual URLs. It should not be used for 923 * This function should only be used on actual URLs. It should not be used for
933 * Drupal menu paths, which can contain arbitrary characters. 924 * Drupal menu paths, which can contain arbitrary characters.
925 * Valid values per RFC 3986.
934 * 926 *
935 * @param $url 927 * @param $url
936 * The URL to verify. 928 * The URL to verify.
937 * @param $absolute 929 * @param $absolute
938 * Whether the URL is absolute (beginning with a scheme such as "http:"). 930 * Whether the URL is absolute (beginning with a scheme such as "http:").
939 * @return 931 * @return
940 * TRUE if the URL is in a valid format. 932 * TRUE if the URL is in a valid format.
941 */ 933 */
942 function valid_url($url, $absolute = FALSE) { 934 function valid_url($url, $absolute = FALSE) {
943 $allowed_characters = '[a-z0-9\/:_\-_\.\?\$,;~=#&%\+]';
944 if ($absolute) { 935 if ($absolute) {
945 return preg_match("/^(http|https|ftp):\/\/". $allowed_characters ."+$/i", $url); 936 return (bool)preg_match("
937 /^ # Start at the beginning of the text
938 (?:ftp|https?):\/\/ # Look for ftp, http, or https schemes
939 (?: # Userinfo (optional) which is typically
940 (?:(?:[\w\.\-\+!$&'\(\)*\+,;=]|%[0-9a-f]{2})+:)* # a username or a username and password
941 (?:[\w\.\-\+%!$&'\(\)*\+,;=]|%[0-9a-f]{2})+@ # combination
942 )?
943 (?:
944 (?:[a-z0-9\-\.]|%[0-9a-f]{2})+ # A domain name or a IPv4 address
945 |(?:\[(?:[0-9a-f]{0,4}:)*(?:[0-9a-f]{0,4})\]) # or a well formed IPv6 address
946 )
947 (?::[0-9]+)? # Server port number (optional)
948 (?:[\/|\?]
949 (?:[\w#!:\.\?\+=&@$'~*,;\/\(\)\[\]\-]|%[0-9a-f]{2}) # The path and query (optional)
950 *)?
951 $/xi", $url);
946 } 952 }
947 else { 953 else {
948 return preg_match("/^". $allowed_characters ."+$/i", $url); 954 return (bool)preg_match("/^(?:[\w#!:\.\?\+=&@$'~*,;\/\(\)\[\]\-]|%[0-9a-f]{2})+$/i", $url);
949 } 955 }
950 } 956 }
957
951 958
952 /** 959 /**
953 * @} End of "defgroup validation". 960 * @} End of "defgroup validation".
954 */ 961 */
955 962