Merge branch 'main' into auto_generic
This commit is contained in:
@@ -77,8 +77,11 @@ if (($handle = fopen($inputFile, "r")) !== FALSE) {
|
|||||||
if ($currentWard == "Coastal-promontory") {
|
if ($currentWard == "Coastal-promontory") {
|
||||||
$currentWard = "Coastal-Promontory";
|
$currentWard = "Coastal-Promontory";
|
||||||
}
|
}
|
||||||
|
if ($currentWard == "East Gippsland Shire") {
|
||||||
|
$currentWard = "Unsubdivided";
|
||||||
}
|
}
|
||||||
if ($data[0] == "Candidate" || $data[0] == "") {
|
}
|
||||||
|
if (trim($data[0]) == "Candidate" || trim($data[0]) == "") {
|
||||||
if ($currentWard == null) {
|
if ($currentWard == null) {
|
||||||
error_log("No ward found, skipping data on line " . $currentLine);
|
error_log("No ward found, skipping data on line " . $currentLine);
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
Executable
+19
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# This script uses the jq, wp, and php commands, make sure they are installed before running this script.
|
||||||
|
|
||||||
|
# The folder containing data for each council.
|
||||||
|
# Includes the list of candidates and any media.
|
||||||
|
DATA_PATH="../spl-data"
|
||||||
|
|
||||||
|
# Iterate over folders in data path
|
||||||
|
candidates_files=()
|
||||||
|
for folder in "$DATA_PATH"/*; do
|
||||||
|
if test -f "$folder"/candidates.csv; then
|
||||||
|
candidates_files+=("$folder"/candidates.csv)
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
content=$(php pledge-update/pledge-page.php --candidates-files "${candidates_files[*]}")
|
||||||
|
|
||||||
|
wp post update 12106 --post_content="$content"
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once("parse_pledge_data.php");
|
||||||
|
|
||||||
|
$options = getopt("", ["candidates-files:"]);
|
||||||
|
|
||||||
|
if (isset($options['candidates-files'])) {
|
||||||
|
$candidates_files = $options['candidates-files'];
|
||||||
|
} else {
|
||||||
|
error_log("Error: Missing required option '--candidates-files'.");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$candidate_data = parse_pledge_data(explode(" ", $candidates_files));
|
||||||
|
|
||||||
|
/* Select people who have taken the pledge */
|
||||||
|
$pledgeCandidates = array_filter($candidate_data, function ($candidate) {
|
||||||
|
return $candidate['Pledge'] === 'y';
|
||||||
|
});
|
||||||
|
|
||||||
|
/* Select 9 random candidates */
|
||||||
|
$pledgeKeys = array_rand($pledgeCandidates, 9);
|
||||||
|
shuffle($pledgeKeys);
|
||||||
|
|
||||||
|
$i = 0;
|
||||||
|
foreach ($pledgeKeys as $key) {
|
||||||
|
$image_url = $pledgeCandidates[$key]['image_url'];
|
||||||
|
$image_id = $pledgeCandidates[$key]['image_id'];
|
||||||
|
|
||||||
|
echo "s|pledge_img_".$i."|".$image_url."|\n";
|
||||||
|
echo "s|pledge_id_".$i."|".$image_id."|\n";
|
||||||
|
|
||||||
|
echo "s|pledge_string_".$i."|";
|
||||||
|
echo $pledgeCandidates[$key]['Candidate Name'].
|
||||||
|
" (".
|
||||||
|
$pledgeCandidates[$key]['Council'].
|
||||||
|
") has taken the pledge!|\n";
|
||||||
|
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
exit(0);
|
||||||
@@ -1,100 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
$options = getopt("", ["pledges-files:"]);
|
|
||||||
|
|
||||||
if (isset($options['pledges-files'])) {
|
|
||||||
$pledges_files = $options['pledges-files'];
|
|
||||||
} else {
|
|
||||||
error_log("Error: Missing required option '--pledges-files'.");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
$files = explode(" ", $pledges_files);
|
|
||||||
|
|
||||||
$candidate_data = [];
|
|
||||||
foreach ($files as $key => $file) {
|
|
||||||
$config_file = dirname($file)."/config.json";
|
|
||||||
$config_string = file_get_contents($config_file);
|
|
||||||
|
|
||||||
if ($config_string !== FALSE) {
|
|
||||||
$config = json_decode($config_string, true);
|
|
||||||
} else {
|
|
||||||
error_log("Error opening config.json.");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
$candidate_file = dirname($file)."/candidates.csv";
|
|
||||||
|
|
||||||
if (($handle = fopen($candidate_file, "r")) !== FALSE) {
|
|
||||||
$headers = fgetcsv($handle);
|
|
||||||
while (($data = fgetcsv($handle)) !== FALSE) {
|
|
||||||
$candidate = [];
|
|
||||||
$candidate['Pledge'] = 'n';
|
|
||||||
foreach ($headers as $key => $value) {
|
|
||||||
$candidate[$value] = $data[$key];
|
|
||||||
}
|
|
||||||
$candidate['Council'] = $config['councilName'];
|
|
||||||
$candidate['Path'] = dirname($file);
|
|
||||||
$candidate_data[$candidate['Candidate Name']] = $candidate;
|
|
||||||
}
|
|
||||||
fclose($handle);
|
|
||||||
} else {
|
|
||||||
error_log('Error opening candidates file');
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (($handle = fopen($file, "r")) !== FALSE) {
|
|
||||||
$headers = fgetcsv($handle);
|
|
||||||
while (($data = fgetcsv($handle)) !== FALSE) {
|
|
||||||
$candidate = [];
|
|
||||||
foreach ($headers as $key => $value) {
|
|
||||||
$candidate[$value] = $data[$key];
|
|
||||||
}
|
|
||||||
$candidate_data[$candidate['Candidate Name']]['Pledge'] =
|
|
||||||
$candidate['Pledge'];
|
|
||||||
}
|
|
||||||
fclose($handle);
|
|
||||||
} else {
|
|
||||||
error_log('Error opening pledges file');
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Select people who have taken the pledge */
|
|
||||||
$pledgeCandidates = array_filter($candidate_data, function ($candidate) {
|
|
||||||
return $candidate['Pledge'] === 'y';
|
|
||||||
});
|
|
||||||
|
|
||||||
/* Select 9 random candidates */
|
|
||||||
$pledgeKeys = array_rand($pledgeCandidates, 9);
|
|
||||||
shuffle($pledgeKeys);
|
|
||||||
|
|
||||||
$i = 0;
|
|
||||||
foreach ($pledgeKeys as $key) {
|
|
||||||
$media_desc = $pledgeCandidates[$key]['Path']."/".
|
|
||||||
$pledgeCandidates[$key]['Picture'].".json";
|
|
||||||
$media_string = file_get_contents($media_desc);
|
|
||||||
|
|
||||||
if ($media_string !== FALSE) {
|
|
||||||
$media = json_decode($media_string, true);
|
|
||||||
} else {
|
|
||||||
error_log("Error opening image descriptor.");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
$image_url = $media['url'];
|
|
||||||
$image_id = $media['id'];
|
|
||||||
|
|
||||||
echo "s|pledge_img_".$i."|".$image_url."|\n";
|
|
||||||
echo "s|pledge_id_".$i."|".$image_id."|\n";
|
|
||||||
|
|
||||||
echo "s|pledge_string_".$i."|";
|
|
||||||
echo $pledgeCandidates[$key]['Candidate Name'].
|
|
||||||
" (".
|
|
||||||
$pledgeCandidates[$key]['Council'].
|
|
||||||
") has taken the pledge!|\n";
|
|
||||||
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
exit(0);
|
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class SPLPageRenderer {
|
||||||
|
public function renderPledgePage($councils, $candidates) {
|
||||||
|
ob_start();
|
||||||
|
|
||||||
|
$didError = false;
|
||||||
|
|
||||||
|
set_error_handler(function($errno, $errstr, $errfile, $errline) use(&$didError) {
|
||||||
|
$didError = true;
|
||||||
|
error_log("Error: $errstr in $errfile on line $errline");
|
||||||
|
return true; // Prevent default error handling
|
||||||
|
});
|
||||||
|
|
||||||
|
require "template.php";
|
||||||
|
|
||||||
|
restore_error_handler();
|
||||||
|
|
||||||
|
$content = ob_get_clean();
|
||||||
|
|
||||||
|
// Explictly return null if we didn't generate any content or if there was an error
|
||||||
|
if (!empty($content) && !$didError) {
|
||||||
|
return $content;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function parse_pledge_data($candidates_files) {
|
||||||
|
$candidate_data = [];
|
||||||
|
foreach ($candidates_files as $key => $file) {
|
||||||
|
$config_file = dirname($file)."/config.json";
|
||||||
|
$config_string = file_get_contents($config_file);
|
||||||
|
|
||||||
|
if ($config_string !== FALSE) {
|
||||||
|
$config = json_decode($config_string, true);
|
||||||
|
} else {
|
||||||
|
error_log("Error opening config.json.");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (($handle = fopen($file, "r")) !== FALSE) {
|
||||||
|
$headers = fgetcsv($handle);
|
||||||
|
while (($data = fgetcsv($handle)) !== FALSE) {
|
||||||
|
$candidate = [];
|
||||||
|
$candidate['Pledge'] = 'n';
|
||||||
|
$candidate['Picture'] = "";
|
||||||
|
$candidate['image_url'] = "";
|
||||||
|
$candidate['image_id'] = "";
|
||||||
|
foreach ($headers as $key => $value) {
|
||||||
|
$candidate[$value] = $data[$key];
|
||||||
|
}
|
||||||
|
$candidate['Council'] = $config['councilName'];
|
||||||
|
$candidate['Path'] = dirname($file);
|
||||||
|
$media_desc = $candidate['Path']."/".
|
||||||
|
$candidate['Picture'].".json";
|
||||||
|
if (file_exists($media_desc)) {
|
||||||
|
$media_string = file_get_contents($media_desc);
|
||||||
|
if ($media_string !== FALSE) {
|
||||||
|
$media = json_decode($media_string, true);
|
||||||
|
} else {
|
||||||
|
error_log("Error opening image descriptor.");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
/* Get photo URL and ID */
|
||||||
|
$candidate['image_url'] = $media['url'];
|
||||||
|
$candidate['image_id'] = $media['id'];
|
||||||
|
}
|
||||||
|
$candidate_data[$candidate['Candidate Name']] = $candidate;
|
||||||
|
}
|
||||||
|
fclose($handle);
|
||||||
|
} else {
|
||||||
|
error_log('Error opening candidates file');
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Override pledge columns if pledges.csv is present */
|
||||||
|
$pledges_file = dirname($file)."/pledges.csv";
|
||||||
|
if (!file_exists($pledges_file)) continue;
|
||||||
|
|
||||||
|
if (($handle = fopen($pledges_file, "r")) !== FALSE) {
|
||||||
|
$headers = fgetcsv($handle);
|
||||||
|
while (($data = fgetcsv($handle)) !== FALSE) {
|
||||||
|
$candidate = [];
|
||||||
|
foreach ($headers as $key => $value) {
|
||||||
|
$candidate[$value] = $data[$key];
|
||||||
|
}
|
||||||
|
$candidate_data[$candidate['Candidate Name']]['Pledge'] =
|
||||||
|
$candidate['Pledge'];
|
||||||
|
}
|
||||||
|
fclose($handle);
|
||||||
|
} else {
|
||||||
|
error_log('Error opening pledges file');
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $candidate_data;
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once("parse_pledge_data.php");
|
||||||
|
require_once("page_renderer.php");
|
||||||
|
|
||||||
|
$options = getopt("", ["candidates-files:"]);
|
||||||
|
|
||||||
|
if (isset($options['candidates-files'])) {
|
||||||
|
$candidates_files = $options['candidates-files'];
|
||||||
|
} else {
|
||||||
|
error_log("Error: Missing required option '--candidates-files'.");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$candidate_data = parse_pledge_data(explode(" ", $candidates_files));
|
||||||
|
|
||||||
|
/* Select people who have taken the pledge */
|
||||||
|
$pledgeCandidates = array_filter($candidate_data, function ($candidate) {
|
||||||
|
return $candidate['Pledge'] === 'y';
|
||||||
|
});
|
||||||
|
|
||||||
|
$renderer = new SPLPageRenderer();
|
||||||
|
//print_r($pledgeCandidates);
|
||||||
|
|
||||||
|
$councils = [];
|
||||||
|
foreach ($pledgeCandidates as $key => $candidate) {
|
||||||
|
$councils[] = $candidate['Council'];
|
||||||
|
}
|
||||||
|
$councils = array_unique($councils);
|
||||||
|
asort($councils);
|
||||||
|
|
||||||
|
//print_r($councils);
|
||||||
|
|
||||||
|
$pageContent = $renderer->renderPledgePage($councils, $pledgeCandidates);
|
||||||
|
|
||||||
|
if ($pageContent === null) {
|
||||||
|
exit(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
echo $pageContent;
|
||||||
|
exit(0);
|
||||||
@@ -0,0 +1,133 @@
|
|||||||
|
<?php
|
||||||
|
function sluggify($input) {
|
||||||
|
return strtolower(str_replace(' ', '-', $input));
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!-- wp:paragraph -->
|
||||||
|
<p>The Streets People Love campaign offers council candidates the opportunity to take the following pledge:</p>
|
||||||
|
<!-- /wp:paragraph -->
|
||||||
|
|
||||||
|
<!-- wp:paragraph {"style":{"color":{"background":"#10B5B0"}}} -->
|
||||||
|
<p class="has-background" style="background-color:#10B5B0">If elected Councillor, I pledge to allocate budget and street space to build streets people love, and ensure that residents of all ages and abilities can safely move around our council area, irrespective of whether they choose to walk, cycle, wheel, use public transport or drive.</p>
|
||||||
|
<!-- /wp:paragraph -->
|
||||||
|
|
||||||
|
<!-- wp:paragraph -->
|
||||||
|
<p>Candidates from these councils have taken the pledge:</p>
|
||||||
|
<!-- /wp:paragraph -->
|
||||||
|
|
||||||
|
<?php
|
||||||
|
$councilCount = count($councils);
|
||||||
|
?>
|
||||||
|
|
||||||
|
<?php if ($councilCount > 1): ?>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
if ($councilCount > 8) {
|
||||||
|
$councilListChunkSize = ceil($councilCount / 2);
|
||||||
|
} else {
|
||||||
|
$councilListChunkSize = $councilCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
$councilChunks = array_chunk($councils, $councilListChunkSize);
|
||||||
|
|
||||||
|
?>
|
||||||
|
<!-- wp:columns {"className":"council-list-columns"} -->
|
||||||
|
<div class="wp-block-columns council-list-columns">
|
||||||
|
|
||||||
|
<?php for ($columnIdx = 0; $columnIdx < 4; $columnIdx++): ?>
|
||||||
|
<!-- wp:column {"verticalAlignment":"top","style":{"spacing":{"padding":{"top":"0","bottom":"0"}}}} -->
|
||||||
|
<div class="wp-block-column is-vertically-aligned-top" style="padding-top:0;padding-bottom:0">
|
||||||
|
|
||||||
|
<?php if (array_key_exists($columnIdx, $councilChunks)): ?>
|
||||||
|
<!-- wp:list {"style":{"spacing":{"margin":{"top":"0","right":"0","bottom":"0","left":"0"}}}} -->
|
||||||
|
<ul style="margin-top:0;margin-right:0;margin-bottom:0;margin-left:0" class="wp-block-list">
|
||||||
|
|
||||||
|
<?php foreach($councilChunks[$columnIdx] as $councilName): ?>
|
||||||
|
<!-- wp:list-item -->
|
||||||
|
<li><a href="#<?php echo sluggify($councilName); ?>"><?php echo $councilName; ?></a></li>
|
||||||
|
<!-- /wp:list-item -->
|
||||||
|
<?php endforeach; ?>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
<!-- /wp:list -->
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<!-- /wp:column -->
|
||||||
|
<?php endfor; ?>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<!-- /wp:columns -->
|
||||||
|
<?php else: ?>
|
||||||
|
<!-- wp:paragraph -->
|
||||||
|
<p></p>
|
||||||
|
<!-- /wp:paragraph -->
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<?php foreach ($councils as $key => $council): ?>
|
||||||
|
<!-- wp:heading {"level":3,"className":"is-style-default"} -->
|
||||||
|
<?php $groupSlug = sluggify($council); ?>
|
||||||
|
<h3 class="wp-block-heading is-style-default" id="<?php echo $groupSlug; ?>"><a style="text-decoration: none;" href="#<?php echo $groupSlug; ?>"><?php echo htmlspecialchars($council); ?></a></h3>
|
||||||
|
<!-- /wp:heading -->
|
||||||
|
|
||||||
|
<?php
|
||||||
|
$groupCandidates = array_filter($candidates, function ($candidate) use ($council) {
|
||||||
|
return $candidate['Council'] === $council;
|
||||||
|
});
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
$columnCount = 4;
|
||||||
|
|
||||||
|
$chunkedCouncilCandidates = array_chunk($groupCandidates, $columnCount);
|
||||||
|
?>
|
||||||
|
|
||||||
|
<?php foreach($chunkedCouncilCandidates as $chunk): ?>
|
||||||
|
<!-- wp:columns -->
|
||||||
|
<div class="wp-block-columns">
|
||||||
|
|
||||||
|
<?php for ($columnIdx = 0; $columnIdx < $columnCount; $columnIdx++): ?>
|
||||||
|
<!-- wp:column -->
|
||||||
|
<div class="wp-block-column">
|
||||||
|
|
||||||
|
<?php if (array_key_exists($columnIdx, $chunk)): ?>
|
||||||
|
<?php
|
||||||
|
$candidate = $chunk[$columnIdx];
|
||||||
|
|
||||||
|
if (isset($candidate['Picture']) && strlen($candidate['image_url'])) {
|
||||||
|
$candidate_image['url'] = $candidate['image_url'];
|
||||||
|
$candidate_image['id'] = $candidate['image_id'];
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!-- wp:image {"id":<?php echo $candidate_image['id']; ?>,"width":"200px","height":"200px","scale":"cover","align":"center","style":{"color":{}},"className":"is-resized"} -->
|
||||||
|
<figure class="wp-block-image aligncenter is-resized"><img src="<?php echo $candidate_image['url']; ?>" alt="" class="wp-image-<?php echo $candidate_image['id']; ?>" style="object-fit:cover;width:200px;height:200px"/></figure>
|
||||||
|
<!-- /wp:image -->
|
||||||
|
|
||||||
|
<!-- wp:heading {"textAlign":"center","className":"wp-block-heading has-text-align-center has-medium-font-size","style":{"spacing":{"margin":{"top":"1rem","bottom":"0.5rem"}}}} -->
|
||||||
|
<h2 class="wp-block-heading has-text-align-center has-medium-font-size" style="margin-top:1rem;margin-bottom:0.5rem"><strong><?php echo htmlspecialchars($candidate['Candidate Name']); ?></strong></h2>
|
||||||
|
<!-- /wp:heading -->
|
||||||
|
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<!-- /wp:column -->
|
||||||
|
<?php endfor; ?>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<!-- /wp:columns -->
|
||||||
|
<?php endforeach; ?>
|
||||||
|
|
||||||
|
<?php endforeach; ?>
|
||||||
|
|
||||||
|
<?php if (isset($config['footer'])): ?>
|
||||||
|
<!-- wp:paragraph -->
|
||||||
|
<p><?php echo $config['footer']; ?></p>
|
||||||
|
<!-- /wp:paragraph -->
|
||||||
|
<?php endif; ?>
|
||||||
+4
-4
@@ -13,14 +13,14 @@
|
|||||||
|
|
||||||
DATA_PATH="../spl-data"
|
DATA_PATH="../spl-data"
|
||||||
|
|
||||||
pledges_files=()
|
candidates_files=()
|
||||||
for folder in "$DATA_PATH"/*; do
|
for folder in "$DATA_PATH"/*; do
|
||||||
if test -f "$folder"/pledges.csv; then
|
if test -f "$folder"/candidates.csv; then
|
||||||
pledges_files+=("$folder"/pledges.csv)
|
candidates_files+=("$folder"/candidates.csv)
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
pledge_sed=$(php pledge-update/main.php --pledges-files "${pledges_files[*]}")
|
pledge_sed=$(php pledge-update/homepage.php --candidates-files "${candidates_files[*]}")
|
||||||
|
|
||||||
content=$(sed "$pledge_sed" ../spl-data/movie-homepage)
|
content=$(sed "$pledge_sed" ../spl-data/movie-homepage)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user