summaryrefslogtreecommitdiffstats
path: root/usr/local/www/pkg_edit.php
diff options
context:
space:
mode:
authorScott Ullrich <sullrich@pfsense.org>2005-01-31 03:54:18 +0000
committerScott Ullrich <sullrich@pfsense.org>2005-01-31 03:54:18 +0000
commitdcbe6f52822e0bb32b8e45537b95b4b89d75f4d7 (patch)
treebe05095c8c0001ca048ea1aaf02b7c6bdc3dfa34 /usr/local/www/pkg_edit.php
parent49879dd68b82f824536f8ed7b361844cab21d181 (diff)
downloadpfsense-dcbe6f52822e0bb32b8e45537b95b4b89d75f4d7.zip
pfsense-dcbe6f52822e0bb32b8e45537b95b4b89d75f4d7.tar.gz
Add template support to packages. Useful for generating the packages .conf files and such.
Diffstat (limited to 'usr/local/www/pkg_edit.php')
-rwxr-xr-xusr/local/www/pkg_edit.php89
1 files changed, 88 insertions, 1 deletions
diff --git a/usr/local/www/pkg_edit.php b/usr/local/www/pkg_edit.php
index 80a6c63..eaf8fed 100755
--- a/usr/local/www/pkg_edit.php
+++ b/usr/local/www/pkg_edit.php
@@ -167,7 +167,13 @@ include("fbegin.inc");
eval($pkg['custom_php_resync_config_command']);
}
- header("Location: pkg.php?xml=" . $xml);
+ parse_package_templates();
+
+ if($pkg['aftersaveredirect'] <> "") {
+ header("Location: " . $pkg['aftersaveredirect']);
+ } else {
+ header("Location: pkg.php?xml=" . $xml);
+ }
exit;
}
}
@@ -477,4 +483,85 @@ function fixup_string($string) {
return $newstring;
}
+/*
+ * Parse templates if they are defined
+ */
+function parse_package_templates() {
+ global $pkg, $config;
+ if($pkg['templates']['template'] <> "")
+ foreach($pkg['templates']['template'] as $pkg_template_row) {
+ $filename = $pkg_template_row['filename'];
+ $template_text = $pkg_template_row['templatecontents'];
+
+ /* calculate total row helpers count */
+ foreach ($pkg['fields']['field'] as $fields) {
+ if($fields['type'] == "rowhelper") {
+ // save rowhelper items.
+ $row_helper_total_rows = 0;
+ for($x=0; $x<99; $x++) { // XXX: this really should be passed from the form.
+ foreach($fields['rowhelper']['rowhelperfield'] as $rowhelperfield) {
+ if($firstfield == "") {
+ $firstfield = $rowhelperfield['fieldname'];
+ } else {
+ if($firstfield == $rowhelperfield['fieldname']) $rows++;
+ }
+ $comd = "\$value = \$_POST['" . $rowhelperfield['fieldname'] . $x . "'];";
+ eval($comd);
+ if($value <> "") {
+ //$template_text = str_replace($fieldname . "_fieldvalue", $fieldvalue, $template_text);
+ } else {
+ $row_helper_total_rows = $rows;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ /* replace $domain_total_rows with total rows */
+ $template_text = str_replace("$domain_total_rows", $row_helper_total_rows, $template_text);
+
+ /* change fields defined as fieldname_fieldvalue to their value */
+ foreach ($pkg['fields']['field'] as $fields) {
+ if($fields['type'] == "rowhelper") {
+ // save rowhelper items.
+ for($x=0; $x<99; $x++) { // XXX: this really should be passed from the form.
+ $row_helper_data = "";
+ foreach($fields['rowhelper']['rowhelperfield'] as $rowhelperfield) {
+ if($firstfield == "") {
+ $firstfield = $rowhelperfield['fieldname'];
+ } else {
+ if($firstfield == $rowhelperfield['fieldname']) $rows++;
+ }
+ $comd = "\$value = \$_POST['" . $rowhelperfield['fieldname'] . $x . "'];";
+ eval($comd);
+ if($value <> "") {
+ $row_helper_data .= $value . " " ;
+ }
+ ereg($rowhelperfield['fieldname'] . "_fieldvalue\[(.*)\]", $template_text, $sep);
+ foreach ($sep as $se) $seperator = $se;
+ if($seperator <> "") {
+ $row_helper_data = ereg_replace(" ", $seperator, $row_helper_data);
+ $template_text = ereg_replace("\[" . $seperator . "\]", "", $template_text);
+ }
+ $template_text = str_replace($rowhelperfield['fieldname'] . "_fieldvalue", $row_helper_data, $template_text);
+ }
+ }
+ } else {
+ $fieldname = $fields['fieldname'];
+ $fieldvalue = $_POST[$fieldname];
+ $template_text = str_replace($fieldname . "_fieldvalue", $fieldvalue, $template_text);
+ }
+ }
+
+ /* replace cr's */
+ $template_text = str_replace("\\n", "\n", $template_text);
+
+ /* write out new template file */
+ $fout = fopen($filename,"w");
+ fwrite($fout, $template_text);
+ fclose($fout);
+ }
+}
+
?> \ No newline at end of file
OpenPOWER on IntegriCloud