From 368cfd8facac4e69a00b1d6c0e7eb43299e61cf4 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 16 Mar 2011 02:41:32 -0700 Subject: [PATCH] * Extended profile - make cloned datefields work correctly with calendar popup * Validate URLs --- .../ExtendedProfile/extendedprofilewidget.php | 1 + plugins/ExtendedProfile/js/profiledetail.js | 23 +++++++++++++++++++ .../profiledetailsettingsaction.php | 15 +++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index 7f62d3eae4..1ef6440ed6 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -369,6 +369,7 @@ class ExtendedProfileWidget extends Form ); $this->out->element('div', 'label', _m('End')); + $this->out->input( $id . '-end', null, diff --git a/plugins/ExtendedProfile/js/profiledetail.js b/plugins/ExtendedProfile/js/profiledetail.js index e1b06562e0..99a3f78a43 100644 --- a/plugins/ExtendedProfile/js/profiledetail.js +++ b/plugins/ExtendedProfile/js/profiledetail.js @@ -46,7 +46,13 @@ SN_EXTENDED.replaceIndex = function(elem, oldIndex, newIndex) { SN_EXTENDED.resetRow = function(elem) { $(elem).find('input, textarea').attr('value', ''); + $(elem).find('input').removeAttr('disabled'); $(elem).find("select option[value='office']").attr("selected", true); + $(elem).find("input:checkbox").attr('checked', false); + $(elem).find("input[name$=-start], input[name$=-end]").each(function() { + $(this).removeClass('hasDatepicker'); + $(this).datepicker({ dateFormat: 'd M yy' }); + }); }; SN_EXTENDED.addRow = function() { @@ -118,4 +124,21 @@ $(document).ready(function() { $('.add_row').live('click', SN_EXTENDED.addRow); $('.remove_row').live('click', SN_EXTENDED.removeRow); + $('input:checkbox[name$=current]').each(function() { + var input = $(this).parent().siblings('input[id$=-end]'); + if ($(this).is(':checked')) { + $(input).attr('disabled', 'true'); + } + }); + + $('input:checkbox[name$=current]').live('click', function() { + var input = $(this).parent().siblings('input[id$=-end]'); + if ($(this).is(':checked')) { + $(input).val(''); + $(input).attr('disabled', 'true'); + } else { + $(input).removeAttr('disabled'); + } + }); + }); diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index 719717e088..7b03f247ed 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -262,6 +262,14 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $this->removeAll($user, 'website'); $i = 0; foreach($sites as $site) { + + if (!Validate::uri( + $site['value'], + array('allowed_schemes' => array('http', 'https'))) + ) { + throw new Exception(sprintf(_m('Invalid URL: %s'), $site['value'])); + } + if (!empty($site['value'])) { ++$i; $this->saveField( @@ -287,7 +295,12 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $expArray = array(); foreach ($experiences as $exp) { - list($company, $current, $end, $start) = array_values($exp); + if (sizeof($experiences) == 4) { + list($company, $current, $end, $start) = array_values($exp); + } else { + $end = null; + list($company, $current, $start) = array_values($exp); + } if (!empty($company)) { $expArray[] = array( 'company' => $company, -- 2.39.5