From b91d8aa58f4d40e7b1ae59c22ca7fd67862fea08 Mon Sep 17 00:00:00 2001 From: Oleg Vaskevich Date: Tue, 5 Jan 2016 02:29:57 -0500 Subject: [PATCH 1/2] Add support for custom summary above abstract in paper based on template defined in configuration --- src/papertable.php | 66 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/src/papertable.php b/src/papertable.php index 29fc026cfa..0aa330e854 100644 --- a/src/papertable.php +++ b/src/papertable.php @@ -530,6 +530,71 @@ private function echo_editable_abstract() { "\n\n"; } + function startsWith($haystack, $needle) { + return $needle === "" || strrpos($haystack, $needle, -strlen($haystack)) !== false; + } + + private function paptabSummary() { + global $Opt; + $options = $this->prow->options(); + $summaryTemplate = $Opt["summaryTemplate"]; + if (!$summaryTemplate) { + return; + } + $summary = ""; + + // First, process all the conditionals. + $conditionalStart = 0; + $conditionalEnd = 0; + define("BEGIN_IF", "%%%BEGIN_IF{"); + define("BEGIN_IF_LEN", strlen(BEGIN_IF)); + define("BEGIN_IF_END", "}%%%"); + define("BEGIN_IF_END_LEN", strlen(BEGIN_IF_END)); + define("END_IF", "%%%END_IF%%%"); + define("END_IF_LEN", strlen(END_IF)); + while (($conditionalStart = strpos($summaryTemplate, BEGIN_IF, $conditionalEnd)) !== false) { + $summary .= substr($summaryTemplate, $conditionalEnd, $conditionalStart - $conditionalEnd); + + // Find the ending "}%%%". + $varStart = $conditionalStart + BEGIN_IF_LEN; + $varEnd = strpos($summaryTemplate, BEGIN_IF_END, $conditionalStart); + $var = substr($summaryTemplate, $varStart, $varEnd - $varStart); + $expectedValue = true; + if ($var && strlen($var) > 0 && $var[0] == "!") { + // Handle negations. + $expectedValue = false; + $var = substr($var, 1); + } + $varOption = reset(array_filter($options, function ($o) use ($var) {return $o->option->name == $var;})); + $contentStart = $varEnd + BEGIN_IF_END_LEN; + $contentEnd = strpos($summaryTemplate, END_IF, $varEnd); + $conditionalEnd = $contentEnd + END_IF_LEN; + + if (($varOption && ($varOption->value || $varOption->data)) == $expectedValue) { + $summary .= substr($summaryTemplate, $contentStart, $contentEnd - $contentStart); + } + } + $summary .= substr($summaryTemplate, $conditionalEnd); + + // Now, replace all the variables. + $summary = preg_replace_callback('/\$\{.+?\}/', function($matches) use (&$options) { + $var = $matches[0]; + $var = substr($var, 2, strlen($var) - 3); + $varOption = reset(array_filter($options, function ($o) use ($var) {return $o->option->name == $var;})); + $value = $varOption ? ($varOption->data ? $varOption->data : $varOption->value) : "[???]"; + + if ($varOption && $varOption->option->type == "checkbox") { + $value = $value ? 'Yes' : 'No'; + } + return $value; + }, $summary); + + $options = "OPTIONS HERE"; + echo "
", + $this->papt("summary", "Summary"), + "
", $summary, "
\n\n"; + } + private function paptabAbstract() { $data = $this->entryData("abstract", "p"); if ($this->allFolded && strlen($data) > 190) { @@ -2008,6 +2073,7 @@ function paptabBegin() { echo $m, "
\n"; $this->paptabDownload(); echo '
'; + $this->paptabSummary(); $this->paptabAbstract(); echo '
'; $this->paptabAuthors(!$this->editable && $this->mode === "edit" From e55890b0ae8a3e502918d97d7dbe29c3cb410d0c Mon Sep 17 00:00:00 2001 From: Oleg Vaskevich Date: Sun, 17 Jan 2016 20:37:14 -0500 Subject: [PATCH 2/2] Handle text fields in summary --- src/papertable.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/papertable.php b/src/papertable.php index 0aa330e854..8995a987ce 100644 --- a/src/papertable.php +++ b/src/papertable.php @@ -570,7 +570,10 @@ private function paptabSummary() { $contentEnd = strpos($summaryTemplate, END_IF, $varEnd); $conditionalEnd = $contentEnd + END_IF_LEN; - if (($varOption && ($varOption->value || $varOption->data)) == $expectedValue) { + $shouldShow = $varOption + && (($varOption->option->type == "text" && !empty($varOption->data)) + || ($varOption->option->type != "text" && ($varOption->data || $varOption->value))); + if ($shouldShow == $expectedValue) { $summary .= substr($summaryTemplate, $contentStart, $contentEnd - $contentStart); } } @@ -581,7 +584,7 @@ private function paptabSummary() { $var = $matches[0]; $var = substr($var, 2, strlen($var) - 3); $varOption = reset(array_filter($options, function ($o) use ($var) {return $o->option->name == $var;})); - $value = $varOption ? ($varOption->data ? $varOption->data : $varOption->value) : "[???]"; + $value = $varOption ? ($varOption->option->type == "text" ? $varOption->data : ($varOption->data ? $varOption->data : $varOption->value)) : "[???]"; if ($varOption && $varOption->option->type == "checkbox") { $value = $value ? 'Yes' : 'No';