Api: Add some extra parameters to Merge::merge_entries() so overridding classes can still use the parent method, passing in IDs & merge object

This commit is contained in:
nathan 2021-08-09 13:44:43 -06:00
parent c261f1d240
commit 79c9eb9e9b

View File

@ -2333,14 +2333,19 @@ abstract class Merge
/**
* Merge the selected IDs into the given document, save it to the VFS, then
* either open it in the editor or have the browser download the file.
*
* @param String[]|null $ids Allows extending classes to process IDs in their own way. Leave null to pull from request.
* @param Merge|null $document_merge Already instantiated Merge object to do the merge.
* @throws Api\Exception
* @throws Api\Exception\AssertionFailed
*/
public static function merge_entries()
public static function merge_entries(array $ids = null, Merge &$document_merge = null)
{
if (class_exists($_REQUEST['merge']) && is_subclass_of($_REQUEST['merge'], 'EGroupware\\Api\\Storage\\Merge'))
if (is_null($document_merge) && class_exists($_REQUEST['merge']) && is_subclass_of($_REQUEST['merge'], 'EGroupware\\Api\\Storage\\Merge'))
{
$document_merge = new $_REQUEST['merge']();
}
else
elseif (is_null($document_merge))
{
$document_merge = new Api\Contacts\Merge();
}
@ -2351,13 +2356,16 @@ abstract class Merge
return;
}
$ids = is_string($_REQUEST['id']) && strpos($_REQUEST['id'],'[') === FALSE ? explode(',',$_REQUEST['id']) : json_decode($_REQUEST['id'],true);
if(is_null(($ids)))
{
$ids = is_string($_REQUEST['id']) && strpos($_REQUEST['id'], '[') === FALSE ? explode(',', $_REQUEST['id']) : json_decode($_REQUEST['id'], true);
}
if($_REQUEST['select_all'] === 'true')
{
$ids = self::get_all_ids($document_merge);
}
$filename = '';
$filename = $document_merge->get_filename($_REQUEST['document']);
$result = $document_merge->merge_file($_REQUEST['document'], $ids, $filename, '', $header);
if(!is_file($result) || !is_readable($result))
@ -2412,6 +2420,17 @@ abstract class Merge
}
}
/**
* Generate a filename for the merged file
*
* Default is just the name of the template
* @return string
*/
protected function get_filename($document) : string
{
return '';
}
/**
* Get all ids for when they try to do 'Select All', then merge into document
*