diff --git a/src/__celerity_resource_map__.php b/src/__celerity_resource_map__.php index 080c6578b7..22585a759a 100644 --- a/src/__celerity_resource_map__.php +++ b/src/__celerity_resource_map__.php @@ -927,7 +927,7 @@ celerity_register_resource_map(array( ), 'conpherence-message-pane-css' => array( - 'uri' => '/res/cbd704df/rsrc/css/application/conpherence/message-pane.css', + 'uri' => '/res/3a94564a/rsrc/css/application/conpherence/message-pane.css', 'type' => 'css', 'requires' => array( @@ -1294,7 +1294,7 @@ celerity_register_resource_map(array( ), 'javelin-behavior-conpherence-menu' => array( - 'uri' => '/res/567585ab/rsrc/js/application/conpherence/behavior-menu.js', + 'uri' => '/res/f27205d4/rsrc/js/application/conpherence/behavior-menu.js', 'type' => 'js', 'requires' => array( diff --git a/src/applications/conpherence/constants/ConpherenceTransactionType.php b/src/applications/conpherence/constants/ConpherenceTransactionType.php index 22fea9b527..de23bd78a8 100644 --- a/src/applications/conpherence/constants/ConpherenceTransactionType.php +++ b/src/applications/conpherence/constants/ConpherenceTransactionType.php @@ -8,6 +8,7 @@ final class ConpherenceTransactionType extends ConpherenceConstants { const TYPE_FILES = 'files'; const TYPE_TITLE = 'title'; const TYPE_PARTICIPANTS = 'participants'; + const TYPE_DATE_MARKER = 'date-marker'; /* these two are deprecated but keep them around for legacy installs */ const TYPE_PICTURE = 'picture'; diff --git a/src/applications/conpherence/controller/ConpherenceController.php b/src/applications/conpherence/controller/ConpherenceController.php index 6d2b1cd69f..b2e0f49b3e 100644 --- a/src/applications/conpherence/controller/ConpherenceController.php +++ b/src/applications/conpherence/controller/ConpherenceController.php @@ -108,13 +108,41 @@ abstract class ConpherenceController extends PhabricatorController { } } $engine->process(); + // we're going to insert a dummy date marker transaction for breaks + // between days. some setup required! + $previous_transaction = null; + $date_marker_transaction = id(new ConpherenceTransaction()) + ->setTransactionType(ConpherenceTransactionType::TYPE_DATE_MARKER) + ->makeEphemeral(); + $date_marker_transaction_view = id(new ConpherenceTransactionView()) + ->setUser($user) + ->setConpherenceTransaction($date_marker_transaction) + ->setHandles($handles) + ->setMarkupEngine($engine); foreach ($transactions as $transaction) { + if ($previous_transaction) { + $previous_day = phabricator_format_local_time( + $previous_transaction->getDateCreated(), + $user, + 'Ymd'); + $current_day = phabricator_format_local_time( + $transaction->getDateCreated(), + $user, + 'Ymd'); + // date marker transaction time! + if ($previous_day != $current_day) { + $date_marker_transaction->setDateCreated( + $transaction->getDateCreated()); + $rendered_transactions[] = $date_marker_transaction_view->render(); + } + } $rendered_transactions[] = id(new ConpherenceTransactionView()) ->setUser($user) ->setConpherenceTransaction($transaction) ->setHandles($handles) ->setMarkupEngine($engine) ->render(); + $previous_transaction = $transaction; } $latest_transaction_id = $transaction->getID(); diff --git a/src/applications/conpherence/storage/ConpherenceTransaction.php b/src/applications/conpherence/storage/ConpherenceTransaction.php index 5a0d9756b6..a910de32a8 100644 --- a/src/applications/conpherence/storage/ConpherenceTransaction.php +++ b/src/applications/conpherence/storage/ConpherenceTransaction.php @@ -39,6 +39,7 @@ final class ConpherenceTransaction extends PhabricatorApplicationTransaction { case ConpherenceTransactionType::TYPE_PARTICIPANTS: return ($old === null); case ConpherenceTransactionType::TYPE_TITLE: + case ConpherenceTransactionType::TYPE_DATE_MARKER: return false; case ConpherenceTransactionType::TYPE_FILES: return true; @@ -142,6 +143,7 @@ final class ConpherenceTransaction extends PhabricatorApplicationTransaction { switch ($this->getTransactionType()) { case ConpherenceTransactionType::TYPE_TITLE: case ConpherenceTransactionType::TYPE_FILES: + case ConpherenceTransactionType::TYPE_DATE_MARKER: break; case ConpherenceTransactionType::TYPE_PARTICIPANTS: $phids = array_merge($phids, $this->getOldValue()); diff --git a/src/applications/conpherence/view/ConpherenceTransactionView.php b/src/applications/conpherence/view/ConpherenceTransactionView.php index 94bb71e815..54cba87c2d 100644 --- a/src/applications/conpherence/view/ConpherenceTransactionView.php +++ b/src/applications/conpherence/view/ConpherenceTransactionView.php @@ -32,12 +32,33 @@ final class ConpherenceTransactionView extends AphrontView { } public function render() { + $user = $this->getUser(); $transaction = $this->getConpherenceTransaction(); + switch ($transaction->getTransactionType()) { + case ConpherenceTransactionType::TYPE_DATE_MARKER: + return phutil_tag( + 'div', + array( + 'class' => 'date-marker' + ), + array( + phutil_tag( + 'span', + array( + 'class' => 'date', + ), + phabricator_format_local_time( + $transaction->getDateCreated(), + $user, + 'M jS, Y')))); + break; + } + $handles = $this->getHandles(); $transaction->setHandles($handles); $author = $handles[$transaction->getAuthorPHID()]; $transaction_view = id(new PhabricatorTransactionView()) - ->setUser($this->getUser()) + ->setUser($user) ->setEpoch($transaction->getDateCreated()) ->setContentSource($transaction->getContentSource()); diff --git a/webroot/rsrc/css/application/conpherence/message-pane.css b/webroot/rsrc/css/application/conpherence/message-pane.css index 74affd7510..696568b767 100644 --- a/webroot/rsrc/css/application/conpherence/message-pane.css +++ b/webroot/rsrc/css/application/conpherence/message-pane.css @@ -133,6 +133,22 @@ margin-left: 45px; } +.conpherence-message-pane .date-marker { + border-top: 1px solid #bfbfbf; + margin: 5px 15px; + min-height: auto; +} +.conpherence-message-pane .date-marker .date { + position: relative; + top: -8px; + left: 45px; + background-color: #FFF; + width: auto; + color: #BFBFBF; + font-size: 11px; + padding: 0px 5px; +} + .device-phone .conpherence-message-pane .phabricator-transaction-detail { min-height: auto; }