Page MenuHomePhabricator

D13088.id31580.diff
No OneTemporary

D13088.id31580.diff

diff --git a/src/applications/calendar/controller/PhabricatorCalendarEventEditController.php b/src/applications/calendar/controller/PhabricatorCalendarEventEditController.php
--- a/src/applications/calendar/controller/PhabricatorCalendarEventEditController.php
+++ b/src/applications/calendar/controller/PhabricatorCalendarEventEditController.php
@@ -17,11 +17,13 @@
$viewer = $request->getViewer();
$user_phid = $viewer->getPHID();
$error_name = true;
+ $error_recurrence_end_date = true;
$error_start_date = true;
$error_end_date = true;
$validation_exception = null;
$is_recurring_id = celerity_generate_unique_node_id();
+ $recurrence_end_date_id = celerity_generate_unique_node_id();
$frequency_id = celerity_generate_unique_node_id();
$all_day_id = celerity_generate_unique_node_id();
$start_date_id = celerity_generate_unique_node_id();
@@ -138,6 +140,7 @@
$start_value = AphrontFormDateControlValue::newFromEpoch(
$viewer,
$event->getDateFrom());
+ $recurrence_end_date_value = clone $start_value;
$submit_label = pht('Update');
$page_title = pht('Update Event');
@@ -179,6 +182,9 @@
$end_value = AphrontFormDateControlValue::newFromRequest(
$request,
'end');
+ $recurrence_end_date_value = AphrontFormDateControlValue::newFromRequest(
+ $request,
+ 'recurrenceEndDate');
$description = $request->getStr('description');
$subscribers = $request->getArr('subscribers');
$edit_policy = $request->getStr('editPolicy');
@@ -230,6 +236,11 @@
$xactions[] = id(new PhabricatorCalendarEventTransaction())
->setTransactionType(
+ PhabricatorCalendarEventTransaction::TYPE_RECURRENCE_END_DATE)
+ ->setNewValue($recurrence_end_date_value);
+
+ $xactions[] = id(new PhabricatorCalendarEventTransaction())
+ ->setTransactionType(
PhabricatorCalendarEventTransaction::TYPE_END_DATE)
->setNewValue($end_value);
@@ -288,6 +299,8 @@
PhabricatorCalendarEventTransaction::TYPE_START_DATE);
$error_end_date = $ex->getShortMessage(
PhabricatorCalendarEventTransaction::TYPE_END_DATE);
+ $error_recurrence_end_date = $ex->getShortMessage(
+ PhabricatorCalendarEventTransaction::TYPE_RECURRENCE_END_DATE);
$event->setViewPolicy($view_policy);
$event->setEditPolicy($edit_policy);
@@ -303,6 +316,7 @@
Javelin::initBehavior('recurring-edit', array(
'isRecurring' => $is_recurring_id,
'frequency' => $frequency_id,
+ 'recurrenceEndDate' => $recurrence_end_date_id,
));
$is_recurring_checkbox = id(new AphrontFormCheckboxControl())
@@ -313,6 +327,16 @@
$is_recurring,
$is_recurring_id);
+ $recurrence_end_date_control = id(new AphrontFormDateControl())
+ ->setUser($viewer)
+ ->setName('recurrenceEnd')
+ ->setLabel(pht('Recurrence End Date'))
+ ->setError($error_recurrence_end_date)
+ ->setValue($recurrence_end_date_value)
+ ->setID($recurrence_end_date_id)
+ ->setIsTimeDisabled(true)
+ ->setIsDisabled(!$is_recurring);
+
$recurrence_frequency_select = id(new AphrontFormSelectControl())
->setName('frequency')
->setOptions(array(
@@ -412,6 +436,7 @@
->appendChild($name)
->appendChild($is_recurring_checkbox)
->appendChild($recurrence_frequency_select)
+ ->appendChild($recurrence_end_date_control)
->appendChild($all_day_checkbox)
->appendChild($start_control)
->appendChild($end_control)
diff --git a/src/view/form/control/AphrontFormDateControl.php b/src/view/form/control/AphrontFormDateControl.php
--- a/src/view/form/control/AphrontFormDateControl.php
+++ b/src/view/form/control/AphrontFormDateControl.php
@@ -23,6 +23,11 @@
return $this;
}
+ public function setIsDisabled($is_datepicker_disabled) {
+ $this->isDisabled = $is_datepicker_disabled;
+ return $this;
+ }
+
public function setEndDateID($value) {
$this->endDateID = $value;
return $this;
diff --git a/webroot/rsrc/js/application/calendar/behavior-recurring-edit.js b/webroot/rsrc/js/application/calendar/behavior-recurring-edit.js
--- a/webroot/rsrc/js/application/calendar/behavior-recurring-edit.js
+++ b/webroot/rsrc/js/application/calendar/behavior-recurring-edit.js
@@ -5,10 +5,13 @@
JX.behavior('recurring-edit', function(config) {
var checkbox = JX.$(config.isRecurring);
+
JX.DOM.listen(checkbox, 'change', null, function() {
var frequency = JX.$(config.frequency);
+ var end_date = JX.$(config.recurrenceEndDate);
frequency.disabled = checkbox.checked ? false : true;
+ JX.DOM.alterClass(end_date, 'datepicker-disabled', !checkbox.checked);
});
});

File Metadata

Mime Type
text/plain
Expires
Fri, Apr 4, 2:44 PM (4 d, 35 m ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7691220
Default Alt Text
D13088.id31580.diff (4 KB)

Event Timeline