Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ALTER TABLE {$NAMESPACE}_legalpad.legalpad_documentsignature
ADD phid VARBINARY(64) NOT NULL;
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
<?php

$phid_type = PhabricatorLegalpadDocumentSignaturePHIDType::TYPECONST;

$docsig_table = new LegalpadDocumentSignature();

$conn = $docsig_table->establishConnection('w');
$table_name = $docsig_table->getTableName();

$chunk_size = 4096;

$temporary_table = 'tmp_20210802_docsig_id_map';

try {
queryfx(
$conn,
'CREATE TEMPORARY TABLE %T (
document_signature_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
document_signature_phid VARBINARY(64) NOT NULL)',
$temporary_table);
} catch (AphrontAccessDeniedQueryException $ex) {
throw new PhutilProxyException(
pht(
'Failed to "CREATE TEMPORARY TABLE". You may need to "GRANT" the '.
'current MySQL user this permission.'),
$ex);
}

$table_iterator = id(new LiskRawMigrationIterator($conn, $table_name))
->setPageSize($chunk_size);

$chunk_iterator = new PhutilChunkedIterator($table_iterator, $chunk_size);
foreach ($chunk_iterator as $chunk) {

$map = array();
foreach ($chunk as $docsig_row) {
$phid = $docsig_row['phid'];

if (strlen($phid)) {
continue;
}

$phid = PhabricatorPHID::generateNewPHID($phid_type);
$id = $docsig_row['id'];

$map[(int)$id] = $phid;
}

if (!$map) {
continue;
}

$sql = array();
foreach ($map as $docsig_id => $docsig_phid) {
$sql[] = qsprintf(
$conn,
'(%d, %s)',
$docsig_id,
$docsig_phid);
}

queryfx(
$conn,
'TRUNCATE TABLE %T',
$temporary_table);

queryfx(
$conn,
'INSERT INTO %T (document_signature_id, document_signature_phid) VALUES %LQ',
$temporary_table,
$sql);

queryfx(
$conn,
'UPDATE %T c JOIN %T x ON c.id = x.document_signature_id
SET c.phid = x.document_signature_phid',
$table_name,
$temporary_table);
}
12 changes: 12 additions & 0 deletions src/__phutil_library_map__.php
Original file line number Diff line number Diff line change
Expand Up @@ -1721,6 +1721,7 @@
'LegalpadDocumentQuery' => 'applications/legalpad/query/LegalpadDocumentQuery.php',
'LegalpadDocumentRemarkupRule' => 'applications/legalpad/remarkup/LegalpadDocumentRemarkupRule.php',
'LegalpadDocumentRequireSignatureTransaction' => 'applications/legalpad/xaction/LegalpadDocumentRequireSignatureTransaction.php',
'LegalpadDocumentSearchConduitAPIMethod' => 'applications/legalpad/conduit/LegalpadDocumentSearchConduitAPIMethod.php',
'LegalpadDocumentSearchEngine' => 'applications/legalpad/query/LegalpadDocumentSearchEngine.php',
'LegalpadDocumentSignController' => 'applications/legalpad/controller/LegalpadDocumentSignController.php',
'LegalpadDocumentSignature' => 'applications/legalpad/storage/LegalpadDocumentSignature.php',
Expand All @@ -1740,6 +1741,7 @@
'LegalpadRequireSignatureHeraldAction' => 'applications/legalpad/herald/LegalpadRequireSignatureHeraldAction.php',
'LegalpadSchemaSpec' => 'applications/legalpad/storage/LegalpadSchemaSpec.php',
'LegalpadSignatureNeededByObjectEdgeType' => 'applications/legalpad/edge/LegalpadSignatureNeededByObjectEdgeType.php',
'LegalpadSignatureSearchConduitAPIMethod' => 'applications/legalpad/conduit/LegalpadSignatureSearchConduitAPIMethod.php',
'LegalpadTransaction' => 'applications/legalpad/storage/LegalpadTransaction.php',
'LegalpadTransactionComment' => 'applications/legalpad/storage/LegalpadTransactionComment.php',
'LegalpadTransactionQuery' => 'applications/legalpad/query/LegalpadTransactionQuery.php',
Expand Down Expand Up @@ -3657,8 +3659,11 @@
'PhabricatorLabelProfileMenuItem' => 'applications/search/menuitem/PhabricatorLabelProfileMenuItem.php',
'PhabricatorLanguageSettingsPanel' => 'applications/settings/panel/PhabricatorLanguageSettingsPanel.php',
'PhabricatorLegalpadApplication' => 'applications/legalpad/application/PhabricatorLegalpadApplication.php',
'PhabricatorLegalpadBodySearchEngineAttachment' => 'applications/legalpad/engineextension/PhabricatorLegalpadBodySearchEngineAttachment.php',
'PhabricatorLegalpadDocumentPHIDType' => 'applications/legalpad/phid/PhabricatorLegalpadDocumentPHIDType.php',
'PhabricatorLegalpadDocumentSignaturePHIDType' => 'applications/legalpad/phid/PhabricatorLegalpadDocumentSignaturePHIDType.php',
'PhabricatorLegalpadSignaturePolicyRule' => 'applications/legalpad/policyrule/PhabricatorLegalpadSignaturePolicyRule.php',
'PhabricatorLegalpadSignaturesSearchEngineAttachment' => 'applications/legalpad/engineextension/PhabricatorLegalpadSignaturesSearchEngineAttachment.php',
'PhabricatorLibraryTestCase' => '__tests__/PhabricatorLibraryTestCase.php',
'PhabricatorLinkProfileMenuItem' => 'applications/search/menuitem/PhabricatorLinkProfileMenuItem.php',
'PhabricatorLipsumArtist' => 'applications/lipsum/image/PhabricatorLipsumArtist.php',
Expand Down Expand Up @@ -7989,6 +7994,7 @@
'PhabricatorSubscribableInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorDestructibleInterface',
'PhabricatorConduitResultInterface',
),
'LegalpadDocumentBody' => array(
'LegalpadDAO',
Expand All @@ -8005,11 +8011,13 @@
'LegalpadDocumentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'LegalpadDocumentRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'LegalpadDocumentRequireSignatureTransaction' => 'LegalpadDocumentTransactionType',
'LegalpadDocumentSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod',
'LegalpadDocumentSearchEngine' => 'PhabricatorApplicationSearchEngine',
'LegalpadDocumentSignController' => 'LegalpadController',
'LegalpadDocumentSignature' => array(
'LegalpadDAO',
'PhabricatorPolicyInterface',
'PhabricatorConduitResultInterface',
),
'LegalpadDocumentSignatureAddController' => 'LegalpadController',
'LegalpadDocumentSignatureListController' => 'LegalpadController',
Expand All @@ -8027,6 +8035,7 @@
'LegalpadRequireSignatureHeraldAction' => 'HeraldAction',
'LegalpadSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'LegalpadSignatureNeededByObjectEdgeType' => 'PhabricatorEdgeType',
'LegalpadSignatureSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod',
'LegalpadTransaction' => 'PhabricatorModularTransaction',
'LegalpadTransactionComment' => 'PhabricatorApplicationTransactionComment',
'LegalpadTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
Expand Down Expand Up @@ -10230,8 +10239,11 @@
'PhabricatorLabelProfileMenuItem' => 'PhabricatorProfileMenuItem',
'PhabricatorLanguageSettingsPanel' => 'PhabricatorEditEngineSettingsPanel',
'PhabricatorLegalpadApplication' => 'PhabricatorApplication',
'PhabricatorLegalpadBodySearchEngineAttachment' => 'PhabricatorSearchEngineAttachment',
'PhabricatorLegalpadDocumentPHIDType' => 'PhabricatorPHIDType',
'PhabricatorLegalpadDocumentSignaturePHIDType' => 'PhabricatorPHIDType',
'PhabricatorLegalpadSignaturePolicyRule' => 'PhabricatorPolicyRule',
'PhabricatorLegalpadSignaturesSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment',
'PhabricatorLibraryTestCase' => 'PhutilLibraryTestCase',
'PhabricatorLinkProfileMenuItem' => 'PhabricatorProfileMenuItem',
'PhabricatorLipsumArtist' => 'Phobject',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

final class LegalpadDocumentSearchConduitAPIMethod
extends PhabricatorSearchEngineAPIMethod {

public function getAPIMethodName() {
return 'legalpad.document.search';
}

public function newSearchEngine() {
return new LegalpadDocumentSearchEngine();
}

public function getMethodSummary() {
return pht('Read information about legalpad documents.');
}

}
?>
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

final class LegalpadSignatureSearchConduitAPIMethod
extends PhabricatorSearchEngineAPIMethod {

public function getAPIMethodName() {
return 'legalpad.signature.search';
}

public function newSearchEngine() {
return new LegalpadDocumentSignatureSearchEngine();
}

public function getMethodSummary() {
return pht('Read information about legalpad document signatures.');
}

}
?>
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

final class PhabricatorLegalpadBodySearchEngineAttachment
extends PhabricatorSearchEngineAttachment {

public function getAttachmentName() {
return pht('Legalpad Document Body');
}

public function getAttachmentDescription() {
return pht('Get the full content for each document.');
}

public function willLoadAttachmentData($query, $spec) {
$query->needDocumentBodies(true);
}

public function getAttachmentForObject($object, $data, $spec) {
return array(
'body' => $object->getDocumentBody()->getText(),
'preamble' => $object->getPreamble(),
);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

final class PhabricatorLegalpadSignaturesSearchEngineAttachment
extends PhabricatorSearchEngineAttachment {

public function getAttachmentName() {
return pht('Document signers');
}

public function getAttachmentDescription() {
return pht('Get the signer list for the project.');
}

public function willLoadAttachmentData($query, $spec) {
$query->needSignatures(true);
}

public function getAttachmentForObject($object, $data, $spec) {
$signers = array();
foreach ($object->getSignatures() as $signature) {
$signatures[] = array(
'phid' => $signature->getPHID(),
'signerPHID' => $signature->getSignerPHID(),
'exemptionPHID' => $signature->getExemptionPHID(),
'isExemption' => $signature->getIsExemption(),
'signerName' => $signature->getSignerName(),
'signerEmail' => $signature->getSignerEmail(),
'documentVersion' => $signature->getDocumentVersion(),
'dateCreated' => (int)$signature->getDateCreated(),
);
}

return array(
'signatures' => $signatures
);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php

final class PhabricatorLegalpadDocumentSignaturePHIDType extends PhabricatorPHIDType {

const TYPECONST = 'LEGS';

public function getTypeName() {
return pht('Legalpad Signature');
}

public function getTypeIcon() {
return 'fa-file-text-o';
}

public function newObject() {
return new LegalpadDocumentSignature();
}

public function getPHIDTypeApplicationClass() {
return 'PhabricatorLegalpadApplication';
}

protected function buildQueryForObjects(
PhabricatorObjectQuery $query,
array $phids) {

return id(new LegalpadDocumentSignatureQuery())
->withPHIDs($phids);
}

public function loadHandles(
PhabricatorHandleQuery $query,
array $handles,
array $objects) {

foreach ($handles as $phid => $handle) {
$sig = $objects[$phid];
$id = $sig->getID();
$handle->setName("Signature ".$id);

$signerName = $sig->getSignerName();
$handle->setFullName("Signature {$id} by {$signerName}");
$handle->setURI("/legalpad/signature/{$id}");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ protected function buildQueryFromParameters(array $map) {
}

if ($map['contributorPHIDs']) {
$query->withContributorPHIDs($map['creatorPHIDs']);
$query->withContributorPHIDs($map['contributorPHIDs']);
}

if ($map['creatorPHIDs']) {
Expand Down
31 changes: 19 additions & 12 deletions src/applications/legalpad/query/LegalpadDocumentSignatureQuery.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ final class LegalpadDocumentSignatureQuery
extends PhabricatorCursorPagedPolicyAwareQuery {

private $ids;
private $phids;
private $documentPHIDs;
private $signerPHIDs;
private $documentVersions;
Expand All @@ -16,6 +17,11 @@ public function withIDs(array $ids) {
return $this;
}

public function withPHIDs(array $phids) {
$this->phids = $phids;
return $this;
}

public function withDocumentPHIDs(array $phids) {
$this->documentPHIDs = $phids;
return $this;
Expand Down Expand Up @@ -46,20 +52,14 @@ public function withEmailContains($text) {
return $this;
}

protected function loadPage() {
$table = new LegalpadDocumentSignature();
$conn_r = $table->establishConnection('r');

$data = queryfx_all(
$conn_r,
'SELECT * FROM %T %Q %Q %Q',
$table->getTableName(),
$this->buildWhereClause($conn_r),
$this->buildOrderClause($conn_r),
$this->buildLimitClause($conn_r));
public function newResultObject() {
return new LegalpadDocumentSignature();
}

protected function loadPage() {
$table = $this->newResultObject();
$data = $this->loadStandardPageRows($table);
$signatures = $table->loadAllFromArray($data);

return $signatures;
}

Expand Down Expand Up @@ -98,6 +98,13 @@ protected function buildWhereClause(AphrontDatabaseConnection $conn) {
$this->ids);
}

if ($this->phids !== null) {
$where[] = qsprintf(
$conn,
'phid IN (%Ls)',
$this->phids);
}

if ($this->documentPHIDs !== null) {
$where[] = qsprintf(
$conn,
Expand Down
Loading