mirror of
https://we.phorge.it/source/phorge.git
synced 2025-04-09 19:08:40 +02:00
Summary: The error was caused by the overlay lightbox, since it gives the possibility to share a comment on any file in any general Remarkup text, but that comment textarea is indeed empty as default. `strlen()` was used in Phabricator to check if a generic value is a non-empty string. This behavior is deprecated since PHP 8.1. Phorge adopts `phutil_nonempty_string()` as a replacement. Note: this may highlight other absurd input values that might be worth correcting instead of just ignoring. If phutil_nonempty_string() throws an exception in your instance, report it to Phorge to evaluate and fix that specific corner case. ``` EXCEPTION: (RuntimeException) strlen(): Passing null to parameter #1 ($string) of type string is deprecated at [<arcanist>/src/error/PhutilErrorHandler.php:261] arcanist(head=master, ref.master=97e163187418), phorge(head=T15498, ref.master=a25af8ccef69, ref.T15498=a25af8ccef69) #0 <#2> PhutilErrorHandler::handleError(integer, string, string, integer) called at [<phorge>/src/applications/files/controller/PhabricatorFileLightboxController.php:23] ``` Closes T15498 Test Plan: Visit a blog post with a file/image dropped in the content and click on the thumbnail. No error overlay dialog is displayed anymore. Reviewers: O1 Blessed Committers, valerio.bozzolan Reviewed By: O1 Blessed Committers, valerio.bozzolan Subscribers: speck, tobiaswiese, valerio.bozzolan, Matthew, Cigaryno Maniphest Tasks: T15498 Differential Revision: https://we.phorge.it/D25310
109 lines
2.9 KiB
PHP
109 lines
2.9 KiB
PHP
<?php
|
|
|
|
final class PhabricatorFileLightboxController
|
|
extends PhabricatorFileController {
|
|
|
|
public function shouldAllowPublic() {
|
|
return true;
|
|
}
|
|
|
|
public function handleRequest(AphrontRequest $request) {
|
|
$viewer = $request->getViewer();
|
|
$phid = $request->getURIData('phid');
|
|
$comment = $request->getStr('comment');
|
|
|
|
$file = id(new PhabricatorFileQuery())
|
|
->setViewer($viewer)
|
|
->withPHIDs(array($phid))
|
|
->executeOne();
|
|
if (!$file) {
|
|
return new Aphront404Response();
|
|
}
|
|
|
|
if (phutil_nonempty_string($comment)) {
|
|
$xactions = array();
|
|
$xactions[] = id(new PhabricatorFileTransaction())
|
|
->setTransactionType(PhabricatorTransactions::TYPE_COMMENT)
|
|
->attachComment(
|
|
id(new PhabricatorFileTransactionComment())
|
|
->setContent($comment));
|
|
|
|
$editor = id(new PhabricatorFileEditor())
|
|
->setActor($viewer)
|
|
->setContinueOnNoEffect(true)
|
|
->setContentSourceFromRequest($request);
|
|
|
|
$editor->applyTransactions($file, $xactions);
|
|
}
|
|
|
|
$transactions = id(new PhabricatorFileTransactionQuery())
|
|
->withTransactionTypes(array(PhabricatorTransactions::TYPE_COMMENT));
|
|
$timeline = $this->buildTransactionTimeline($file, $transactions);
|
|
|
|
$comment_form = $this->renderCommentForm($file);
|
|
|
|
$info = phutil_tag(
|
|
'div',
|
|
array(
|
|
'class' => 'phui-comment-panel-header',
|
|
),
|
|
$file->getName());
|
|
|
|
require_celerity_resource('phui-comment-panel-css');
|
|
$content = phutil_tag(
|
|
'div',
|
|
array(
|
|
'class' => 'phui-comment-panel',
|
|
),
|
|
array(
|
|
$info,
|
|
$timeline,
|
|
$comment_form,
|
|
));
|
|
|
|
return id(new AphrontAjaxResponse())
|
|
->setContent($content);
|
|
}
|
|
|
|
private function renderCommentForm(PhabricatorFile $file) {
|
|
$viewer = $this->getViewer();
|
|
|
|
if (!$viewer->isLoggedIn()) {
|
|
$login_href = id(new PhutilURI('/auth/start/'))
|
|
->replaceQueryParam('next', '/'.$file->getMonogram());
|
|
return id(new PHUIFormLayoutView())
|
|
->addClass('phui-comment-panel-empty')
|
|
->appendChild(
|
|
id(new PHUIButtonView())
|
|
->setTag('a')
|
|
->setText(pht('Log In to Comment'))
|
|
->setHref((string)$login_href));
|
|
}
|
|
|
|
$draft = PhabricatorDraft::newFromUserAndKey(
|
|
$viewer,
|
|
$file->getPHID());
|
|
$post_uri = $this->getApplicationURI('thread/'.$file->getPHID().'/');
|
|
|
|
$form = id(new AphrontFormView())
|
|
->setUser($viewer)
|
|
->setAction($post_uri)
|
|
->addSigil('lightbox-comment-form')
|
|
->addClass('lightbox-comment-form')
|
|
->setWorkflow(true)
|
|
->appendChild(
|
|
id(new PhabricatorRemarkupControl())
|
|
->setUser($viewer)
|
|
->setName('comment')
|
|
->setValue($draft->getDraft()))
|
|
->appendChild(
|
|
id(new AphrontFormSubmitControl())
|
|
->setValue(pht('Comment')));
|
|
|
|
$view = phutil_tag_div('phui-comment-panel', $form);
|
|
|
|
return $view;
|
|
|
|
}
|
|
|
|
}
|