本文整理汇总了PHP中CRM_Utils_File::makeFileName方法的典型用法代码示例。如果您正苦于以下问题:PHP CRM_Utils_File::makeFileName方法的具体用法?PHP CRM_Utils_File::makeFileName怎么用?PHP CRM_Utils_File::makeFileName使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CRM_Utils_File
的用法示例。
在下文中一共展示了CRM_Utils_File::makeFileName方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: upload
public static function upload($params)
{
if (!$_FILES) {
throw new CRM_Extension_Exception('Sorry, the file you uploaded was too large or invalid. Code 1', 500);
}
if (empty($_FILES['file']['size'])) {
throw new CRM_Extension_Exception('Sorry, the file you uploaded was too large or invalid. Code 2', 500);
}
$tempFile = $_FILES['file']['tmp_name'];
$originalFilename = CRM_Simplemail_BAO_SimpleMailHelper::cleanFilename($_FILES['file']['name']);
$fileName = CRM_Utils_File::makeFileName(CRM_Simplemail_BAO_SimpleMailHelper::cleanFilename($_FILES['file']['name']));
$dirName = CRM_Simplemail_BAO_SimpleMailHelper::getUploadDirPath(static::DIRECTORY);
// Create the upload directory, if it doesn't already exist
CRM_Utils_File::createDir($dirName);
$file = $dirName . $fileName;
// Move the uploaded file to the upload directory
if (move_uploaded_file($tempFile, $file)) {
$url = CRM_Simplemail_BAO_SimpleMailHelper::getUploadUrl($fileName, static::DIRECTORY);
$databaseId = static::saveToDatabase($params['simplemail_id'], $originalFilename, $url);
$result['values'] = array(array('url' => $url, 'filename' => $originalFilename, 'databaseId' => $databaseId));
return $result;
} else {
throw new CRM_Extension_Exception('Failed to move the uploaded file', 500);
}
}
开发者ID:jaapjansma,项目名称:uk.co.compucorp.civicrm.simplemail,代码行数:25,代码来源:SimpleMailInlineAttachment.php
示例2: processUpload
/**
* handler for upload requests
*/
static function processUpload()
{
$config = self::getConfig();
global $http_return_code;
$files = array();
if ($_SERVER["REQUEST_METHOD"] == "GET") {
$dir = scandir($config['BASE_DIR']);
foreach ($dir as $file_name) {
//issue - https://github.com/veda-consulting/uk.co.vedaconsulting.mosaico/issues/28
//Change file name to unique by adding hash so every time uploading same image it will create new image name
$file_name = CRM_Utils_File::makeFileName($file_name);
$file_path = $config['BASE_DIR'] . $file_name;
if (is_file($file_path)) {
$size = filesize($file_path);
$file = ["name" => $file_name, "url" => $config['BASE_URL'] . $file_name, "size" => $size];
if (file_exists($config['BASE_DIR'] . $config[THUMBNAILS_DIR] . $file_name)) {
$file["thumbnailUrl"] = $config['BASE_URL'] . $config[THUMBNAILS_URL] . $file_name;
}
$files[] = $file;
}
}
} else {
if (!empty($_FILES)) {
foreach ($_FILES["files"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["files"]["tmp_name"][$key];
$file_name = $_FILES["files"]["name"][$key];
//issue - https://github.com/veda-consulting/uk.co.vedaconsulting.mosaico/issues/28
//Change file name to unique by adding hash so every time uploading same image it will create new image name
$file_name = CRM_Utils_File::makeFileName($file_name);
$file_path = $config['BASE_DIR'] . $file_name;
if (move_uploaded_file($tmp_name, $file_path) === TRUE) {
$size = filesize($file_path);
$image = new Imagick($file_path);
$image->resizeImage($config[THUMBNAIL_WIDTH], $config[THUMBNAIL_HEIGHT], Imagick::FILTER_LANCZOS, 1.0, TRUE);
// $image->writeImage( $config['BASE_DIR'] . $config[ THUMBNAILS_DIR ] . $file_name );
if ($f = fopen($config['BASE_DIR'] . $config[THUMBNAILS_DIR] . $file_name, "w")) {
$image->writeImageFile($f);
}
$image->destroy();
$file = array("name" => $file_name, "url" => $config['BASE_URL'] . $file_name, "size" => $size, "thumbnailUrl" => $config['BASE_URL'] . $config[THUMBNAILS_URL] . $file_name);
$files[] = $file;
} else {
$http_return_code = 500;
return;
}
} else {
$http_return_code = 400;
return;
}
}
}
}
header("Content-Type: application/json; charset=utf-8");
header("Connection: close");
echo json_encode(array("files" => $files));
CRM_Utils_System::civiExit();
}
示例3: getReportOutputAsCsv
/**
* @param $reportClass
* @param array $inputParams
*
* @return string
* @throws Exception
*/
public function getReportOutputAsCsv($reportClass, $inputParams)
{
$config = CRM_Core_Config::singleton();
$config->keyDisable = TRUE;
$controller = new CRM_Core_Controller_Simple($reportClass, ts('some title'));
$tmpReportVal = explode('_', $reportClass);
$reportName = array_pop($tmpReportVal);
$reportObj =& $controller->_pages[$reportName];
$tmpGlobals = array();
$tmpGlobals['_REQUEST']['force'] = 1;
$tmpGlobals['_GET'][$config->userFrameworkURLVar] = 'civicrm/placeholder';
$tmpGlobals['_SERVER']['QUERY_STRING'] = '';
if (!empty($inputParams['fields'])) {
$fields = implode(',', $inputParams['fields']);
$tmpGlobals['_GET']['fld'] = $fields;
$tmpGlobals['_GET']['ufld'] = 1;
}
if (!empty($inputParams['filters'])) {
foreach ($inputParams['filters'] as $key => $val) {
$tmpGlobals['_GET'][$key] = $val;
}
}
if (!empty($inputParams['group_bys'])) {
$groupByFields = implode(' ', $inputParams['group_bys']);
$tmpGlobals['_GET']['gby'] = $groupByFields;
}
CRM_Utils_GlobalStack::singleton()->push($tmpGlobals);
try {
$reportObj->storeResultSet();
$reportObj->buildForm();
$rows = $reportObj->getResultSet();
$tmpFile = $this->createTempDir() . CRM_Utils_File::makeFileName('CiviReport.csv');
$csvContent = CRM_Report_Utils_Report::makeCsv($reportObj, $rows);
file_put_contents($tmpFile, $csvContent);
} catch (Exception $e) {
// print_r($e->getCause()->getUserInfo());
CRM_Utils_GlobalStack::singleton()->pop();
throw $e;
}
CRM_Utils_GlobalStack::singleton()->pop();
return $tmpFile;
}
示例4: fileUpload
function fileUpload()
{
$config = CRM_Core_Config::singleton();
$postParams = $_POST;
if ($postParams['entityID'] == 'undefined') {
$result = civicrm_api3('HRJob', 'get', array('options' => array('sort' => "id DESC")));
foreach ($result['values'] as $key => $val) {
$id = $val['id'];
break;
}
$postParams['entityID'] = ++$id;
}
$files = $_FILES;
if (is_array($files) && !empty($files)) {
foreach ($files as $k => $v) {
$fileName = CRM_Utils_File::makeFileName(basename($v['name']));
$maxSize = @filesize($v['tmp_name']);
$dest = $config->customFileUploadDir;
if ($dest != '' && substr($dest, -1) != '/') {
$dest .= '/';
}
$fileName = $fileName != '' ? $fileName : basename($v['name']);
if (is_uploaded_file($v['tmp_name'])) {
if (move_uploaded_file($v['tmp_name'], $dest . $fileName)) {
$fileparam['name'] = $fileName;
$fileparam['uri'] = $fileName;
$file_params = array('version' => 3, 'file_type_id' => null, 'mime_type' => $v['type'], 'name' => $fileName, 'uri' => $fileName, 'upload_date' => date('Y-m-d h:i:s', time()));
$file_save = civicrm_api('File', 'Create', $file_params);
$newEntityFile = new CRM_Core_DAO_EntityFile();
$newEntityFile->entity_id = $postParams['entityID'];
$newEntityFile->entity_table = $postParams['entityTable'];
$newEntityFile->file_id = $file_save['id'];
$newEntityFile->save();
$fileName = basename($v['name']);
}
}
}
}
CRM_Utils_System::civiExit();
}
示例5: appendPDF
/**
* @param string $fileName
* @param string $html
* @param string $format
*
* @return array
*/
public static function appendPDF($fileName, $html, $format = NULL)
{
$pdf_filename = CRM_Core_Config::singleton()->templateCompileDir . CRM_Utils_File::makeFileName($fileName);
// FIXME : CRM-7894
// xmlns attribute is required in XHTML but it is invalid in HTML,
// Also the namespace "xmlns=http://www.w3.org/1999/xhtml" is default,
// and will be added to the <html> tag even if you do not include it.
$html = preg_replace('/(<html)(.+?xmlns=["\'].[^\\s]+["\'])(.+)?(>)/', '\\1\\3\\4', $html);
file_put_contents($pdf_filename, CRM_Utils_PDF_Utils::html2pdf($html, $fileName, TRUE, $format));
return array('fullPath' => $pdf_filename, 'mime_type' => 'application/pdf', 'cleanName' => $fileName);
}
示例6: civicrm_api3_attachment_create
/**
* Create an Attachment.
*
* @param array $params
*
* @return array
* @throws API_Exception validation errors
* @see Civi\API\Subscriber\DynamicFKAuthorization
*/
function civicrm_api3_attachment_create($params)
{
if (empty($params['id'])) {
// When creating we need either entity_table or field_name
civicrm_api3_verify_one_mandatory($params, NULL, array('entity_table', 'field_name'));
}
$config = CRM_Core_Config::singleton();
list($id, $file, $entityFile, $name, $content, $moveFile, $isTrusted, $returnContent) = _civicrm_api3_attachment_parse_params($params);
$fileDao = new CRM_Core_BAO_File();
$entityFileDao = new CRM_Core_DAO_EntityFile();
if ($id) {
$fileDao->id = $id;
if (!$fileDao->find(TRUE)) {
throw new API_Exception("Invalid ID");
}
$entityFileDao->file_id = $id;
if (!$entityFileDao->find(TRUE)) {
throw new API_Exception("Cannot modify orphaned file");
}
}
if (!$id && !is_string($content) && !is_string($moveFile)) {
throw new API_Exception("Mandatory key(s) missing from params array: 'id' or 'content' or 'options.move-file'");
}
if (!$isTrusted && $moveFile) {
throw new API_Exception("options.move-file is only supported on secure calls");
}
if (is_string($content) && is_string($moveFile)) {
throw new API_Exception("'content' and 'options.move-file' are mutually exclusive");
}
if ($id && !$isTrusted && isset($file['upload_date']) && $file['upload_date'] != CRM_Utils_Date::isoToMysql($fileDao->upload_date)) {
throw new API_Exception("Cannot modify upload_date" . var_export(array($file['upload_date'], $fileDao->upload_date, CRM_Utils_Date::isoToMysql($fileDao->upload_date)), TRUE));
}
if ($id && $name && $name != CRM_Utils_File::cleanFileName($fileDao->uri)) {
throw new API_Exception("Cannot modify name");
}
$fileDao->copyValues($file);
if (!$id) {
$fileDao->uri = CRM_Utils_File::makeFileName($name);
}
$fileDao->save();
$entityFileDao->copyValues($entityFile);
$entityFileDao->file_id = $fileDao->id;
$entityFileDao->save();
$path = $config->customFileUploadDir . DIRECTORY_SEPARATOR . $fileDao->uri;
if (is_string($content)) {
file_put_contents($path, $content);
} elseif (is_string($moveFile)) {
// CRM-17432 Do not use rename() since it will break file permissions.
// Also avoid move_uplaoded_file() because the API can use options.move-file.
copy($moveFile, $path);
unlink($moveFile);
}
// Save custom field to entity
if (!$id && empty($params['entity_table']) && isset($params['field_name'])) {
civicrm_api3('custom_value', 'create', array('entity_id' => $params['entity_id'], $params['field_name'] => $fileDao->id));
}
$result = array($fileDao->id => _civicrm_api3_attachment_format_result($fileDao, $entityFileDao, $returnContent, $isTrusted));
return civicrm_api3_create_success($result, $params, 'Attachment', 'create');
}
示例7: uploadImage
/**
* @param $params
*
* @return array
* @throws CRM_Extension_Exception
*/
public static function uploadImage($params)
{
$tempFile = $_FILES['file']['tmp_name'];
$fileName = CRM_Utils_File::makeFileName($_FILES['file']['name']);
$dirName = static::getImageDirPath($params['field']);
// Create the upload directory, if it doesn't already exist
CRM_Utils_File::createDir($dirName);
$file = $dirName . $fileName;
// Move the uploaded file to the upload directory
if (move_uploaded_file($tempFile, $file)) {
$imageUrl = static::getImageUrl($fileName, $params['field']);
$result['values'] = array(array('imageUrl' => $imageUrl, 'imageFileName' => $fileName));
return $result;
} else {
throw new CRM_Extension_Exception('Failed to move the uploaded file', 500);
}
}
示例8: generatePDF
function generatePDF($send = FALSE, $template_id)
{
require_once 'CRM/Utils/PDF/Utils.php';
$fileName = $this->mandate->reference . ".pdf";
if ($send) {
$config = CRM_Core_Config::singleton();
$pdfFullFilename = $config->templateCompileDir . CRM_Utils_File::makeFileName($fileName);
file_put_contents($pdfFullFilename, CRM_Utils_PDF_Utils::html2pdf($this->html, $fileName, true, null));
list($domainEmailName, $domainEmailAddress) = CRM_Core_BAO_Domain::getNameAndEmail();
$params = array();
$params['groupName'] = 'SEPA Email Sender';
$params['from'] = '"' . $domainEmailName . '" <' . $domainEmailAddress . '>';
$params['toEmail'] = $this->contact->email;
$params['toName'] = $params['toEmail'];
if (empty($params['toEmail'])) {
CRM_Core_Session::setStatus(sprintf(ts("Error sending %s: Contact doesn't have an email."), $fileName));
return false;
}
$params['subject'] = "SEPA " . $fileName;
if (!CRM_Utils_Array::value('attachments', $instanceInfo)) {
$instanceInfo['attachments'] = array();
}
$params['attachments'][] = array('fullPath' => $pdfFullFilename, 'mime_type' => 'application/pdf', 'cleanName' => $fileName);
$mail = $this->getMessage($template_id);
$params['text'] = "this is the mandate, please return signed";
$params['html'] = $this->getTemplate()->fetch("string:" . $mail["msg_html"]);
CRM_Utils_Mail::send($params);
// CRM_Core_Session::setStatus(ts("Mail sent"));
} else {
CRM_Utils_PDF_Utils::html2pdf($this->html, $fileName, false, null);
}
}
示例9: processReceiptOptions
function processReceiptOptions($mode)
{
if ($mode == 'build') {
$this->add('text', 'receipt_prefix', ts('Receipt Prefix', array('domain' => 'org.civicrm.cdntaxreceipts')));
$this->add('text', 'receipt_authorized_signature_text', ts('Authorized Signature Text', array('domain' => 'org.civicrm.cdntaxreceipts')));
$config = CRM_Core_Config::singleton();
if ($config->maxImportFileSize >= 8388608) {
$uploadFileSize = 8388608;
} else {
$uploadFileSize = $config->maxImportFileSize;
}
$uploadSize = round($uploadFileSize / (1024 * 1024), 2);
$this->assign('uploadSize', $uploadSize);
$this->setMaxFileSize($uploadFileSize);
$this->addElement('file', 'receipt_logo', ts('Organization Logo', array('domain' => 'org.civicrm.cdntaxreceipts')), 'size=30 maxlength=60');
$this->addUploadElement('receipt_logo');
$this->addRule('receipt_logo', ts('File size should be less than %1 MBytes (%2 bytes)', array(1 => $uploadSize, 2 => $uploadFileSize)), 'maxfilesize', $uploadFileSize, array('domain' => 'org.civicrm.cdntaxreceipts'));
$this->addElement('file', 'receipt_signature', ts('Signature Image', array('domain' => 'org.civicrm.cdntaxreceipts')), 'size=30 maxlength=60');
$this->addUploadElement('receipt_signature');
$this->addRule('receipt_signature', ts('File size should be less than %1 MBytes (%2 bytes)', array(1 => $uploadSize, 2 => $uploadFileSize)), 'maxfilesize', $uploadFileSize, array('domain' => 'org.civicrm.cdntaxreceipts'));
$this->addElement('file', 'receipt_watermark', ts('Watermark Image', array('domain' => 'org.civicrm.cdntaxreceipts')), 'size=30 maxlength=60');
$this->addUploadElement('receipt_watermark');
$this->addRule('receipt_watermark', ts('File size should be less than %1 MBytes (%2 bytes)', array(1 => $uploadSize, 2 => $uploadFileSize)), 'maxfilesize', $uploadFileSize, array('domain' => 'org.civicrm.cdntaxreceipts'));
$this->addElement('file', 'receipt_pdftemplate', ts('PDF Template', array('domain' => 'org.civicrm.cdntaxreceipts')), 'size=30 maxlength=60');
$this->addUploadElement('receipt_pdftemplate');
$this->addRule('receipt_pdftemplate', ts('File size should be less than %1 MBytes (%2 bytes)', array(1 => $uploadSize, 2 => $uploadFileSize)), 'maxfilesize', $uploadFileSize, array('domain' => 'org.civicrm.cdntaxreceipts'));
} else {
if ($mode == 'defaults') {
$defaults = array('receipt_prefix' => CRM_Core_BAO_Setting::getItem(self::SETTINGS, 'receipt_prefix'), 'receipt_authorized_signature_text' => CRM_Core_BAO_Setting::getItem(self::SETTINGS, 'receipt_authorized_signature_text'));
return $defaults;
} else {
if ($mode == 'post') {
$values = $this->exportValues();
CRM_Core_BAO_Setting::setItem($values['receipt_prefix'], self::SETTINGS, 'receipt_prefix');
CRM_Core_BAO_Setting::setItem($values['receipt_authorized_signature_text'], self::SETTINGS, 'receipt_authorized_signature_text');
$receipt_logo = $this->getSubmitValue('receipt_logo');
$receipt_signature = $this->getSubmitValue('receipt_signature');
$receipt_watermark = $this->getSubmitValue('receipt_watermark');
$receipt_pdftemplate = $this->getSubmitValue('receipt_pdftemplate');
$config = CRM_Core_Config::singleton();
foreach (array('receipt_logo', 'receipt_signature', 'receipt_watermark', 'receipt_pdftemplate') as $key) {
$upload_file = $this->getSubmitValue($key);
if (is_array($upload_file)) {
if ($upload_file['error'] == 0) {
$filename = $config->customFileUploadDir . CRM_Utils_File::makeFileName($upload_file['name']);
if (!move_uploaded_file($upload_file['tmp_name'], $filename)) {
CRM_Core_Error::fatal(ts('Could not upload the file'));
}
CRM_Core_BAO_Setting::setItem($filename, self::SETTINGS, $key);
}
}
}
}
}
}
}
示例10: render_beleg_pdf
function render_beleg_pdf($contact_id, $address, $total, $items, $from_date, $to_date, $comment)
{
global $civicrm_root;
$docs = get_docs_table();
$config = CRM_Core_Config::singleton(true, true);
/* If receipts already exist for a date range overlapping the requested range, readjust the from date for the new receipt to follow the lastest date for which receipts were already generated. */
$query = "SELECT GREATEST(MAX(DATE_ADD({$docs['field_to']}, INTERVAL 1 DAY)), '{$from_date}' ) AS from_date\n FROM {$docs['table']}\n WHERE entity_id = {$contact_id}\n AND {$docs['field_from']} < '{$to_date}' -- Ignore existing receipts for a date range beginning after the end of the requested range.\n ";
$from_ts = strtotime($from_date);
$to_ts = strtotime($to_date);
$res = CRM_Core_DAO::executeQuery($query);
$res->fetch();
if ($res->from_date) {
$from_date = $res->from_date;
}
$from_ts = strtotime($from_date);
$to_ts = strtotime($to_date);
$template = CRM_Core_Smarty::singleton();
list($html, $page_format) = get_template();
// select and set up template type
if (count($items) > 1) {
// more than one payment -> "Sammelbescheinigung" with itemized list
$item_table = array();
foreach ($items as $item) {
$item_table[] = array('date' => date("j.n.Y", strtotime($item["date"])), 'art' => $item["art"], 'amount' => number_format($item["amount"], 2, ',', '.'), 'amounttext' => num_to_text($item["amount"]));
}
$template->assign("items", $item_table);
} else {
// one payment only -> "Einzelbescheinigung"
$template->assign("items", null);
/* When generating multiple receipts in a batch (Jahresbescheinigungen), the smarty object is reused between the individual receipts (singleton) -- so need to reset this explicitly! */
$template->assign("date", date("d.m.Y", strtotime($items[0]["date"])));
}
// fill further template fields
if (date("m-d", $from_ts) == "01-01" && date("m-d", $to_ts) == "12-31") {
$daterange = date("Y", $from_ts);
} else {
$daterange = date("j.n.", $from_ts) . " bis " . date("j.n.Y", $to_ts);
}
$template->assign("daterange", $daterange);
$template->assign("donor", $address);
$template->assign("total", number_format($total, 2, ',', '.'));
$template->assign("totaltext", num_to_text($total));
$template->assign("today", date("j.n.Y", time()));
if (date("m-d", $from_ts) == "01-01" && date("m-d", $to_ts) == "12-31") {
$rangespec = date("Y", $from_ts);
} else {
$rangespec = date("Y-m-d", $from_ts) . "_" . date("m-d", $to_ts);
}
$domain = CRM_Core_BAO_Domain::getDomain();
$domain_tokens = array();
foreach (array('name', 'address') as $token) {
$domain_tokens[$token] = CRM_Utils_Token::getDomainTokenReplacement($token, $domain, true, true);
}
$domain_tokens['address'] = str_replace('> <', '> <', $domain_tokens['address']);
/* Hack to work around (yet another) bug in dompdf... */
$template->assign('organisation', $domain_tokens);
$html = $template->fetch("string:{$html}");
// set up file names
$basename = CRM_Utils_File::makeFileName("Zuwendungen_" . $rangespec . "_" . $contact_id . ".pdf");
$outfile = $config->customFileUploadDir;
$outfile .= "/{$basename}";
// render PDF receipt
file_put_contents($outfile, CRM_Utils_PDF_Utils::html2pdf($html, null, true, $page_format));
$file_id = saveDocument($contact_id, $basename, "application/pdf", "Spendenbescheinigung", date("Y-m-d h:i:s"), $from_date, $to_date, $comment);
// return summary data and CiviCRM URL to generated file
return array("contact_id" => $contact_id, "file_id" => $file_id, "from_date" => $from_date, "to_date" => $to_date, "total_amount" => $total, "filename" => "{$basename}", "url" => CRM_Utils_System::url("civicrm/file", "reset=1&id={$file_id}&eid={$contact_id}"));
}
示例11: run
function run()
{
if (!file_exists("/usr/bin/pdftk")) {
CRM_Core_Error::fatal("'pdftk' nicht installiert, Erstellung des Sammel-PDF nicht moeglich");
}
require_once 'backend.php';
$year = CRM_Utils_Request::retrieve('year', 'Positive', $_ = null, true);
CRM_Utils_System::setTitle("Jahresbescheinigungen {$year}");
$from_date = "{$year}-01-01 00:00:00";
if ($year == date("Y")) {
$to_date = date("Y-m-d");
} else {
$to_date = "{$year}-12-31";
}
$to_date .= " 23:59:59";
$params = array("from_date" => $from_date, "to_date" => $to_date, "comment" => "Jahresbescheinigung {$year}");
// Creating a lot of documents can take quite long...
set_time_limit(0);
$result = generate_receipts($params);
if (!empty($result)) {
$this->assign("have_result", true);
/*
* Create a merged document containing all the individual receipts.
*
* The actual merging is done by invoking an external tool (pdftk)
* with all the individual receipt documents as command line parameters.
*
* However, as most operating systems (except GNU Hurd) have a limited maximal command line length,
* trying to merge all documents in one go would cause an overflow if we have a lot of receipts.
* Thus, we have to merge them in smaller batches first, before combining these into the final result.
*
* We do this in an iterative process, with potentially multiple intermediate levels.
* This is most probably overkill -- but better safe than sorry :-)
*/
define('BATCH_SIZE', 1000);
// With a typical command line length limit of 64 KiB, this should give us enough leeway...
$tempDir = CRM_Utils_File::tempdir('donationreceipts-');
$config = CRM_Core_Config::singleton();
// In the first pass, we start with the individual receipt documents we just generated.
$inFiles = array_map(function ($elem) {
return $elem['filename'];
}, $result);
$inDir = $config->customFileUploadDir;
for ($pass = 1, $isFinalPass = false; !$isFinalPass; ++$pass) {
// Do at least one pass; and further ones as necessary.
$batches = array_chunk($inFiles, BATCH_SIZE);
$isFinalPass = !(count($batches) > 1);
// If the current input files fit into a single batch, we will be done after this pass; otherwise, we need further passes.
$outFiles = array();
foreach ($batches as $batchID => $filesInBatch) {
// If this is the final pass, the current output will be the actual result file to save; otherwise, we generate temporary files for further merging.
$outDir = $isFinalPass ? $config->customFileUploadDir : $tempDir;
$baseName = $isFinalPass ? CRM_Utils_File::makeFileName("Jahresbescheinigungen-{$year}.pdf") : "{$pass}-{$batchID}.pdf";
$outFile = $outDir . $baseName;
$inputs = join(" ", $filesInBatch);
system("cd {$inDir} && pdftk {$inputs} cat output {$outFile}");
$outFiles[] = $baseName;
// If our inputs are temporary results from the previous pass, we can drop them now.
if ($inDir == $tempDir) {
foreach ($filesInBatch as $file) {
unlink($tempDir . $file);
}
}
}
// Outputs from this pass are inputs for next one.
$inFiles = $outFiles;
$inDir = $tempDir;
}
// for ($pass)
rmdir($tempDir);
if (file_exists($outFile)) {
$session = CRM_Core_Session::singleton();
$user = $session->get('userID');
$file_id = saveDocument($user, $baseName, "application/pdf", "Jahresbescheinigungen", date("Y-m-d h:i:s"), $from_date, $to_date, "Sammeldatei Jahresbescheinigungen {$year}");
$this->assign("url", CRM_Utils_System::url("civicrm/file", "reset=1&id={$file_id}&eid={$user}"));
} else {
CRM_Core_Error::fatal("Erstellen des Sammeldokuments fehlgeschlagen");
}
}
/* !empty($result) */
parent::run();
}
示例12: sendTemplate
//.........这里部分代码省略.........
$format = $dao->format;
$dao->free();
// add the test banner (if requested)
if ($params['isTest']) {
$query = "SELECT msg_subject subject, msg_text text, msg_html html\n FROM civicrm_msg_template mt\n JOIN civicrm_option_value ov ON workflow_id = ov.id\n JOIN civicrm_option_group og ON ov.option_group_id = og.id\n WHERE og.name = 'msg_tpl_workflow_meta' AND ov.name = 'test_preview' AND mt.is_default = 1";
$testDao = CRM_Core_DAO::executeQuery($query);
$testDao->fetch();
$subject = $testDao->subject . $subject;
$text = $testDao->text . $text;
$html = preg_replace('/<body(.*)$/im', "<body\\1\n{$testDao->html}", $html);
$testDao->free();
}
// replace tokens in the three elements (in subject as if it was the text body)
$domain = CRM_Core_BAO_Domain::getDomain();
$hookTokens = array();
$mailing = new CRM_Mailing_BAO_Mailing();
$mailing->body_text = $text;
$mailing->body_html = $html;
$tokens = $mailing->getTokens();
CRM_Utils_Hook::tokens($hookTokens);
$categories = array_keys($hookTokens);
$contactID = CRM_Utils_Array::value('contactId', $params);
if ($contactID) {
$contactParams = array('contact_id' => $contactID);
$returnProperties = array();
if (isset($tokens['text']['contact'])) {
foreach ($tokens['text']['contact'] as $name) {
$returnProperties[$name] = 1;
}
}
if (isset($tokens['html']['contact'])) {
foreach ($tokens['html']['contact'] as $name) {
$returnProperties[$name] = 1;
}
}
list($contact) = CRM_Utils_Token::getTokenDetails($contactParams, $returnProperties, FALSE, FALSE, NULL, CRM_Utils_Token::flattenTokens($tokens), 'CRM_Core_BAO_MessageTemplate');
$contact = $contact[$contactID];
}
$subject = CRM_Utils_Token::replaceDomainTokens($subject, $domain, TRUE, $tokens['text'], TRUE);
$text = CRM_Utils_Token::replaceDomainTokens($text, $domain, TRUE, $tokens['text'], TRUE);
$html = CRM_Utils_Token::replaceDomainTokens($html, $domain, TRUE, $tokens['html'], TRUE);
if ($contactID) {
$subject = CRM_Utils_Token::replaceContactTokens($subject, $contact, FALSE, $tokens['text'], FALSE, TRUE);
$text = CRM_Utils_Token::replaceContactTokens($text, $contact, FALSE, $tokens['text'], FALSE, TRUE);
$html = CRM_Utils_Token::replaceContactTokens($html, $contact, FALSE, $tokens['html'], FALSE, TRUE);
$contactArray = array($contactID => $contact);
CRM_Utils_Hook::tokenValues($contactArray, array($contactID), NULL, CRM_Utils_Token::flattenTokens($tokens), 'CRM_Core_BAO_MessageTemplate');
$contact = $contactArray[$contactID];
$subject = CRM_Utils_Token::replaceHookTokens($subject, $contact, $categories, TRUE);
$text = CRM_Utils_Token::replaceHookTokens($text, $contact, $categories, TRUE);
$html = CRM_Utils_Token::replaceHookTokens($html, $contact, $categories, TRUE);
}
// strip whitespace from ends and turn into a single line
$subject = "{strip}{$subject}{/strip}";
// parse the three elements with Smarty
$smarty = CRM_Core_Smarty::singleton();
foreach ($params['tplParams'] as $name => $value) {
$smarty->assign($name, $value);
}
foreach (array('subject', 'text', 'html') as $elem) {
${$elem} = $smarty->fetch("string:{${$elem}}");
}
// send the template, honouring the target user’s preferences (if any)
$sent = FALSE;
// create the params array
$params['subject'] = $subject;
$params['text'] = $text;
$params['html'] = $html;
if ($params['toEmail']) {
$contactParams = array(array('email', 'LIKE', $params['toEmail'], 0, 1));
list($contact, $_) = CRM_Contact_BAO_Query::apiQuery($contactParams);
$prefs = array_pop($contact);
if (isset($prefs['preferred_mail_format']) and $prefs['preferred_mail_format'] == 'HTML') {
$params['text'] = NULL;
}
if (isset($prefs['preferred_mail_format']) and $prefs['preferred_mail_format'] == 'Text') {
$params['html'] = NULL;
}
$config = CRM_Core_Config::singleton();
$pdf_filename = '';
if ($config->doNotAttachPDFReceipt && $params['PDFFilename'] && $params['html']) {
$pdf_filename = $config->templateCompileDir . CRM_Utils_File::makeFileName($params['PDFFilename']);
//FIXME : CRM-7894
//xmlns attribute is required in XHTML but it is invalid in HTML,
//Also the namespace "xmlns=http://www.w3.org/1999/xhtml" is default,
//and will be added to the <html> tag even if you do not include it.
$html = preg_replace('/(<html)(.+?xmlns=["\'].[^\\s]+["\'])(.+)?(>)/', '\\1\\3\\4', $params['html']);
file_put_contents($pdf_filename, CRM_Utils_PDF_Utils::html2pdf($html, $params['PDFFilename'], TRUE, $format));
if (empty($params['attachments'])) {
$params['attachments'] = array();
}
$params['attachments'][] = array('fullPath' => $pdf_filename, 'mime_type' => 'application/pdf', 'cleanName' => $params['PDFFilename']);
}
$sent = CRM_Utils_Mail::send($params);
if ($pdf_filename) {
unlink($pdf_filename);
}
}
return array($sent, $subject, $text, $html);
}
示例13: civiexportexcel_attach_to_email
/**
* Implements hook_civicrm_alterMailParams().
*
* Intercepts outgoing report emails, in order to attach the
* excel2007 version of the report.
*
* TODO: we should really propose a patch to CRM_Report_Form::endPostProcess().
*/
function civiexportexcel_attach_to_email(&$form, &$rows, &$attachments)
{
$config = CRM_Core_Config::singleton();
$filename = 'CiviReport.xlsx';
$fullname = $config->templateCompileDir . CRM_Utils_File::makeFileName($filename);
CRM_CiviExportExcel_Utils_Report::generateFile($form, $rows, $fullname);
$attachments[] = array('fullPath' => $fullname, 'mime_type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'cleanName' => $filename);
}
示例14: endPostProcess
/**
* End post processing.
*
* @param array|null $rows
*/
public function endPostProcess(&$rows = NULL)
{
if ($this->_storeResultSet) {
$this->_resultSet = $rows;
}
if ($this->_outputMode == 'print' || $this->_outputMode == 'pdf' || $this->_sendmail) {
$content = $this->compileContent();
$url = CRM_Utils_System::url("civicrm/report/instance/{$this->_id}", "reset=1", TRUE);
if ($this->_sendmail) {
$config = CRM_Core_Config::singleton();
$attachments = array();
if ($this->_outputMode == 'csv') {
$content = $this->_formValues['report_header'] . '<p>' . ts('Report URL') . ": {$url}</p>" . '<p>' . ts('The report is attached as a CSV file.') . '</p>' . $this->_formValues['report_footer'];
$csvFullFilename = $config->templateCompileDir . CRM_Utils_File::makeFileName('CiviReport.csv');
$csvContent = CRM_Report_Utils_Report::makeCsv($this, $rows);
file_put_contents($csvFullFilename, $csvContent);
$attachments[] = array('fullPath' => $csvFullFilename, 'mime_type' => 'text/csv', 'cleanName' => 'CiviReport.csv');
}
if ($this->_outputMode == 'pdf') {
// generate PDF content
$pdfFullFilename = $config->templateCompileDir . CRM_Utils_File::makeFileName('CiviReport.pdf');
file_put_contents($pdfFullFilename, CRM_Utils_PDF_Utils::html2pdf($content, "CiviReport.pdf", TRUE, array('orientation' => 'landscape')));
// generate Email Content
$content = $this->_formValues['report_header'] . '<p>' . ts('Report URL') . ": {$url}</p>" . '<p>' . ts('The report is attached as a PDF file.') . '</p>' . $this->_formValues['report_footer'];
$attachments[] = array('fullPath' => $pdfFullFilename, 'mime_type' => 'application/pdf', 'cleanName' => 'CiviReport.pdf');
}
if (CRM_Report_Utils_Report::mailReport($content, $this->_id, $this->_outputMode, $attachments)) {
CRM_Core_Session::setStatus(ts("Report mail has been sent."), ts('Sent'), 'success');
} else {
CRM_Core_Session::setStatus(ts("Report mail could not be sent."), ts('Mail Error'), 'error');
}
return TRUE;
} elseif ($this->_outputMode == 'print') {
echo $content;
} else {
if ($chartType = CRM_Utils_Array::value('charts', $this->_params)) {
$config = CRM_Core_Config::singleton();
//get chart image name
$chartImg = $this->_chartId . '.png';
//get image url path
$uploadUrl = str_replace('/persist/contribute/', '/persist/', $config->imageUploadURL) . 'openFlashChart/';
$uploadUrl .= $chartImg;
//get image doc path to overwrite
$uploadImg = str_replace('/persist/contribute/', '/persist/', $config->imageUploadDir) . 'openFlashChart/' . $chartImg;
//Load the image
$chart = imagecreatefrompng($uploadUrl);
//convert it into formatted png
CRM_Utils_System::setHttpHeader('Content-type', 'image/png');
//overwrite with same image
imagepng($chart, $uploadImg);
//delete the object
imagedestroy($chart);
}
CRM_Utils_PDF_Utils::html2pdf($content, "CiviReport.pdf", FALSE, array('orientation' => 'landscape'));
}
CRM_Utils_System::civiExit();
} elseif ($this->_outputMode == 'csv') {
CRM_Report_Utils_Report::export2csv($this, $rows);
} elseif ($this->_outputMode == 'group') {
$group = $this->_params['groups'];
$this->add2group($group);
}
}
示例15: parseMailingObject
/**
* @param $mail
*
* @return array
*/
public static function parseMailingObject(&$mail)
{
$config = CRM_Core_Config::singleton();
// get ready for collecting data about this email
// and put it in a standardized format
$params = array('is_error' => 0);
$params['from'] = array();
self::parseAddress($mail->from, $field, $params['from'], $mail);
// we definitely need a contact id for the from address
// if we dont have one, skip this email
if (empty($params['from']['id'])) {
return NULL;
}
$emailFields = array('to', 'cc', 'bcc');
foreach ($emailFields as $field) {
$value = $mail->{$field};
self::parseAddresses($value, $field, $params, $mail);
}
// define other parameters
$params['subject'] = $mail->subject;
$params['date'] = date("YmdHi00", strtotime($mail->getHeader("Date")));
$attachments = array();
$params['body'] = self::formatMailPart($mail->body, $attachments);
// format and move attachments to the civicrm area
if (!empty($attachments)) {
$date = date('Ymdhis');
$config = CRM_Core_Config::singleton();
for ($i = 0; $i < count($attachments); $i++) {
$attachNum = $i + 1;
$fileName = basename($attachments[$i]['fullName']);
$newName = CRM_Utils_File::makeFileName($fileName);
$location = $config->uploadDir . $newName;
// move file to the civicrm upload directory
rename($attachments[$i]['fullName'], $location);
$mimeType = "{$attachments[$i]['contentType']}/{$attachments[$i]['mimeType']}";
$params["attachFile_{$attachNum}"] = array('uri' => $fileName, 'type' => $mimeType, 'upload_date' => $date, 'location' => $location);
}
}
return $params;
}