From 1136a401d9f7f98cca09248ee5216b52200e958c Mon Sep 17 00:00:00 2001 From: atif-shaikh Date: Tue, 16 Dec 2014 12:15:04 +0530 Subject: [PATCH] CRM-15598 - Allow relative URL's for Link custom fields https://issues.civicrm.org/jira/browse/CRM-15598 --- CRM/Utils/Rule.php | 4 ++++ js/Common.js | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/CRM/Utils/Rule.php b/CRM/Utils/Rule.php index a4111ce3ea..d58c86a637 100644 --- a/CRM/Utils/Rule.php +++ b/CRM/Utils/Rule.php @@ -153,6 +153,10 @@ class CRM_Utils_Rule { * @return bool */ static function url($url) { + if (preg_match('/^\//', $url)) { + // allow relative URL's (CRM-15598) + $url = 'http://' . $_SERVER['HTTP_HOST'] . $url; + } return (bool) filter_var($url, FILTER_VALIDATE_URL); } diff --git a/js/Common.js b/js/Common.js index 9586f9c588..11c6c5d5e3 100644 --- a/js/Common.js +++ b/js/Common.js @@ -613,6 +613,16 @@ CRM.strings = CRM.strings || {}; } } + //CRM-15598 - Override url validator method to allow relative url's (e.g. /index.htm) + $.validator.addMethod("url", function(value, element) { + if (/^\//.test(value)) { + // Relative url: prepend dummy path for validation. + value = 'http://domain.tld' + value; + } + // From jQuery Validation Plugin v1.12.0 + return this.optional(element) || /^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value); + }); + /** * Wrapper for jQuery validate initialization function; supplies defaults */ -- 2.25.1