Diff -- /var/www/vhosts/3dshawn.com/ptmatrix.3dshawn.com/admin_seo.cgi
Diff

/var/www/vhosts/3dshawn.com/ptmatrix.3dshawn.com/admin_seo.cgi

added on local at 2026-07-01 12:33:58

Added
+145
lines
Removed
-0
lines
Context
0
unchanged
Blobs
from
to 89c8fb2ce039
Restore this content →
Unified diff
Naive LCS-based line diff. Additions in emerald, deletions in rose. Both sides decompressed live from BLOB_STORE.
1#!/usr/bin/perl
2
3##################################################################################################################################
4# ______ ____ ____ ______ ______ ____ ___ __ ___ ______ _ __ ____ ____ __ __ _ __ _____ ____
5# / ____// __ \ / __ \ / ____/ / ____// __ \ / | / |/ // ____/| | / // __ \ / __ \ / //_/ | | / /|__ / / __ \
6# / / / / / // / / // __/ / /_ / /_/ // /| | / /|_/ // __/ | | /| / // / / // /_/ // ,< | | / / /_ < / / / /
7# / /___ / /_/ // /_/ // /___ / __/ / _, _// ___ | / / / // /___ | |/ |/ // /_/ // _, _// /| | | |/ / ___/ /_ / /_/ /
8# \____/ \____//_____//_____/ /_/ /_/ |_|/_/ |_|/_/ /_//_____/ |__/|__/ \____//_/ |_|/_/ |_| |___/ /____/(_)\____/
9#
10# - Written by: Shawn Pickering
11# - shawn@shawnpickering.com
12##################################################################################################################################
13use strict;
14use lib '/var/www/vhosts/3dshawn.com/ptmatrix.3dshawn.com';
15
16
17#############################################################
18## Variables
19#############################################################
20
21
22
23############################################################
24# Modules
25############################################################
26use CGI; my $query = new CGI; my $form = $query->Vars;
27use MODS::Login; my $login = new MODS::Login;
28use MODS::PTMatrix::Urls; my $getlist = new MODS::PTMatrix::Urls; my $url = $getlist->urls();
29use MODS::Template; my $tfile = new MODS::Template;
30use MODS::PTMatrix::Wrapper; my $load = new MODS::PTMatrix::Wrapper;
31use MODS::DBConnect; my $db = new MODS::DBConnect;
32use MODS::PTMatrix::Config; my $config = new MODS::PTMatrix::Config; my $database_name = $config->settings('database_name');
33use MODS::PTMatrix::PM;
34use MODS::PTMatrix::SEO; my $seo = new MODS::PTMatrix::SEO;
35
36
37
38#############################################################
39## Get form data
40#############################################################
41#Don't quotemeta everything - SEO body text needs to survive untouched (HTML-safe at save).
42#We do strip non-printable controls though.
43foreach my $line(keys %$form){
44 $form->{$line} =~ s/[^\x09\x0a\x0d\x20-\x7e]//g;
45}
46
47
48
49############################################################
50# Program Controls
51############################################################
52$|=1;
53my $userinfo = $login->login_verify();
54print qq~Content-type:text/html; Cache-Control:no-cache;\n\n~;
55if(!$userinfo){print qq~<script>window.location="$url->{login}";</script>~;}
56elsif(!($userinfo->{is_super_admin} || $userinfo->{_admin_is_super_admin})){print qq~<script>window.location="$url->{dashboard}";</script>~;}
57elsif(($form->{act} || '') eq 'save'){&save_seo;}
58else{&seo_form;}
59
60
61############################################################
62# Subroutines
63############################################################
64sub save_seo{
65 my $admin_id = $userinfo->{user_id};
66 $admin_id =~ s/[^0-9]//g;
67
68 my $dbh = $db->db_connect();
69 my $schema_ready = $seo->platform_settings_ready($db, $dbh, $database_name);
70
71 if($schema_ready){
72 my @keys = qw(
73 seo.title seo.description seo.keywords seo.og_image
74 seo.og_site_name seo.twitter_card seo.twitter_site
75 seo.canonical_base
76 );
77 foreach my $k(@keys){
78 my $form_key = $k; $form_key =~ s/\./_/g;
79 $seo->set_platform_setting($db, $dbh, $database_name, $k, $form->{$form_key}, $admin_id);
80 }
81 my $robots_val = ($form->{seo_robots_index} ? '1' : '0');
82 $seo->set_platform_setting($db, $dbh, $database_name, 'seo.robots_index', $robots_val, $admin_id);
83 }
84
85 $db->db_disconnect($dbh);
86
87 &seo_form('ok', 'Platform SEO settings saved.');
88}
89
90sub seo_form{
91 my($flash_kind, $flash_msg) = @_;
92 $flash_kind ||= '';
93 $flash_msg ||= '';
94
95 my $admin_id = $userinfo->{user_id}; $admin_id =~ s/[^0-9]//g;
96
97 my $dbh = $db->db_connect();
98 my $schema_ready = $seo->platform_settings_ready($db, $dbh, $database_name);
99 my $settings = $schema_ready ? $seo->get_platform_settings($db, $dbh, $database_name) : {};
100 $db->db_disconnect($dbh);
101
102 my $robots_on = (defined $settings->{'seo.robots_index'} && $settings->{'seo.robots_index'} eq '0') ? 0 : 1;
103 my $card = $settings->{'seo.twitter_card'} || 'summary_large_image';
104 my $preview_title = $settings->{'seo.title'} || 'PTMatrix';
105 my $preview_desc = $settings->{'seo.description'} || '';
106 my $preview_url = $settings->{'seo.canonical_base'} || 'https://ptmatrix.3dshawn.com';
107
108 #Create all template variables
109 my $tvars;
110 $tvars->{user_id} = $admin_id;
111 $tvars->{schema_ready} = $schema_ready ? 1 : 0;
112 $tvars->{schema_missing} = $schema_ready ? 0 : 1;
113 $tvars->{seo_title} = &h($settings->{'seo.title'} // '');
114 $tvars->{seo_description} = &h($settings->{'seo.description'} // '');
115 $tvars->{seo_keywords} = &h($settings->{'seo.keywords'} // '');
116 $tvars->{seo_og_image} = &h($settings->{'seo.og_image'} // '');
117 $tvars->{seo_og_site_name} = &h($settings->{'seo.og_site_name'} // 'PTMatrix');
118 $tvars->{seo_twitter_card} = $card;
119 $tvars->{seo_twitter_site} = &h($settings->{'seo.twitter_site'} // '');
120 $tvars->{seo_canonical_base} = &h($settings->{'seo.canonical_base'} // 'https://ptmatrix.3dshawn.com');
121 $tvars->{is_robots_on} = $robots_on;
122 $tvars->{is_card_summary} = ($card eq 'summary') ? 1 : 0;
123 $tvars->{is_card_large} = ($card eq 'summary_large_image') ? 1 : 0;
124 $tvars->{preview_title} = &h(substr($preview_title, 0, 60));
125 $tvars->{preview_desc} = &h(substr($preview_desc, 0, 160));
126 $tvars->{preview_url} = &h($preview_url);
127 $tvars->{flash_kind} = $flash_kind;
128 $tvars->{flash_msg} = &h($flash_msg);
129 $tvars->{has_flash} = $flash_msg ne '' ? 1 : 0;
130
131 my $body = join('', $tfile->template('tf_admin_seo.html', $tvars, $userinfo));
132
133 $load->render({
134 userinfo => $userinfo,
135 page_key => 'admin_seo',
136 title => 'Admin &middot; SEO',
137 body => $body,
138 });
139}
140
141sub h{
142 my $s = shift // '';
143 $s =~ s/&/&amp;/g; $s =~ s/</&lt;/g; $s =~ s/>/&gt;/g; $s =~ s/"/&quot;/g;
144 return $s;
145}
Keyboard: j next diff k previous diff g top G bottom r restore c compile-check ? help