mourningdove/cgi-bin/DW/Controller/Editor.pm

123 lines
3.3 KiB
Perl
Raw Permalink Normal View History

2026-05-24 01:03:05 +00:00
# DW::Controller::Editor
#
# Single-purpose routes for setting the editor userprops, which determine the
# default formatting type when writing new entries/comments/etc in the web UI.
#
# Authors:
# Nick Fagerlund <nick.fagerlund@gmail.com>
#
# Copyright (c) 2020 by Dreamwidth Studios, LLC.
#
# This program is free software; you may redistribute it and/or modify it under
# the same terms as Perl itself. For a copy of the license, please reference
# 'perldoc perlartistic' or 'perldoc perlgpl'.
#
package DW::Controller::Editor;
use strict;
use v5.10;
use LJ::JSON;
use DW::Controller;
use DW::Routing;
use DW::Template;
use DW::Formats;
use Carp;
DW::Routing->register_string( "/default_editor", \&default_editor_handler, app => 1 );
DW::Routing->register_rpc(
"default_editor", \&default_editor_rpc_handler,
format => 'json',
methods => { POST => 1 },
);
# Returns (1, "format_id") on success, (0, "error") on error.
sub default_editor_helper {
my ( $remote, $type, $new_editor ) = @_;
my $userprop;
my $err = sub { return ( 0, $_[0] ); };
return $err->('nouser') unless $remote;
$new_editor = DW::Formats::validate($new_editor);
if ( $type eq 'comment' ) {
$userprop = 'comment_editor';
}
elsif ( $type eq 'entry' ) {
$userprop = 'entry_editor2';
}
else {
return $err->('unknowntype');
}
$remote->set_prop( $userprop, $new_editor );
return ( 1, $new_editor );
}
# zero-javascript version
sub default_editor_handler {
my ( $ok, $rv ) = controller( form_auth => 1 );
return $rv unless $ok;
my $r = $rv->{r};
return error_ml('/default_editor.tt.error.nopost') unless $r->did_post;
my $remote = $rv->{remote};
return error_ml('/default_editor.tt.error.nouser') unless $remote;
my $POST = $r->post_args;
my $type = $POST->{type};
my $new_editor = $POST->{new_editor};
my $exit_text = $POST->{exit_text};
my $exit_url = $POST->{exit_url};
my ( $set_ok, $set_result ) = default_editor_helper( $remote, $type, $new_editor );
unless ($set_ok) {
return error_ml( "/default_editor.tt.error.$set_result", { type => $type } );
}
return DW::Template->render_template(
'default_editor.tt',
{
title => ".title.$type",
type => $type,
new_format => DW::Formats::display_name($set_result),
exit_text => $exit_text,
exit_url => $exit_url,
}
);
}
sub default_editor_rpc_handler {
my $r = DW::Request->get;
my $POST = $r->post_args;
# make sure we have a user of some sort
my $remote = LJ::get_remote();
return DW::RPC->err('Unable to load user for call.') unless $remote;
my $type = $POST->{type};
my $new_editor = $POST->{new_editor};
my ( $set_ok, $set_result ) = default_editor_helper( $remote, $type, $new_editor );
return DW::RPC->err( LJ::Lang::ml( "/default_editor.tt.error.$set_result", { type => $type } ) )
unless $set_ok;
return DW::RPC->out(
success => 1,
new_editor => $set_result,
message => LJ::ehtml(
LJ::Lang::ml(
'/default_editor.tt.success',
{ type => $type, new_format => DW::Formats::display_name($set_result) }
)
)
);
}
1;