package ONO::ToolBox::BlogEdit;
################################################################################
# COPYRIGHT / LICENSE #
################################################################################
#
# This file is part of the ONO Software Project.
#
# Copyright (C) 2000-2025 Jos KIRPS [ www.kirps.com | jos_AT_kirps_DOT_com ]
# and The Joopita Project [ www.joopita.org | contact_AT_joopita_DOT_com ]
#
# This file, as well as other parts of the ONO Software Project or related
# elements, are FREE SOFTWARE available under the ARTISTIC LICENSE 2.0.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# For the full license, see /ono/osr/license/LICENSE.txt, or write to
# jos_AT_kirps_DOT_com or contact_AT_joopita_DOT_com.
#
################################################################################
# END OF COPYRIGHT / LICENSE, HERE COMES THE CODE ... #
################################################################################
use strict;
use ONO::IO;
use ONO::DB;
use ONO::Lib::Basic;
use ONO::ToolBox::Docs;
use ONO::ToolBox::FileBrowserInit;
use ONO::ToolBox::PipeLine;
use ONO::ToolBox::Tree;
use ONO::ToolBox::Upload;
use ONO::Lib::UI::Tags;
use ONO::Lib::UI::Check;
use ONO::Lib::UI::Form;
use ONO::Lib::UI::MSG;
use ONO::Lib::UI::Help;
use ONO::Lib::Image::Size;
use ONO::Lib::Image::Magick;
use ONO::Lib::UI::Icon;
use ONO::Lib::Video::ToolBox;
use ONO::Lib::DateTime::ToolBox;
use ONO::Lib::Code::RandomID;
use ONO::Lib::Text::Editor;
use ONO::Lib::Web::Upload;
use ONO::FW::Media::Manager::ToolBox;
use ONO::Lib::Parser::Help;
sub post {
my (
$self,
$db,
$community,
$author,
$vars_ref,
$sql_ref,
$switches,
$setup_ref,
) = @_;
#: Post a new blog message.
my %vars = %$vars_ref;
my %sql = %$vars_ref;
my %setup;
if ($setup_ref) {
%setup = %$setup_ref;
}
my $TABLE = "blog";
if ($switches =~ /A/ && $setup{'alt_sql_table'}) {
$TABLE = $setup{'alt_sql_table'};
}
my (
$sec,$min,$hour,
$mday,$mon,$year,
$wday,$yday,$timestamp
) = ONO::Lib::DateTime::ToolBox->get;
$sql{'blog_message_title'} =~ s~\'~\'\'~g;
$sql{'pipeline_target'} =~ s~[^A-Za-z0-9\:]~~gi;
if ($setup{'blog_custom_username'}) {
$vars{'username'} = $setup{'blog_custom_username'};
}
my $MEDIA;
if ($sql{'pipeline_target'} && $sql{'pipeline_target_num'}) {
my @tp = split(/:/,$sql{'pipeline_target'});
my $PIPELINE = "media/users/".ONO::IO->deepdir($vars{'username'})."/$vars{'username'}/pipeline";
my $SUBDIR = $sql{"pipeline_target_dir_$sql{'pipeline_target_num'}"};
my ($DIR,$valid_user);
if ($tp[0] eq "user") {
$DIR = "media/users/".ONO::IO->deepdir($vars{'username'})."/$vars{'username'}/public";
$valid_user++;
}
if ($tp[0] eq "virclass") {
$DIR = "media/virclass/$tp[1]/public";
$SUBDIR =~ s~\*~$tp[1]~g;
$valid_user = ONO::DB->count($db,"${community}_school_virclass","edu_owner = '$vars{'username'}' AND id = '$tp[1]'");
if (!$valid_user) {
$valid_user = ONO::DB->count($db,"${community}_school_virclass_relationships","username = '$vars{'username'}' AND virclass = '$tp[1]'");
}
}
if ($tp[0] eq "schoolweb" || $tp[0] eq "web") {
$DIR = "$tp[0]/".ONO::IO->deepdir($tp[1])."/$tp[1]/media/photos";
if ($tp[0] eq "schoolweb") {
$valid_user = ONO::DB->count($db,"${community}_school_schoolweb","edu_owner = '$vars{'username'}'");
if (!$valid_user) {
$valid_user = ONO::DB->count($db,"${community}_school_schoolweb_admins","admin = '$vars{'username'}' AND schoolweb = '$tp[1]';");
}
if (!$valid_user) {
$valid_user = ONO::DB->count($db,"${community}_school_schoolweb_admins_sites","admin = '$vars{'username'}' AND site = '$tp[1]';");
}
}
}
if ($DIR =~ /^(media|web|schoolweb)\// && $SUBDIR =~ /^(dir|path):/ && $valid_user) {
if ($SUBDIR =~ s~^dir:~~) {
$DIR .= "/$SUBDIR";
}
if ($SUBDIR =~ s~^path:~~) {
$DIR = $SUBDIR
}
if ($sql{'pipeline_target_subdir_type'} eq "date") {
my $DATE = ONO::Lib::DateTime::ToolBox->select_date_saver("pipeline_target_subdir_date",$vars_ref);
if (length $DATE == 8) {
$DIR .= "/$DATE";
}
}
if ($sql{'pipeline_target_subdir_type'} eq "name") {
$sql{'pipeline_target_subdir_name'} = lc $sql{'pipeline_target_subdir_name'};
$sql{'pipeline_target_subdir_name'} =~ s~[^a-z0-9\_]~~g;
if (length $sql{'pipeline_target_subdir_name'} && length $sql{'pipeline_target_subdir_name'} < 33) {
$DIR .= "/$sql{'pipeline_target_subdir_name'}";
}
}
if (!ONO::IO->exists($DIR)) {
ONO::ToolBox::Docs->mkdir($db,$community,$DIR,$timestamp,$vars_ref);
}
foreach my $key (keys %vars) {
if ($key =~ /^pipeline_file_sel_(.*?)$/) {
if ($vars{"pipeline_filename_$1"}) {
my $file = $vars{"pipeline_filename_$1"};
$file =~ s~\.(.*?)$~~;
my $ext = $1;
my ($ALT,$whilecounter);
while (ONO::IO->exists("$DIR/$file$ALT.$ext") && $whilecounter < 1024) {
$whilecounter++;
$ALT = "_$whilecounter";
}
if (ONO::IO->exists("$PIPELINE/$file.$ext") && !ONO::IO->exists("$DIR/$file$ALT.$ext")) {
ONO::IO->mv("$PIPELINE/$file.$ext","$DIR/$file$ALT.$ext");
my $ID = ONO::Lib::Code::RandomID->make;
$MEDIA .= "$ID:";
ONO::ToolBox::Docs->mkfile($db,$community,$DIR,"$file$ALT.$ext","",$timestamp,$vars_ref,$ID);
}
}
}
}
}
$MEDIA =~ s~:$~~;
}
# we need ALL columns to ensure MS SQL compatibility
my $AUTHOR = "#$author";
if ($author =~ /^user:(.*?)$/) {
$AUTHOR = $1;
}
my $DATE = ONO::Lib::DateTime::ToolBox->select_date_saver("pipeline_target_subdir_date",$vars_ref);
if (length $DATE != 8) {
$DATE = "$year$mon$mday";
}
my $VID = ONO::Lib::Video::ToolBox->parse_video_url($sql{'blog_message_video'});
if ($VID && $MEDIA !~ /:$VID:/) {
$MEDIA .= ":$VID";
}
$MEDIA =~ s~^:~~;
$MEDIA =~ s~:$~~;
my $SQL = qq~INSERT INTO ${community}_${TABLE}_messages
(title,text,author_name,author_mail,author_website,date,timestamp,published,tags,flags,category,media)
VALUES
('$sql{'blog_message_title'}','$sql{'blog_message_text'}','$AUTHOR','','','$DATE','$timestamp','0','','','0','$MEDIA');
~;
ONO::DB->command($db,$SQL);
return ONO::DB->get($db,"id","${community}_${TABLE}_messages","WHERE author_name = '#$author'","id DESC","LIMIT 1");
}
sub delete {
#: Delete a blog message.
my (
$self,
$db,
$community,
$author,
$vars_ref,
$sql_ref,
$switches,
$setup_ref,
) = @_;
my %vars = %$vars_ref;
my %sql = %$sql_ref;
my %setup;
if ($setup_ref) {
%setup = %$setup_ref;
}
my $TABLE = "blog";
if ($switches =~ /A/ && $setup{'alt_sql_table'}) {
$TABLE = $setup{'alt_sql_table'};
}
my $AUTHOR = "author_name = '#$author'";
if ($author =~ /^user:(.*?)$/) {
$AUTHOR = "author_name = '$1'";
}
ONO::DB->command($db,qq~DELETE FROM ${community}_${TABLE}_messages WHERE id = '$sql{'blog_message_id'}' AND $AUTHOR;~);
}
sub editor {
my (
$self,
$db,
$community,
$author,
$path,
$lang,
$script_url,
$unused,
$timestamp,
$BLK_ref,
$vars_ref,
$sql_ref,
$switches,
$setup_ref,
) = @_;
#: The ONO blog editor.
#:
#: Available switches:
#:
#: -A alt table mode (if $setup{'alt_sql_table'} defined)
#: -N news post mode, will save title and text to the microblog robot queue
#: -p custom abs position (use $setup{'alt_pos_x'},$setup{'alt_pos_y'}, $setup{'alt_width'} is optional)
#: -w website mode
my %setup;
if ($setup_ref) {
%setup = %$setup_ref;
}
my %BLK = %$BLK_ref;
my %vars = %$vars_ref;
my %sql = %$sql_ref;
my $TABLE = "blog";
if ($switches =~ /A/ && $setup{'alt_sql_table'}) {
$TABLE = $setup{'alt_sql_table'};
}
if ($setup{'blog_custom_username'}) {
$vars{'username'} = $setup{'blog_custom_username'};
}
my $BASE = ONO::IO->base();
if (!$BASE && $setup{'software_base'}) {
$BASE = $setup{'software_base'};
}
my @texts = (
"add an existing directory",
"including all of its files",
"select single files",
"or upload new files",
"embed a video",
"can still be added",
"Too many results, please refine your search ...",
"You may set preferred folders and custom upload targets using your blog's setup tools.",
"Your current custom target folder is",
"add text(s)",
"Select a target folder",
"will be created",
"target folder exists",
"target folder has been created",
"This message contains broken links to non-existing files or directories, shall we remove those now?",
"Broken links have been removed.",
"You will leave this page, and any changes you made to your blog entry without saving first will be lost.",
"If you made any changes to your text or title, then please save them first!",
"save first, then manage files",
"manage / edit files",
"All selected files will be affected.",
"Image processing successfully completed.",
);
if ($lang eq "de") {
@texts = (
"ein vorhandenes Verzeichnis hinzufügen",
"einschließlich aller seiner Dateien",
"einzelne Dateien auswählen",
"oder neue Dateien hochladen",
"Video einbetten",
"können noch hinzugefügt werden",
"Zu viele Ergebnisse, bitte verfeinere deine Suche ...",
"Du kannt mithilfe der Setup-Tools deines Blogs bevorzugte Ordner und benutzerdefinierte Upload-Ziele festlegen.",
"Dein aktuell bevorzugter Upload-Ordner ist",
"Text(e) hinzufügen",
"Wähle einen Zielordner",
"wird erstellt werden",
"Zielordner existiert",
"Zielordner wurde erstellt",
"Dieser Post enthält fehlerhafte Links zu nicht vorhandenen Dateien oder Verzeichnissen. Sollen diese jetzt entfernt werden?",
"Defekte Links wurden entfernt.",
"Du wirst diese Seite verlassen und alle Änderungen, die du an deinem Blogeintrag vorgenommen hast ohne vorher zu speichern, werden verloren gehen.",
"Wenn du Änderungen an deinem Text oder Titel vorgenommen hast, dann speichere diese bitte zuerst!",
"speichern, dann Dateien verwalten",
"Dateien verwalten / bearbeiten",
"Alle ausgewählten Dateien werden bearbeitet.",
"Bildbearbeitung erfolgreich abgeschlossen.",
);
}
if ($lang eq "lu") {
@texts = (
"een existéirend Verzeechnis bäimaachen",
"mat all sengen Dateien",
"eenzel Dateien auswielen",
"oder nei Dateien eroplueden",
"Video abetten",
"kënne nach bäigesat ginn",
"Zevill Resultater, sich w.e.g. méi präzis ...",
"Du kanns préferéiert Dossiers an personaliséiert Ziler fir den Upload mat de Setup-Tools vun dengem Blog définéieren.",
"Däin aktuelle personaliséierten Upload-Dossier ass",
"Text(er) bäimaachen",
"Wiel en Zil-Verzeechnis",
"gëtt erschaf",
"Zil-Verzeechnis existéiert",
"Zil-Verzeechnis gouf erstallt",
"Dëse Message enthält futtis Linken op net existent Dateien oder Verzeechnisser, solle mir déi elo ewechmaachen?",
"Futtis Linke goufe geläscht.",
"Du verléiss dës Säit, an all Ännerungen, déis de an dengem Blogbäitrag gemaach hues, ouni als éischt ze späicheren, gi verluer.",
"Wanns de Ännerungen un dengem Text oder Titel gemaach hues, da späicher se w.e.g. als éischt!",
"späicheren, dann Dateie geréieren",
"Dateie geréieren / beaarbechten",
"All ausgewielt Dateie gi beaarbecht.",
"Bildbeaarbechtung erfollegräich ofgeschloss.",
);
}
if ($lang eq "fr") {
@texts = (
"ajouter un répertoire existant",
"y compris tous ses fichiers",
"sélectionner des fichiers individuels",
"ou télécharger de nouveaux fichiers",
"intégrer une vidéo",
"peuvent être ajoutés",
"Trop de résultats, veuillez affiner votre recherche ...",
"Vous pouvez définir des dossiers préférés et des cibles de téléchargement personnalisées à l'aide des outils de configuration de votre blog.",
"Votre dossier cible personnalisé actuel est",
"ajouter texte(s)",
"Sélectionnez un dossier cible",
"sera créé",
"le dossier cible existe",
"le dossier cible a été créé",
"Ce message contient des liens rompus vers des fichiers ou des répertoires inexistants, allons-nous les supprimer maintenant?",
"Les liens rompus ont été supprimés.",
"Vous quitterez cette page et toutes les modifications que vous avez apportées à votre entrée de blog sans enregistrer au préalable seront perdues.",
"Si vous avez apporté des modifications à votre texte ou à votre titre, veuillez d'abord les enregistrer!",
"enregistrer, ensuite gérer fichiers",
"gérer / modifier fichiers",
"Tous les fichiers sélectionnés seront traités.",
"Traitement d'images terminé avec succès",
);
}
my $mode_url = "$script_url?mode=";
my $default_mode = "website";
my $form = qq~form method="post"><input type="hidden" name="mode" value="website"~;
if ($vars{'virclass'}) {
$form .= qq~><input type="hidden" name="virclass" value="$vars{'virclass'}"~;
}
my $AUTHOR = qq~author_name = '#$author'~;
my $textarea_height = 300;
my $POS1 = "rel";
my $POS2 = "w90";
my $POS3 = "bottom:170px";
my $upload_author = $author;
my $upload_area = "public";
my ($MAIN,$ADD_DIRS,$OPTS,$DEBUG,$MAIN_WIN_INJECT);
my (
$sec,$min,$hour,
$mday,$mon,$year,
$wday,$yday,$timestamp
) = ONO::Lib::DateTime::ToolBox->get;
if ($switches =~ /w/) {
$mode_url = "$script_url=";
$default_mode = "db_news";
$form = qq~form>
<input type="hidden" name="mode" value="db_news">
<input type="hidden" name="virclass" value="$vars{'virclass'}">
<input type="hidden" name="environment" value="$vars{'environment'}">
<input type="hidden" name="school" value="$vars{'school'}">
<input type="hidden" name="website" value="$vars{'website'}"
~;
$AUTHOR = qq~author_name LIKE '#WEB#$author%'~;
$textarea_height = 200;
$upload_author = "web_$author";
if ($vars{'school'}) {
$upload_author = "schoolweb_$author";
}
$upload_area = "photos";
$OPTS .= qq~<a href="${mode_url}db_news" class="button_yellow">$BLK{'done'} / $BLK{'back'}</a>~;
}
if ($author =~ /^user:(.*?)$/) {
$AUTHOR = qq~author_name = '$1'~;
$POS1 = "abs";
$POS2 = "w100";
$POS3 = "top:-48px;left:-48px";
$mode_url = "$script_url";
$default_mode = "";
$setup{'blog_dir_media'} = "blog";
$form = qq~form>
<input type="hidden" name="mode" value="$vars{'mode'}">
<input type="hidden" name="virclass" value="$vars{'virclass'}">
<input type="hidden" name="community_screen" value="$vars{'community_screen'}"
~;
}
if ($switches =~ /p/ && $setup{'alt_pos_x'} ne "" && $setup{'alt_pos_y'} ne "") {
$POS3 = "top:$setup{'alt_pos_y'}px;left:$setup{'alt_pos_x'}px";
if ($setup{'alt_width'}) {
$POS3 .= ";width:$setup{'alt_width'}";
}
}
$DEBUG .= "author: $AUTHOR<br>";
my $BLOG_LINK = "$mode_url$default_mode&blog_message_edit=1&blog_message_id=$vars{'blog_message_id'}";
$OPTS .= qq~<div id="blog_file_button">
<a href="javascript:void(0);" onclick="open_blog_file_div();" class="button_yellow ml10">$BLK{'files'} ($BLK{'images'}, PDFs, ...)</a>
</div>
<div id="ono_parser_help_button">
<a href="javascript:void(0);"
onclick="onojs_class('ono_parser_help_button','trans30');onojs_block('ono_parser_help_box');
onojs_class('blog_file_button','');onojs_hide('blog_file_div');
onojs_class('blog_tags_button','');onojs_hide('blog_tags_div');"
class="button ml10">$BLK{'help'}: $BLK{'links'} / $BLK{'style'}</a>
</div>
<div id="blog_tags_button">
<a href="javascript:void(0);"
onclick="onojs_class('blog_tags_button','trans30');onojs_block('blog_tags_div');
onojs_class('blog_file_button','');onojs_hide('blog_file_div');
onojs_class('ono_parser_help_button','');onojs_hide('blog_link_div');"
class="button ml10">$BLK{'keywords'} / $BLK{'tags'}</a>
</div>
<script>
function open_blog_file_div() {
onojs_class('blog_file_button','trans30');onojs_block('blog_file_div');
onojs_class('ono_parser_help_button','');onojs_hide('blog_link_div');
onojs_class('blog_tags_button','');onojs_hide('blog_tags_div');
}
</script>
~;
my (@cats,$cat_num);
foreach my $line (ONO::DB->command($db,"SELECT * FROM ${community}_${TABLE}_categories")) {
my $col_ref = $line;
my @col = @$col_ref;
@cats = (@cats,"$col[0]:$col[1]:$col[2]");
$cat_num++;
}
if ($vars{'blog_message_save'}) {
# title, text and meta data
my $pub = 0;
if ($vars{'blog_message_published'} || $vars{'blog_message_publish_button'}) {
$pub = 1;
if (!$vars{'blog_message_published_previous'}) {
ONO::IO->append(ONO::Ext::Morzino::ToolBox->virclass_dir($author)."data/feed/$year$mon$mday.txt","$timestamp\^$vars{'username'}\^blog_publish\^$sql{'blog_message_id'}\^$sql{'blog_message_title'}\^\n");
}
}
my $date = ONO::Lib::DateTime::ToolBox->select_date_saver("blog_message_date",$vars_ref);
my $FLAGS;
if ($vars{'blog_message_type_n'}) {
$FLAGS .= "n";
}
if ($vars{'blog_message_type_b'}) {
$FLAGS .= "b";
}
if ($vars{'blog_message_type_r'}) {
$FLAGS .= "r";
}
if ($vars{'blog_message_type_n'} && $vars{'blog_message_type_b'} && !$vars{'blog_message_type_r'}) {
$FLAGS = "";
}
if (!$vars{'blog_message_type_n'} && !$vars{'blog_message_type_b'} && !$vars{'blog_message_type_r'}) {
$FLAGS .= "x";
}
my $CAT;
if ($cat_num) {
if ($sql{'blog_messages_catecory'} < 1) {
$sql{'blog_messages_catecory'} = 0;
}
$CAT = qq~, category = '$sql{'blog_messages_catecory'}'~;
}
my $SQL = qq~UPDATE ${community}_${TABLE}_messages SET
title = '$sql{'blog_message_title'}',
text = '$sql{'blog_message_text'}',
date = '$date',
published = '$pub',
tags = '$sql{'blog_message_tags'}',
flags = '$FLAGS'
$CAT
WHERE id = '$sql{'blog_message_id'}' AND $AUTHOR;
~;
ONO::DB->command($db,$SQL);
if ($switches =~ /N/ && $sql{'blog_microblog_newslang'}) {
# media support currently only works for 1 image in 1 directory, even not for directly linked files
my $MEDIA;
my $IMG = ONO::DB->get($db,"media","${community}_${TABLE}_messages","id = '$sql{'blog_message_id'}' AND $AUTHOR");
$IMG =~ s~[^A-Za-z0-9\:\*]~~g;
if ($IMG =~ s~^\*~~ || $IMG =~ s~^\:\*~~) {
my $dir = ONO::DB->get($db,"doc_path","${community}_docs_dirs","id_10 = '$IMG'");
foreach my $file (ONO::IO->dir($dir)) {
if ($file !~ /^\./ && $file =~ /\.jpg$/) {
$MEDIA .= qq~<div class="inline"><div class="mt5"><img class="block auto radius10" src="/$dir/$file" style="width:100%;max-width:640px;height:auto" alt=""></div></div>~;
}
}
}
my $TITLE = $sql{'blog_message_title'};
$TITLE =~ s~\'\'~\'~g;
my $NEWS = $sql{'blog_message_text'};
$NEWS =~ s~\'\'~\'~g;
$NEWS =~ s~<p(.*?)>~<div class="mb10">~g;
$NEWS =~ s~</p>~</div>~g;
ONO::IO->mkpath("var/community/$community/microblog_news/$date");
ONO::IO->store(
"var/community/$community/microblog_news/$date/$sql{'blog_microblog_newslang'}.txt",
qq~<div class="bold mb10"><h3>$TITLE</h3></div>$NEWS$MEDIA~,
);
}
}
# jump to media after save
if ($vars{'blog_message_media_button'}) {
$vars{'blog_message_edit_option'} = "media";
}
# flip and rotate
my $rotate_custom;
foreach my $key (keys %vars) {
if ($key =~ /^blog_message_edit_option_fliprotate_(.*?)$/) {
$rotate_custom = $1;
}
}
if ($vars{'blog_message_edit_option'} eq "media" && ($vars{'blog_message_edit_option_fliprotate'} || $rotate_custom)) {
$vars{'blog_message_edit_option'} = "wait";
my ($file,$total);
my $processing = $vars{'blog_message_edit_option_filenum'}+1;
my $URL = "$BLOG_LINK&blog_message_edit_option=media&&blog_message_edit_option_filenum=$processing&";
if ($rotate_custom) {
$URL .= qq~blog_message_edit_option_fliprotate_$rotate_custom=1&~;
$URL .= qq~media_files_op_rotate_value_$rotate_custom=$vars{"media_files_op_rotate_value_$rotate_custom"}~;
} else {
$URL .= qq~blog_message_edit_option_fliprotate=1&media_files_op_rotate_value=$vars{'media_files_op_rotate_value'}~;
}
# sort is important !!!
foreach my $key (sort %sql) {
if ($rotate_custom) {
if ($key =~ m/^blog_message_image_update2_$rotate_custom\_(.*?)$/ && $vars{$key}) {
$total++;
if ($processing == $total) {
$file = $1;
}
$URL .= qq~&$key=1~;
}
} else {
if ($key =~ m/^blog_message_image_update_(.*?)$/ && $vars{$key}) {
$total++;
if ($processing == $total) {
$file = $1;
$file =~ s~[^A-Za-z0-9]~~g;
}
$URL .= qq~&$key=1~;
}
}
}
my $remaining = $total-$processing+1;
if (!$remaining) {
$vars{'blog_message_edit_option'} = "media";
} else {
my $width = int(90/$total*$processing);
my $FILE;
if ($file) {
if ($rotate_custom) {
$FILE = "$file";
if (ONO::IO->image($FILE) && $vars{"media_files_op_rotate_value_$rotate_custom"}) {
ONO::Lib::Image::Magick->action("/$FILE","/$FILE",$vars{"media_files_op_rotate_value_$rotate_custom"});
ONO::ToolBox::Docs->mkthumb("$FILE");
}
} else {
foreach my $line (ONO::DB->select($db,"${community}_docs_files","id_10 = '$file'")) {
my @row = ONO::DB->readcols($line);
$FILE = $row[2];
if (ONO::IO->image($FILE) && $vars{'media_files_op_rotate_value'}) {
ONO::Lib::Image::Magick->action("/$FILE","/$FILE",$vars{'media_files_op_rotate_value'});
ONO::ToolBox::Docs->mkthumb("$FILE");
}
}
}
}
if (!$FILE) {
$FILE = qq~<span class="lightred bold">Error: file not found [$file]</span>~;
} else {
$FILE = ONO::Lib::Basic->pathbreaks($FILE);
}
if (!$rotate_custom) {
$FILE = "$FILE [$file]";
}
$MAIN_WIN_INJECT .= qq~<h1>$BLK{'Please_wait'}...</h1>
<div class="box_paper p0">
<div class="box_green nowrap" style="width:${width}%">$processing / $total</div>
</div>
<div class="p10">
<table class="default_table">
<tr>
<td class="pad5_2"><img class="block32" src="/ono/osr/images/loading/wheel_32.gif" alt=""></td>
<td class="pad5_2">$FILE</td>
</tr>
</table>
</div>
~;
$MAIN_WIN_INJECT .= ONO::IO->refresh($URL,4);
}
}
# add or save media
if (
($vars{'blog_message_save_media'} || $sql{'blog_option_remove_dir'} || $vars{'add_dir_now'} || $vars{'add_virclass_txt_id'}) &&
!$vars{'filebrowser_local_upload_button'} &&
(!$vars{'add_virclass_txt'} || $vars{'add_virclass_txt_id'})
) {
my $media = ONO::DB->get($db,"media","${community}_${TABLE}_messages","id = $sql{'blog_message_id'}");
$media = ":$media:";
if ($sql{'blog_option_remove_dir'}) {
my $show_dir = ONO::Lib::Basic->pathbreaks($sql{'blog_option_remove_dir'});
foreach my $line (ONO::DB->select($db,"${community}_docs_dirs","doc_path = '$sql{'blog_option_remove_dir'}'")) {
my @row = ONO::DB->readcols($line);
$MAIN_WIN_INJECT .= qq~<div class="box_green mb10"><span class="bold">$BLK{'Remove'}:</span> $show_dir [$row[1]]</div>~;
$media =~ s~\*$row[1]~~;
}
}
if ($vars{'blog_message_save_media'}) {
foreach my $add_file (ONO::ToolBox::FileBrowserInit->selected($vars_ref)) {
$add_file =~ s~^/~~;
my $ID = ONO::DB->get($db,"id_10","${community}_docs_files","doc_file = '$add_file'");
if ($ID && $media !~ /:$ID:/) {
# ID found, so we'll add this file
$media .= ":$ID";
} else {
# repair missing link in ${community}_docs_files
$ID = ONO::Lib::Code::RandomID->make;
my $mkfile = $add_file;
$mkfile =~ s~^(.*)/~~;
my $mkdir = $1;
ONO::ToolBox::Docs->mkfile($db,$community,$mkdir,$mkfile,"",$timestamp,$vars_ref,$ID);
$media .= ":$ID";
$DEBUG .= "FIX MISSING DB ENTRY - DIR = $mkdir, FILE = $mkfile<br>";
}
$DEBUG .= "ADD FILE: $add_file, ID: $ID<br>";
}
if ($vars{'blog_message_image_remove_now'}) {
foreach my $key (%sql) {
if ($key =~ m/^blog_message_image_update_(.*?)$/ && $vars{$key}) {
$media =~ s~:$1:~:~g;
$media =~ s~:\*$1:~:~g;
}
}
}
}
if ($vars{'add_dir_now'}) {
$DEBUG .= "ADD DIR: $vars{'add_dir_now'}<br>";
my $ID = ONO::DB->get($db,"id_10","${community}_docs_dirs","doc_path = '$sql{'add_dir_now'}'");
if (!$ID) {
ONO::ToolBox::Docs->mkdir($db,$community,$sql{'add_dir_now'},$timestamp,$vars_ref);
$ID = ONO::DB->get($db,"id_10","${community}_docs_dirs","doc_path = '$sql{'add_dir_now'}'");
$DEBUG .= "FIXING DIR ID... ($ID)<br>";
}
if ($ID && $media !~ /:\*$ID:/) {
$media .= ":*$ID";
}
}
if ($sql{'blog_add_video'}) {
my $VID = ONO::Lib::Video::ToolBox->parse_video_url($sql{'blog_add_video'});
if ($VID && $media !~ /:$VID:/) {
$media .= ":$VID";
}
}
if ($sql{'add_virclass_txt'} && length $sql{'add_virclass_txt_id'} == 10) {
$vars{'add_virclass_txt'} = "";
$sql{'add_virclass_txt'} = "";
$media .= qq~EMB-TXT-$sql{'add_virclass_txt_id'}~;
}
my $whilecounter;
while ($media =~ s~::~:~g && $whilecounter < 256) {
$whilecounter++;
}
$media =~ s~^:~~;
$media =~ s~:$~~;
$media = substr($media,0,1023);
my $SQL = "UPDATE ${community}_${TABLE}_messages SET media = '$media' WHERE id = '$sql{'blog_message_id'}' AND $AUTHOR;";
ONO::DB->command($db,$SQL);
$DEBUG .= "$SQL<br>";
}
foreach my $line (ONO::DB->command($db,"SELECT * FROM ${community}_${TABLE}_messages WHERE id = '$sql{'blog_message_id'}' AND $AUTHOR;")) {
my $col_ref = $line;
my @col = @$col_ref;
my $DATE_SEL = ONO::Lib::DateTime::ToolBox->select_date("blog_message_date",1990,$year+2,$col[6],$lang,"mPT");
my $pubstatus = "bg_green green";
my (%chk,$pre);
if ($col[8]) {
$chk{'pub'} = " checked";
$pre = 1;
} else {
$pubstatus = "bg_red red";
}
if ($col[10] =~ /n/) {
$chk{'n'} = " checked";
}
if ($col[10] =~ /b/) {
$chk{'b'} = " checked";
}
if ($col[10] !~ /(n|b|r)/) {
$chk{'n'} = " checked";
$chk{'b'} = " checked";
}
if ($col[10] =~ /r/) {
$chk{'r'} = " checked";
}
if ($col[10] =~ /x/) {
$chk{'b'} = "";
$chk{'n'} = "";
$chk{'r'} = "";
}
my @SWITCHES = (
ONO::Lib::UI::Check->switch(
"blog_message_published",
$chk{'pub'},
"J","",
"onojs_class('blog_message_status_tr','bt bb bg_green green')",
"onojs_class('blog_message_status_tr','bt bb bg_red red')",
),
ONO::Lib::UI::Check->switch("blog_message_type_n",$chk{'n'},"m"),
ONO::Lib::UI::Check->switch("blog_message_type_b",$chk{'b'},"m"),
ONO::Lib::UI::Check->switch("blog_message_type_r",$chk{'r'},"m"),
);
my $CAT;
if ($setup{'virclass_categories'}) {
foreach my $cat (split(/;/,$setup{'virclass_categories'})) {
if ($cat eq "-") {
$CAT .= qq~<option value="">----</option>~;
} else {
my $sel;
my @cp = split(/:/,$cat);
if ($col[11] == $cp[0] || (!$col[11] && $setup{'cat'} == $cp[0])) {
$sel = " selected";
}
$CAT .= qq~<option value="$cp[0]"$sel>$cp[1]</option>~;
}
}
}
if ($cat_num || $CAT) {
if ($CAT) {
$CAT .= qq~<option value="">----</option>~;
}
foreach my $cat (@cats) {
my @cp = split(/:/,$cat);
my $sel;
if ($col[11] == $cp[0]) {
$sel = " selected";
}
$CAT .= qq~<option value="$cp[0]"$sel>$cp[1]</option>~;
}
$CAT = qq~<td class="pad10_2 hide800"></td><td><div class="select"><select name="blog_messages_catecory"><option value=""></option><option value="">----</option>$CAT</select></div></td>~;
if ($setup{'virclass_categories'}) {
$CAT .= qq~<td><a href="$script_url?mode=preferences"><img class="block16" src="/ono/osr/images/icons/ono/32x32/setup.png" alt=""></a></td>~;
}
}
my $FEEDSEL = qq~<td>$SWITCHES[1]</td>
<td>$BLK{'News'}</td>
<td class="p2"></td>
<td>$SWITCHES[2]</td>
<td>$BLK{'Blog'}</td>
<td class="p2"></td>
<td>$SWITCHES[3]</td>
<td>$BLK{'Reviews'}</td>
~;
if ($community eq "school") {
$FEEDSEL = qq~<td>$SWITCHES[1]</td>
<td>$BLK{'Website'} / $BLK{'Portal'}</td>
<td class="p2"></td>
<td>$SWITCHES[2]</td>
<td>$BLK{'Classroom_alt'} / $BLK{'Blog'}</td>
~;
}
my $NEWSBLOG = qq~<table class="default_table ml5">
<tr>
$FEEDSEL
$CAT
</tr>
</table>
~;
$col[2] =~ s~\[~##OPEN##~g;
$col[2] =~ s~\]~##CLOSE##~g;
my ($IMG1,$IMG2,$IMG,$DIR_LINKS,$DIR_LINKS2,@DIR_LINKS2_LIST,@existing,$not_found_list,$not_found_num);
my $img_count = 0;
if ($col[12] =~ m/[A-Za-z0-9]/) {
my @images = ($col[12]);
if ($col[12] =~ /:/) {
@images = split(/:/,$col[12]);
}
foreach my $img (@images) {
if ($img =~ m/[A-Za-z0-9]/) {
my $found;
my $img_ori = $img;
if ($img =~ s~\*~~) {
foreach my $line (ONO::DB->select($db,"${community}_docs_dirs:id_10,doc_path","id_10 = '$img'")) {
my @row = ONO::DB->readcols($line);
$img_count++;
$found++;
my $total_files;
my $upload_dir = $row[1];
$upload_dir =~ s~^media/virclass/(.*?)/public/~~;
my $show_path = $row[1];
$show_path =~ s~/~/\&zwnj\;~g;
$ADD_DIRS .= qq~<tr class="vtop">
<td><img class="block48 mr5" src="/ono/osr/images/icons/crystal/64x64/filesystems/folder.png" alt=""></td>
<td>
$show_path
<div class="inline">
<a href="$BLOG_LINK&blog_message_edit_option=media&upload_dir=$upload_dir&upload_to_dir=1" class="button_green mt5 mr10">$BLK{'upload'}</a>
</div>
</td>
</tr>
~;
my $imgs = 0;
foreach my $file (ONO::IO->dir($row[1])) {
if ($file !~ /^\./) {
if ($file ne "index.shtml" && $file !~ /\.setup$/i) {
$total_files++;
}
if ($file =~ /\.(jpg|png|gif|pdf|mp4)$/i) {
$imgs++;
if ($file =~ /\.(jpg|png|gif|pdf)$/i) {
my ($status,$dim_x) = ONO::Lib::Image::Size->resize("/$row[1]/$file","max_y:64");
my $IMG = ONO::FW::Media::Manager::ToolBox->protected_image("/$row[1]/$file",\%sql,$community);
$IMG2 .= qq~<a href="javascript:void(0);" onclick="open_blog_file_div();">
<img class="block64 radius5 fl mr5 mb5" src="$IMG" style="width:${dim_x}px" alt="">
</a>
~;
}
if ($file =~ /\.(mp4)$/i) {
$IMG2 .= qq~<a href="javascript:void(0);" onclick="open_blog_file_div();">
<img class="block64 radius5 fl mr5 mb5" src="/ono/osr/images/icons/crystal/64x64/mimetypes/video.png" alt="">
</a>
~;
}
}
}
}
my $name = $row[1];
$name =~ s~^(.*)/~~;
my $EDIT;
if ($vars{'mode'} eq "website" && $row[1] =~ m~^media/virclass/(.*?)/(.*?)/(.*)$~) {
$EDIT = qq~<a href="${mode_url}media&community_screen=media_dir&area=$2&dir=$3">
<img class="block16 abs" src="/ono/osr/images/icons/ono/32x32/edit.png" style="bottom:0px;right:0px;z-index:999" alt="">
</a>
~;
}
my $SWITCH = ONO::Lib::UI::Check->switch("blog_message_image_update_$row[0]",0,"mJs","","onojs_block('blog_message_image_update_button');onojs_hide('blog_message_image_update_div');");
# ono_ui_switch_blog_message_image_update_$row[0]_toggle();
$IMG1 .= qq~<div class="box_fabric fl mr5 mb5 radius5 rel" style="padding:2px;overflow:hidden">
$EDIT
<table class="default_table">
<tr class="vtop">
<td>$SWITCH</td>
<td>
<div class="block64 rel">
<img class="abs block64 radius5" src="/ono/osr/images/icons/crystal/64x64/filesystems/folder.png" alt=""
onclick="ono_ui_switch_blog_message_image_update_$row[0]_toggle();">
<div class="abs red bold center bo bg_yellow small radius5 lh125" style="top:0px;right:0px"> $total_files </div>
</div>
</td>
</tr>
</table>
<div class="bg_paper abs small radius5 lh125 trans80" style="bottom:1px;left:0px;max-height:20px"> $name </div>
</div>
~;
if ($row[1] =~ m~^media/virclass/~ || $row[1] =~ m~^(web|schoolweb)/~) {
$row[1] =~ m~^media/virclass/(.*?)/(.*?)/(.*)$~;
my $LINK = "${mode_url}media&community_screen=media_dir&area=$2&dir=$3";
my $hide;
if ($row[1] =~ m~^(web|schoolweb)/~) {
$LINK = "";
my $SCRIPT;
foreach my $script ('index_net','index_schoolweb','index_tools_cms') {
if (ONO::IO->exists("cgi-bin/local/perl/$community/$script.pl")) {
$SCRIPT = "/cgi-bin/local/perl/$community/$script.pl";
}
}
$row[1] =~ m~^(web|schoolweb)/(.*?)/(.*?)/(.*?)/(.*?)/media/photos/(.*?)$~;
my $website = $5;
$website =~ s~[^A-Za-z0-9]~~gi;
if ($community eq "school") {
my $school = ONO::DB->get($db,"school","${community}_school_schoolweb_sites","id_10 = '$website'");
$LINK = "$SCRIPT?school=$school&website=$website&mode=web_media&community_screen=media_dir&area=photos&dir=$6";
} else {
my $env = ONO::DB->get($db,"environment","${community}_web_sites","id_10 = '$website'");
$LINK = "$SCRIPT?environment=$env&website=$website&mode=web_media&community_screen=media_dir&area=photos&dir=$6";
}
if (!$SCRIPT || !$LINK) {
$hide++;
}
}
if (!$hide) {
@existing = (@existing,"$row[1]:used:$name");
my $subID = ONO::Lib::Code::RandomID->make;
my $FILES;
foreach my $file (ONO::IO->dir($row[1])) {
if ($file !~ /^\./ && $file ne "index.shtml") {
$FILES .= &dir_links_icon("",$community,$subID,$row[1],$file,\%sql);
}
}
my $FLIPROT = &dir_links_fliprot("",$subID,$BLK_ref);
my $REMOVE = qq~$script_url?mode=$vars{'mode'}&blog_message_edit=1&blog_message_id=$vars{'blog_message_id'}&~;
$REMOVE .= qq~blog_message_edit_option=media&blog_option_remove_dir=$row[1]~;
$DIR_LINKS .= qq~<tr><td></td><td class="p10"></td></tr>
<tr class="vtop">
<td class="center">
<a href="$LINK">
<img class="block64 auto" src="/ono/osr/images/icons/crystal/64x64/filesystems/folder.png" alt="">
</a>
<a href="$LINK" class="col6">$name</a>
<div class="inline auto">
<a href="$REMOVE" class="button_red button_mini mt5">$BLK{'remove'}</a>
</div>
</td>
<td class="pad10_2"><div class="box_paper"><div class="inline w100">$FILES</div>$FLIPROT</div></td>
</tr>
~;
}
}
}
} else {
foreach my $line (ONO::DB->select($db,"${community}_docs_files:id_10,doc_file,width,height","id_10 = '$img'")) {
my @row = ONO::DB->readcols($line);
$found++;
$img_count++;
my $SRC = $row[1];
if (!ONO::IO->image($row[1])) {
$SRC = ONO::ToolBox::Docs->mimetype_icon($row[1],64);
$SRC =~ s~^/~~;
}
my ($status,$dim_x) = ONO::Lib::Image::Size->resize("/$SRC","max_y:64");
my $IMG = ONO::FW::Media::Manager::ToolBox->protected_image("/$SRC",\%sql);
#my $IMG = "/$SRC";
my $FILENAME = $row[1];
$FILENAME =~ s~^(.*)/~~;
my $PATHNAME = ONO::Lib::Basic->pathbreaks($row[1]);
my $rand = ONO::Lib::Code::RandomID->make;
@DIR_LINKS2_LIST = (@DIR_LINKS2_LIST,$row[1]);
my $SWITCH = ONO::Lib::UI::Check->switch("blog_message_image_update_$row[0]",0,"mJs","","onojs_block('blog_message_image_update_button');onojs_hide('blog_message_image_update_div');");
# ono_ui_switch_blog_message_image_update_$row[0]_toggle();
$IMG1 .= qq~<div class="box_fabric fl mr5 mb5 radius5" style="padding:2px;overflow:hidden">
<table class="default_table">
<tr class="vtop">
<td>$SWITCH</td>
<td>
<div class="rel cursorlink" style="z-index:999"
onmouseover="onojs_hide('blog_message_image_filename1_$row[0]');onojs_block('blog_message_image_filename2_$row[0]');onojs_sethtml('ono_blogedit_path_info','$PATHNAME');"
onmouseout="onojs_block('blog_message_image_filename1_$row[0]');onojs_hide('blog_message_image_filename2_$row[0]');onojs_sethtml('ono_blogedit_path_info',' ');"
onclick="ono_ui_switch_blog_message_image_update_$row[0]_toggle();">
<img class="block64 radius5" src="$IMG?rand=$rand" style="width:${dim_x}px" alt="">
<div class="bg_paper abs small radius5 lh125 trans80" style="bottom:-3px;left:-22px;overflow:hidden">
<div id="blog_message_image_filename1_$row[0]" style="max-width:80px"> $FILENAME </div>
<div id="blog_message_image_filename2_$row[0]" class="small hide" style="max-height:48px"> $PATHNAME </div>
</div>
</div>
</td>
</tr>
</table>
</div>
~;
$IMG2 .= qq~<a href="javascript:void(0);" onclick="open_blog_file_div();">
<img class="block64 radius5 fl mr5 mb5" src="$IMG" style="width:${dim_x}px" alt="">
</a>
~;
}
if ($img =~ /^EMB-(TXT)-(.*)$/) {
my $TXT = $2;
$img_count++;
$img_count++;
$found++;
my $OVER = qq~<div id="text_$TXT" class="box_paper pad10_2 small lh125 radius5 abs hide" style="z-index:999"><span class="bold">$BLK{'Text'}</span> ($TXT)</div>~;
my $SWITCH = ONO::Lib::UI::Check->switch("blog_message_image_update_$img",0,"mJs","","onojs_block('blog_message_image_update_button');onojs_hide('blog_message_image_update_div');");
# ono_ui_switch_blog_message_image_update_$row[0]_toggle();
$IMG1 .= qq~<div class="box_fabric fl mr5 mb5 radius5 p2" onmouseover="onojs_block('text_$TXT');" onmouseout="onojs_hide('text_$TXT');">
<div class="rel" style="top:32px">$OVER</div>
<table class="default_table">
<tr class="vtop">
<td>$SWITCH</td>
<td>
<img class="block64 radius5" src="/ono/osr/images/icons/crystal/64x64/mimetypes/txt.png" alt=""
onclick="ono_ui_switch_blog_message_image_update_${img}_toggle();">
</td>
</tr>
</table>
</div>
~;
$IMG2 .= qq~<a href="javascript:void(0);" onclick="open_blog_file_div();">
onmouseover="onojs_block('text_$TXT');" onmouseout="onojs_hide('text_$TXT');">
<div class="rel fl mr5 mb5">
$OVER
<img class="block64" src="/ono/osr/images/icons/crystal/64x64/mimetypes/txt.png" alt="">
</div>
</a>
~;
}
if ($img =~ /^EMB-(YTB|VIM)-(.*)$/) {
my $SITE = "YouTube";
my $VID = $2;
if ($1 eq "VIM") {
$SITE = "Vimeo";
}
$img_count++;
$img_count++;
$found++;
my $OVER = qq~<div id="video_$VID" class="box_paper pad10_2 small lh125 radius5 abs hide" style="z-index:999"><span class="bold">$SITE</span> ($VID)</div>~;
my $SWITCH = ONO::Lib::UI::Check->switch("blog_message_image_update_$img",0,"mJs","","onojs_block('blog_message_image_update_button');onojs_hide('blog_message_image_update_div');");
# ono_ui_switch_blog_message_image_update_$row[0]_toggle();
$IMG1 .= qq~<div class="box_fabric fl mr5 mb5 radius5 p2" onmouseover="onojs_block('video_$VID');" onmouseout="onojs_hide('video_$VID');">
<div class="rel" style="top:32px">$OVER</div>
<table class="default_table">
<tr class="vtop">
<td>$SWITCH</td>
<td>
<img class="block64 radius5" src="/ono/osr/images/icons/crystal/64x64/mimetypes/video.png" alt=""
onclick="ono_ui_switch_blog_message_image_update_${img}_toggle();">
</td>
</tr>
</table>
</div>
~;
$IMG2 .= qq~<a href="javascript:void(0);" onclick="open_blog_file_div();">
<div class="rel fl mr5 mb5" onmouseover="onojs_block('video_$VID');" onmouseout="onojs_hide('video_$VID');">
$OVER
<img class="block64" src="/ono/osr/images/icons/crystal/64x64/mimetypes/video.png" alt="">
</div>
</a>
~;
}
}
if (!$found) {
$not_found_num++;
$not_found_list .= "$img_ori,";
}
}
}
}
if ($not_found_list) {
if ($vars{'option'} eq "remove_broken_links") {
my $MEDIA = ONO::DB->get($db,"media","${community}_blog_messages","id = '$sql{'blog_message_id'}'");
$MEDIA = ":$MEDIA:";
foreach my $item (split(/,/,$not_found_list)) {
$MEDIA =~ s~:$item~~;
}
$MEDIA = ONO::Lib::Basic->remove_doubles($MEDIA,":",0,1);
ONO::DB->command($db,"UPDATE ${community}_blog_messages SET media = '$MEDIA' WHERE id = '$sql{'blog_message_id'}'");
$IMG1 .= qq~<div id="ono_blog_warn_brokenlinks" class="inline w100">
<div class="box_green mt10">
<h3 class="green">$BLK{'Done'}</h3>
<div class="box_paper">
$texts[15]
<div class="inline">
<a href="javascript:void(0);" onclick="onojs_hide('ono_blog_warn_brokenlinks');" class="button_green mt10">$BLK{'ok'}</a>
</div>
</div>
</div>
</div>
~;
} else {
$IMG1 .= qq~<div id="ono_blog_warn_brokenlinks" class="inline w100">
<div class="box_yellow mt10">
<h3 class="yellow">$BLK{'Warning'}</h3>
<div class="box_paper">
$texts[14]
<div class="inline">
<a href="$mode_url$default_mode&blog_message_edit=1&blog_message_id=$vars{'blog_message_id'}&blog_message_edit_option=media&option=remove_broken_links"
class="button_red mt10">$BLK{'yes'}, $BLK{'remove'} ($not_found_num $BLK{'files'} / $BLK{'directories'})</a>
<a href="javascript:void(0);" onclick="onojs_hide('ono_blog_warn_brokenlinks');" class="button_yellow mt10">$BLK{'no'}, $BLK{'ignore'}</a>
</div>
</div>
</div>
</div>
~;
}
}
if ($switches !~ /w/) {
$MAIN = qq~<onload="onojs_block('ono_render_darken')">
<div class="auto $POS1 $POS2 bg_paper radius10" style="$POS3;padding:10px 20px 20px 20px;z-index:999">
~;
}
my ($EDIT,$MEDIA);
if ($vars{'blog_message_edit_option'}) {
$EDIT = qq~<td style="padding:5px 15px 10px 15px;border-left:1px dotted #cccccc;border-right:1px dotted #cccccc">
<a href="$mode_url$default_mode&blog_message_edit=1&blog_message_id=$vars{'blog_message_id'}"><img class="block24" src="/ono/osr/images/icons/ono/32x32/edit.png" alt=""></a>
</td>
~;
} else {
my @ICS = (
ONO::Lib::UI::Icon->button("/ono/osr/images/icons/crystal/32x32/mimetypes/image.png:/ono/osr/images/icons/crystal/32x32/mimetypes/pdf.png",24,
"","","","$BLK{'images'}, $BLK{'docs'} & $BLK{'files'}","C"),
ONO::Lib::UI::Icon->button("/ono/osr/images/icons/crystal/32x32/mimetypes/video.png",24,
"","","","YouTube / Vimeo","C"),
);
$MEDIA = qq~<td style="padding:5px 16px 10px 15px;border-left:1px dotted #cccccc">
<a href="javascript:void(0);" onclick="open_blog_file_div();" alt="">$ICS[0]</a>
</td>
<td style="padding:5px 10px 10px 10px;border-left:1px dotted #cccccc;border-right:1px dotted #cccccc">
<a href="javascript:void(0);" onclick="open_blog_file_div();" alt="">$ICS[1]</a>
</td>
~;
}
$MAIN .= qq~ <table class="wide_table mb5" style="border-bottom:1px dotted #cccccc">
<tr>
<td class="w100 bold large col9" style="padding:0px 10px 0px 0px">$BLK{'Blog'}: '$col[1]'</td>
$EDIT
$MEDIA
<td class="w100"><a href="$mode_url$default_mode"><img class="close ml10" src="/ono/osr/images/icons/crystal/32x32/ono/close.png" alt="close button"></a></td>
</tr>
</table>
~;
if (($vars{'blog_message_save'} || $vars{'blog_message_save_media'}) && !$vars{'filebrowser_local_upload_button'} && !$vars{'add_virclass_txt'}) {
$MAIN .= ONO::Lib::UI::MSG->saving($lang);
}
$MAIN .= $MAIN_WIN_INJECT;
if (!$vars{'blog_message_edit_option'}) {
my $TAGS = ONO::Lib::UI::Tags->tags($col[9]);
if (!$chk{'pub'}) {
$OPTS = qq~<input type="submit" name="blog_message_publish_button" value="$BLK{'save'} & $BLK{'publish'}" class="button_green ml10"></a>$OPTS~;
}
my $HELP;
if ($setup{'blog_help_message_post'}) {
$HELP .= ONO::Lib::UI::Help->bulb($setup{'blog_help_message_post'},"T");
}
if ($vars{'blog_message_delete'}) {
$MAIN .= qq~ <table class="wide_table">
<tr>
<td class="p10 bold">$col[1]</td>
</tr>
<tr>
<td class="pad10_2">$IMG2</td>
</tr>
<tr>
<td class="pad10_2">$col[2]</td>
</tr>
<tr>
<td class="pad10_2">
<a href="$mode_url${default_mode}_blog_delete&blog_message_id=$vars{'blog_message_id'}" class="button_red">$BLK{'delete'}</a>
<a href="$mode_url$default_mode" class="button_yellow">$BLK{'cancel'}</a>
</td>
</tr>
</table>
~;
} else {
$col[1] = ONO::Lib::Basic->inputfield($col[1]);
$col[2] = ONO::Lib::Basic->inputtext($col[2]);
my $HELP_BBC = ONO::Lib::Parser::Help->examples($BLK_ref,"cbhHtT");
$MAIN .= qq~ <$form>
<input type="hidden" name="blog_message_save" value="1">
<input type="hidden" name="blog_message_id" value="$vars{'blog_message_id'}">
<table class="wide_table">
<tr id="blog_message_status_tr" class="vtop bt bb $pubstatus">
<td class="pad5_2" style="padding-top:4px">
$SWITCHES[0]
<input type="hidden" name="blog_message_published_previous" value="$pre">
</td>
<td style="padding:0px 10px 0px 0px">
<div class="inline w100">
<div class="fl p2">$BLK{'published'}</div>
<div class="fr">$DATE_SEL</div>
<div class="inline auto">$NEWSBLOG</div>
</div>
</td>
</tr>
$HELP
<tr>
<td class="tar">$BLK{'title'}:</td>
<td class="w100"><input type="text" name="blog_message_title" value="$col[1]" class="w98"></td>
</tr>
<tr class="vtop">
<td></td>
<td>$IMG2</td>
</tr>
<tr class="vtop">
<td class="tar">$BLK{'text'}:</td>
<td><textarea id="blog_message_text" name="blog_message_text" class="w95 h200">$col[2]</textarea></td>
</tr>
<tr class="vtop">
<td class="p0"></td>
<td class="p0">$TAGS</td>
</tr>
<tr>
<td></td>
<td style="padding-top:10px">
$BLK{'submit_save'}
$OPTS
</td>
</tr>
</table>
<div id="blog_file_div" class="hide box_black abs w50 mt10" style="bottom:60px;min-width:320px">
<a href="javascript:void(0);" onclick="onojs_class('blog_file_button','');onojs_hide('blog_file_div');"><img class="close" alt="close button"></a>
<h2>$BLK{'Files'} ($BLK{'images'}, PDFs, ...)</h2>
<div class="box_paper">
<div class="lightred mb5"><span class="bold">$BLK{'Warning'}:</span> $texts[16]</div>
<div class="green">$texts[17]</div>
<div class="inline w100">
<input type="submit" name="blog_message_media_button" value="$texts[18]" class="button_green mt10"></a>
<a href="$BLOG_LINK&blog_message_edit_option=media" class="button_yellow mt10">$texts[19]</a>
<a href="javascript:void(0);" onclick="onojs_class('blog_file_button','');onojs_hide('blog_file_div');" class="button_orange mt10">$BLK{'cancel'}</a>
</div>
</div>
</div>
<div id="blog_tags_div" class="hide box_black abs w50 mt10" style="bottom:60px;min-width:320px">
<a href="javascript:void(0);" onclick="onojs_class('blog_tags_button','');onojs_hide('blog_tags_div');"><img class="close" alt="close button"></a>
<h2>$BLK{'Tags'}</h2>
<div class="box_paper">
<div><input type="text" name="blog_message_tags" value="$col[9]" class="w98" placeholder="$BLK{'keyword'} 1, $BLK{'keyword'} 2, $BLK{'keyword'} 3, ..."></div>
<div class="col9 italic">comma separated list of keywords and/or tags</div>
</div>
</div>
<div class="abs w80" style="bottom:60px">$HELP_BBC</div>
</form>
~;
$MAIN .= ONO::Lib::Text::Editor->edit("blog_message_text",$lang,$textarea_height);
}
}
if ($vars{'blog_message_edit_option'} eq "media") {
ONO::IO->mkpath("$path/$upload_area");
ONO::ToolBox::Docs->mkdir($db,$community,"$path/$upload_area/blog",$timestamp,$vars_ref);
$vars{'base_dir'} = $path;
my $CUSTOM_INFO;
my $UPLOAD_DIR = "blog";
my $HIDE = "hide";
if ($setup{'blog_dir_upload'}) {
$UPLOAD_DIR = $setup{'blog_dir_upload'};
ONO::ToolBox::Docs->mkdir($db,$community,"$path/public/$setup{'blog_dir_upload'}",$timestamp,$vars_ref);
$CUSTOM_INFO = qq~<div class="col6">$texts[8]: <span class="col9">public/$setup{'blog_dir_upload'}</span></div>~;
}
if ($community eq "school" && $ENV{'SCRIPT_NAME'} =~ /index_portal\.pl/) {
$CUSTOM_INFO = qq~<div class="mt10 bt">
<table class="wide_table mt10">
<tr class="vtop">
<td><img class="block32" src="/ono/osr/images/icons/crystal/32x32/ono/help.png" alt=""></td>
<td class="w100">
<a href="$script_url?mode=website_blog_prefs" class="button fr ml10 mb10">$BLK{'setup'}</a>
$texts[7]$CUSTOM_INFO
</td>
</tr>
</table>
</div>
~;
} else {
$CUSTOM_INFO = "";
}
if ($sql{'upload_dir'}) {
$UPLOAD_DIR = $sql{'upload_dir'};
$HIDE = "";
}
my $http = ONO::IO->http;
my $URL = "$http://$ENV{'SERVER_NAME'}$BASE".ONO::IO->upload_url($community)."mode=plupload&area=$upload_area&dir=$UPLOAD_DIR";
$URL .= "&media_ext_target=blog&media_ext_target_id=$vars{'blog_message_id'}";
if ($community eq "school") {
$URL .= "&media_ext_mode=edu&media_ext_class=$upload_author";
}
if (($vars{'school'} || $vars{'environment'}) && $vars{'website'}) {
$URL .= "&media_ext_mode=web&website=$sql{'website'}";
}
if ($sql{'upload_to_dir'}) {
$URL .= "&media_ext_noblogupdate=1";
}
my $UPLOAD;
if (!$vars{'add_upload'}) {
# must be disabled in add_upload mode to prevent double instances !!!
$UPLOAD = ONO::Lib::Web::Upload->window(
qq~<img class="block" src="/ono/osr/images/loading/bar_220_19.gif" style="width:220px;height:19px" alt="">~,
"$BLOG_LINK&blog_message_edit_option=media",
$URL,"",ONO::ToolBox::Upload->file_extensions("A"),ONO::Lib::Web::Upload->max_file_size(),"","","",\%vars,$lang,$BLK_ref,"i"
);
}
my (
$fb_window,
$fb_script,
$fb_button,
) = ONO::ToolBox::FileBrowserInit->init(
$community,
"file_browser",
$HIDE,
"$path/",
$UPLOAD,
"$texts[2] ($BLK{'images'}, PDF, ...)",
$lang,
\%vars,
"ud",
$setup{'blog_dir_media'},
"if (onojs_exists('ono_blogedit_adduploadbox')){onojs_hide('ono_blogedit_adduploadbox')}",
);
my $max_left = 80 - $img_count;
my $IMAGES = qq~ <tr class="vtop">
<td>$IMG1</td>
</tr>
<tr>
<td class="col9 p10">
<div id="ono_blogedit_path_info"> </div>
<div>$BLK{'up_to'} <span class="bold">$max_left</span> $BLK{'files'} $BLK{'and'}/$BLK{'or'} $BLK{'folders'} $texts[5]</div>
</td>
</tr>
~;
if ($vars{'add_dir'}) {
my $OPT;
if ($community eq "school" && $vars{'class'}) {
my $virclass = $vars{'class'};
$virclass =~ s~[^0-9]~~g;
my @FAVS = ONO::IO->list("media/virclass/$virclass/favorites.txt");
foreach my $line (ONO::DB->select($db,"${community}_school_virschool_relationships","virclass = '$virclass'")) {
my @row = ONO::DB->readcols($line);
@FAVS = (@FAVS,ONO::IO->list("community/portal/school/$row[2]/docs/global_favorites.txt"));
foreach my $file (ONO::IO->dir("community/portal/school/$row[2]/docs")) {
if ($file =~ /^global_favorites_(.*?)\.txt$/) {
@FAVS = (@FAVS,ONO::IO->list("community/portal/school/$row[2]/docs/$file"));
}
}
}
my $SCHOOLYEAR = ONO::Lib::DateTime::ToolBox->schoolyear();
foreach my $fav (@FAVS) {
$fav =~ s~_schoolyear_~$SCHOOLYEAR~g;
my @fp = split(/\^/,$fav);
$fp[0] =~ s~/\*/~/$virclass/~;
$fp[0] =~ s~[^A-Za-z0-9\-\_\/]~~g;
if ($fp[2] =~ /a/ && !ONO::IO->exists($fp[0])) {
ONO::ToolBox::Docs->mkdir($db,$community,$fp[0],ONO::Lib::DateTime::ToolBox->timestamp,$vars_ref);
}
my $DIRS .= ONO::ToolBox::Tree->dir(
$db,
$community,
$fp[0],
"$BLOG_LINK&blog_message_edit_option=media&add_dir_now",
"BFILoOprTW",
$vars_ref,
);
if ($DIRS) {
$OPT .= qq~<table class="wide_table bt bb mb10">
$DIRS
</table>
~;
}
}
}
if ($author =~ /^user:(.*?)$/) {
my $DIRS .= ONO::ToolBox::Tree->dir(
$db,
$community,
"$path/public/blog",
"$BLOG_LINK&blog_message_edit_option=media&add_dir_now",
"BFILoOprTW",
$vars_ref,
);
if ($DIRS) {
$OPT .= qq~<table class="wide_table bt bb mb10">
$DIRS
</table>
~;
}
}
foreach my $area ('documents','friends','protected','public','shared','photos') {
# -B border (bt & bb)
# -F count files (see -Z)
# -L link (use $link + URL as target)
# -o tOp directory is being displayed in the tree
# -O tOp directory is bold and doesn't link
# -p toP directory is title
# -r row hightlight
# -T display tree elements
my $DIRS .= ONO::ToolBox::Tree->dir(
$db,
$community,
"$path/$area",
"$BLOG_LINK&blog_message_edit_option=media&add_dir_now",
"BFILoOprT",
$vars_ref,
);
if ($DIRS) {
$OPT .= qq~<table class="wide_table bt bb mb10">
$DIRS
</table>
~;
}
}
if ($community eq "school" && $vars{'class'}) {
my (@LIST,%used);
foreach my $line (ONO::DB->select($db,"${community}_school_schoolweb_sites","edu_owner = '$vars{'username'}'")) {
my @row = ONO::DB->readcols($line);
if (!$used{$row[1]}) {
$used{$row[1]}++;
my $sort = lc $row[6];
@LIST = (@LIST,"$row[1]:$row[6]");
}
}
foreach my $line (ONO::DB->select($db,"${community}_school_schoolweb_admins_sites","admin = '$vars{'username'}'")) {
my @row = ONO::DB->readcols($line);
if (!$used{$row[2]}) {
my $schoolname = ONO::DB->get($db,"fullname", "${community}_school_schoolweb_sites","id_10 = '$row[2]'");
$used{$row[2]}++;
if ($schoolname) {
@LIST = (@LIST,"$row[2]:$schoolname");
}
}
}
foreach my $SITE (@LIST) {
my @SP = split(/:/,$SITE);
my $DIRS .= ONO::ToolBox::Tree->dir(
$db,
$community,
"schoolweb/".ONO::IO->deepdir($SP[0])."/$SP[0]/media/photos",
"$BLOG_LINK&blog_message_edit_option=media&add_dir_now",
"BFILoOprT",
$vars_ref,
);
if ($DIRS) {
$OPT .= qq~<table class="wide_table bt bb mb10">
$DIRS
</table>
~;
}
}
}
$IMAGES = qq~ <tr>
<td>$OPT</td>
</tr>
~;
}
my $HELP;
if ($setup{'blog_help_message_media'}) {
$HELP .= ONO::Lib::UI::Help->bulb($setup{'blog_help_message_media'});
}
# my $PIPE;
#
# if (ONO::IO->devstation && $vars{'username'}) {
#
# my ($targets_ref,$target_selected) = ONO::ToolBox::PipeLine->targets($db,$community,$vars_ref,$sql_ref);
#
# $PIPE = ONO::ToolBox::PipeLine->pipeline(
# $db,
# $community,
# $targets_ref,
# $target_selected,
# $lang,
# $BLK_ref,
# $vars_ref,
# "B",
# );
#
# }
if ($ADD_DIRS) {
$ADD_DIRS .= qq~<tr class="bb"><td></td><td class="p5"></td></tr><tr><td></td><td class="p5"></td></tr>~;
}
my $hide_video = " hide";
if ($vars{'add_video'}) {
$hide_video = "";
}
my $VIDEO = ucfirst $texts[4];
my %DIR_LINKS2_FILES;
foreach my $link (sort @DIR_LINKS2_LIST) {
my ($dir,$file) = ONO::IO->getdirfile($link);
$DIR_LINKS2_FILES{$dir} .= "$file,";
}
foreach my $key (sort keys %DIR_LINKS2_FILES) {
my $dirname = $key;
$dirname =~ s~^(.*)/~~;
my $FOLDER = qq~<img class="block64 auto" src="/ono/osr/images/icons/crystal/64x64/filesystems/folder.png" alt="">$dirname~;
if ($community eq "school" && $vars{'mode'} eq "website" && $key =~ m~media/virclass/(.*?)/(.*?)/(.*)$~) {
my $LINK = "$script_url?mode=media&community_screen=media_dir&area=$2&dir=$3";
$FOLDER = qq~<a href="$LINK"><img class="block64 auto" src="/ono/osr/images/icons/crystal/64x64/filesystems/folder.png" alt=""></a><a href="$LINK" class="col6">$dirname</a>~;
}
my $subID = ONO::Lib::Code::RandomID->make;
my $FILES;
foreach my $file (split(/,/,$DIR_LINKS2_FILES{$key})) {
if ($file =~ /[A-Za-z0-9]/) {
$FILES .= &dir_links_icon("",$community,$subID,$key,$file,\%sql);
}
}
my $FLIPROT = &dir_links_fliprot("",$subID,$BLK_ref);
$DIR_LINKS2 .= qq~<tr><td></td><td class="p10"></td></tr>
<tr class="vtop">
<td class="center">$FOLDER</td>
<td class="pad10_2 w100"><div class="box_paper"><div class="inline w100">$FILES</div>$FLIPROT</div></td>
</tr>
~;
}
if ($DIR_LINKS || $DIR_LINKS2) {
$DIR_LINKS = qq~<div class="box_paper mt20">
<div class="bb col9 large bold">$BLK{'Folders'} & $BLK{'files'}</div>
<table class="wide_table">
$DIR_LINKS
$DIR_LINKS2
</table>
</div>
~;
}
my ($VIRCLASS_TXT,$VIRCLASS_TXT_SEL,$hide_buttons);
if ($vars{'virclass'} || $vars{'class'}) {
$VIRCLASS_TXT = qq~<tr>
<td></td>
<td class="p5"></td>
</tr>
<tr>
<td><img class="block48 mr5" src="/ono/osr/images/icons/crystal/64x64/mimetypes/txt.png" alt=""></td>
<td>
<a href="$BLOG_LINK&blog_message_edit_option=media&add_virclass_txt=1" class="button_green fl mr10">$texts[9]</a>
<div class="inline mt5 col9 hide800">($BLK{'virclass'})</div>
</td>
</tr>
~;
if ($vars{'add_virclass_txt'}) {
$VIRCLASS_TXT_SEL = "";
$IMAGES = "";
$hide_buttons = " hide";
my $class = $vars{'class'};
$class =~ s~[^0-9]~~gi;
my ($WHERE,$counter);
if ($sql{'query'}) {
$WHERE = qq~ AND (id = '$sql{'query'}' OR title LIKE '%$sql{'query'}%' OR doc_owner LIKE '%$sql{'query'}%')~;
}
foreach my $line (ONO::DB->select($db,"${community}_docs_files","custom_1 = '$class' AND doc_file LIKE '%.txt'$WHERE","modification_timestamp DESC","LIMIT 15")) {
my @row = ONO::DB->readcols($line);
$counter++;
$VIRCLASS_TXT_SEL .= qq~<tr class="bt bb row">
<td class="pad10_2">$row[3]</td>
<td class="pad10_2"><a href="/users/$row[8]/">$row[8]</a></td>
<td class="pad10_2">
<a href="$BLOG_LINK&blog_message_edit_option=media&add_virclass_txt=1&add_virclass_txt_id=$row[1]"
class="button_green button_small">$BLK{'add'}</a>
</td>
</tr>
~;
}
if ($counter > 14) {
$VIRCLASS_TXT_SEL .= qq~<tr class="bt bb">
<td class="pad10_2 col9 italic">$texts[6]</td>
<td></td>
<td></td>
</tr>
~;
}
my $SEARCH = ONO::Lib::UI::Form->search("query",$vars{'query'},$BLK{'search'},"320px","green","r");
$VIRCLASS_TXT_SEL = qq~<tr>
<td>
<div class="box_green mt10 mb10">
$SEARCH
<input type="hidden" name="add_virclass_txt" value="$vars{'add_virclass_txt'}">
<h3 class="green">$BLK{'Add'}: $BLK{'text'} ($BLK{'virclass'})</h3>
<div class="box_paper">
<table class="wide_table bt bb">
<tr class="bg_title bt bb">
<td class="pad10_2 w66">$BLK{'Title'}</td>
<td class="pad10_2 w33">$BLK{'Author'}</td>
<td></td>
</tr>
$VIRCLASS_TXT_SEL
</table>
</div>
</div>
</td>
</tr>
~;
}
}
if ($vars{'add_upload'}) {
my ($OPTS,$SUBS,$first,%used,$JS_DESELECT,$UPLOAD_TARGETS,$DEFAULT_TARGET,$hide_subdir_select);
# "media/virclass/$class/public/$lp[1]:favorites:$fav_subdir"
foreach my $opt (@existing,&media_targets("",$db,$community,$col[3],\%vars)) {
my @op = split(/:/,$opt);
$opt = $op[0];
$opt =~ s~/$~~;
if (!$used{$opt}) {
$used{$opt}++;
my $opt_id = $opt;
$opt_id =~ s~(/|-)~_~g;
$opt_id !~ s~[^A-Za-z0-9\_]~~gi;
my $name = $opt;
$name =~ s~^(.*)/~~;
my $CLASS = "paper";
my ($JS_TARGET_OPTS,$ICON,$hide_subs);
if (!$first) {
$first++;
$CLASS = "black";
$DEFAULT_TARGET = $opt_id;
if ($op[1] eq "used") {
$hide_subdir_select = "hide";
}
} else {
$hide_subs = "hide";
}
my $status = qq~<span class="lightred">$texts[11]</span>~;
if (ONO::IO->exists($opt)) {
$status = qq~<span class="lightgreen">$BLK{'found'}</span>~;
}
if ($op[1] =~ /[a-z]/ && $op[1] ne "folder") {
$ICON = qq~<img class="block32 abs" src="/ono/osr/images/icons/crystal/64x64/filesystems/$op[1].png" style="top:25px;left:5px" alt="">~;
}
if ($op[1] eq "used") {
$ICON = qq~<img class="block32 abs" src="/ono/osr/images/icons/crystal/64x64/actions/forward.png" style="top:25px;left:5px" alt="">~;
$JS_TARGET_OPTS .= "onojs_hide('ono_blog_subdir_select');";
}
$UPLOAD_TARGETS .= qq~<input type="hidden" name="blog_message_upload_targets_$opt_id" value="$opt">~;
$JS_DESELECT .= qq~onojs_class('ono_blog_ul_${opt_id}','box_paper radius10 center fl ml10 mb10 lh125');~;
$OPTS .= qq~<a href="javascript:void(0);" onclick="ono_blog_ul_target_select('$opt_id');$JS_TARGET_OPTS">
<div id="ono_blog_ul_${opt_id}" onmouseover ="onojs_class('ono_blog_ul_${opt_id}','box_fabric radius10 center fl ml10 mb10 lh125');"
onmouseout ="ono_blog_ul_target_mouseout('$opt_id');"
class="box_$CLASS radius10 center fl ml10 mb10 lh125">
<div class="block64 auto rel"><img class="block64 auto" src="/ono/osr/images/icons/crystal/64x64/filesystems/folder.png" alt="">$ICON</div>
<div class="bold" style="max-width:200px;overflow:hidden">$name</div>
<div class="xsmall col9" style="max-width:200px;overflow:hidden">/$opt</div>
<div class="small">$status</div>
</div>
</a>
~;
$JS_DESELECT .= qq~onojs_hide('ono_blog_ul_subsbox_${opt_id}');~;
my $JS_DESEL_SUB;
if ($op[1] ne "used") {
$SUBS .= qq~<div id="ono_blog_ul_subsbox_${opt_id}" class="$hide_subs">
<div id="ono_blog_ul_subsbox_${opt_id}_none" class="fr hide">
<a href="javascript:void(0);" onclick="ono_blog_ul_deselect_subs_$opt_id();onojs_hide('ono_blog_ul_subsbox_${opt_id}_none');
onojs_setvalue('blog_message_upload_target_options_${opt_id}_id','');
onojs_hide('ono_blog_ul_${opt_id}_name_name_field');
onojs_block('ono_blog_ul_${opt_id}_name_status');";
class="button_orange button_small">$BLK{'none'}</a>
</div>
~;
my $first_sub_found;
foreach my $sub ('date','id','name') {
my $SUBCLASS = "paper";
my $sub_info = " ";
my ($sub_dir,$SUBS_NAME);
if ($sub eq "date") {
$sub_info = " ($col[6])";
$sub_dir = $col[6];
}
if ($sub eq "id") {
$sub_info = " (#$vars{'blog_message_id'})";
$sub_dir = $vars{'blog_message_id'};
}
if ($sub eq "name") {
$sub_info = " ($BLK{'custom'})";
$SUBS_NAME = qq~<div id="ono_blog_ul_${opt_id}_${sub}_name_field" class="inline w100 hide">
<input id="blog_message_upload_target_options_${opt_id}_name_filename_id" type="text"
name="blog_message_upload_target_options_${opt_id}_name_filename" value="$BLK{'untitled'}" class="w90 center">
</div>
~;
}
my $status = qq~<span class="lightred">$texts[11]</span>~;
if (ONO::IO->exists("$opt/$sub_dir")) {
$status = qq~<span class="lightgreen">$BLK{'found'}</span>~;
if (!$first_sub_found && ($sub eq "date" || $sub eq "id")) {
$first_sub_found = $sub;
$SUBCLASS = "black";
}
} else {
if ($sub eq $op[2]) {
$first_sub_found = $sub;
$SUBCLASS = "black";
}
}
my $AHREF1 = qq~a href="javascript:void(0);"~;
my $AHREF2 = "a";
my $ONCLICK1 = qq~ onclick="ono_blog_ul_deselect_subs_$opt_id();ono_blog_ul_target_option_select('$opt_id','$sub');"~;
my $ONCLICK2;
if ($sub eq "name") {
$status = " ";
$AHREF1 = "div";
$AHREF2 = "div";
$ONCLICK2 = $ONCLICK1;
$ONCLICK1 = "";
}
$JS_DESEL_SUB .= qq~onojs_class('ono_blog_ul_${opt_id}_$sub','box_paper radius10 center fl ml10 mb10 lh125');~;
$SUBS .= qq~ <$AHREF1$ONCLICK1>
<div id="ono_blog_ul_${opt_id}_$sub" onmouseover ="onojs_class('ono_blog_ul_${opt_id}_$sub','box_fabric radius10 center fl ml10 mb10 lh125');"
onmouseout ="ono_blog_ul_target_option_mouseout('$opt_id','${opt_id}_$sub','$sub');"
class="box_$SUBCLASS radius10 center fl ml10 mb10 lh125">
<div$ONCLICK2>
<img class="block64 auto" src="/ono/osr/images/icons/crystal/64x64/filesystems/folder.png" alt="">
<div class="bold">$BLK{$sub}</div>
<div class="small col9">$sub_info</div>
</div>
<div id="ono_blog_ul_${opt_id}_${sub}_status" class="small">$status</div>
$SUBS_NAME
</div>
</$AHREF2>
~;
}
$SUBS .= qq~</div>
<input type="hidden" id="blog_message_upload_target_options_${opt_id}_id" name="blog_message_upload_target_options_${opt_id}" value="$first_sub_found">
<script>
function ono_blog_ul_deselect_subs_$opt_id() {$JS_DESEL_SUB}
</script>
~;
}
}
}
my $UPLOAD = qq~ <h4>$texts[10]:</h4>
<div class="inline w100 mb10">$OPTS</div>
<div id="ono_blog_subdir_select" class="$hide_subdir_select">
<h4>$BLK{'Subdirectory'} ($BLK{'optional'}, $BLK{'but'} $BLK{'recommended'}):</h4>
<div class="inline w100 mb10">$SUBS</div>
</div>
<div class="inline w100"><input type="submit" name="continue" value="$BLK{'continue'}..." class="button_green"></div>
~;
if ($vars{"blog_message_upload_targets_$vars{'blog_message_upload_target_dir'}"}) {
my $UPLOAD_DIR = $vars{"blog_message_upload_targets_$vars{'blog_message_upload_target_dir'}"};
if ($vars{"blog_message_upload_target_options_$vars{'blog_message_upload_target_dir'}"} eq "date") {
$UPLOAD_DIR .= "/$col[6]";
}
if ($vars{"blog_message_upload_target_options_$vars{'blog_message_upload_target_dir'}"} eq "id") {
$UPLOAD_DIR .= "/$col[0]";
}
if ($vars{"blog_message_upload_target_options_$vars{'blog_message_upload_target_dir'}"} eq "name") {
my $NAME = lc $sql{"blog_message_upload_target_options_$vars{'blog_message_upload_target_dir'}_name_filename"};
$NAME =~ s~(\ |\-)~_~g;
$NAME =~ s~[^A-Za-z0-9]~~g;
$NAME = ONO::Lib::Basic->remove_doubles($NAME,"_",0,1);
$UPLOAD_DIR .= "/$NAME";
}
my $UPLOAD_NAME = $UPLOAD_DIR;
$UPLOAD_NAME =~ s~^(.*)/~~;
my $UPLOAD_STATUS = $texts[13];
if (ONO::IO->exists($UPLOAD_DIR)) {
my $num = ONO::IO->count($UPLOAD_DIR,0,"f");
$UPLOAD_STATUS = qq~$texts[12] (<span class="bold">$num</span> $BLK{'files'})~;
} else {
ONO::ToolBox::Docs->mkdir($db,$community,$UPLOAD_DIR,$timestamp,$vars_ref);
}
$UPLOAD_TARGETS = "";
$UPLOAD = qq~<h4>$BLK{'Target'}:</h4>
<table class="default_table">
<tr class="vtop">
<td><img class="block64" src="/ono/osr/images/icons/crystal/64x64/filesystems/folder.png" alt=""></td>
<td>
<div class="bold">$UPLOAD_NAME</div>
<div class="small col9">$UPLOAD_DIR</div>
<div class="lightgreen">$UPLOAD_STATUS</div>
</td>
</tr>
</table>
<div class="box_green mt10">
<h4 class="green">$BLK{'Photos'} & $BLK{'files'}</h4>
~;
my $http = ONO::IO->http;
my $URL = "$http://$ENV{'SERVER_NAME'}$BASE".ONO::IO->upload_url($community)."mode=plupload&area=$upload_area&dir=$UPLOAD_DIR";
$URL .= "&media_ext_mode=blog&media_ext_target_id=$vars{'blog_message_id'}";
$UPLOAD .= ONO::Lib::Web::Upload->window(
qq~<img class="block" src="/ono/osr/images/loading/bar_220_19.gif" style="width:220px;height:19px" alt="">~,
"$BLOG_LINK&blog_message_edit_option=media",
$URL,"",ONO::ToolBox::Upload->file_extensions("A"),250,"","","",\%vars,$lang,$BLK_ref
);
$UPLOAD .= qq~</div>~;
}
$MAIN .= qq~ <$form>
<input type="hidden" name="blog_message_edit" value="1">
<input type="hidden" name="blog_message_id" value="$vars{'blog_message_id'}">
<input type="hidden" name="blog_message_edit_option" value="media">
<input type="hidden" name="add_upload" value="1">
<div class="box_green abs w50 w80_800" style="top:200px;z-index:9999">
<a href="$BLOG_LINK&blog_message_edit_option=media"><img class="close" alt="close button"></a>
<h3 class="green">$BLK{'Upload'}</h3>
<div class="box_paper">
<input type="hidden" id="blog_message_upload_target_dir_id" name="blog_message_upload_target_dir" value="$DEFAULT_TARGET">
$UPLOAD_TARGETS
$UPLOAD
</div>
</div>
</form>
<script>
function ono_blog_ul_target_select(id) {
$JS_DESELECT;
onojs_class('ono_blog_ul_'+id,'box_black radius10 center fl ml10 mb10 lh125');
onojs_setvalue('blog_message_upload_target_dir_id',id);
onojs_block('ono_blog_ul_subsbox_'+id);
onojs_block('ono_blog_subdir_select');
}
function ono_blog_ul_target_mouseout(id) {
onojs_class('ono_blog_ul_'+id,'box_paper radius10 center fl ml10 mb10 lh125');
if (id == onojs_getvalue('blog_message_upload_target_dir_id')) {
onojs_class('ono_blog_ul_'+id,'box_black radius10 center fl ml10 mb10 lh125');
}
}
function ono_blog_ul_target_option_mouseout(id,id_sub,sub) {
onojs_class('ono_blog_ul_'+id_sub,'box_paper radius10 center fl ml10 mb10 lh125');
if (sub == onojs_getvalue('blog_message_upload_target_options_'+id+'_id')) {
onojs_class('ono_blog_ul_'+id_sub,'box_black radius10 center fl ml10 mb10 lh125');
}
}
function ono_blog_ul_target_option_select(opt_id,sub) {
onojs_setvalue('blog_message_upload_target_options_'+opt_id+'_id',sub);
onojs_block('ono_blog_ul_subsbox_'+opt_id+'_none');
onojs_class('ono_blog_ul_'+opt_id+'_'+sub,'box_black radius10 center fl ml10 mb10 lh125');
if (onojs_exists('ono_blog_ul_'+opt_id+'_'+sub+'_name_field')) {onojs_block('ono_blog_ul_'+opt_id+'_'+sub+'_name_field')}
if (sub == 'name') {onojs_hide('ono_blog_ul_'+opt_id+'_name_status')}
}
</script>
~;
}
my ($FILE_ACTIONS,$FLIP_ROTATE);
if ($img_count) {
$FILE_ACTIONS .= qq~<a href="javascript:void(0);" onclick="onojs_block('file_action_fliprot_box');" class="button_yellow">$BLK{'flip'} / $BLK{'rotate'}</a>~;
$FLIP_ROTATE = ONO::FW::Media::Manager::ToolBox->flip_rotate_selector($BLK_ref);
}
$FILE_ACTIONS .= qq~<span id="blog_message_image_update_div" class="button_red trans30">$BLK{'remove'}</span>
<input type="submit" id="blog_message_image_update_button" name="blog_message_image_remove_now" value="$BLK{'remove'}" class="button_red hide">
~;
if ($vars{'blog_message_edit_option_fliprotate'}) {
$MAIN .= qq~<div class="box_green bold mb10">$texts[21]</div>~;
}
$MAIN .= qq~ <$form>
<input type="hidden" name="blog_message_save_media" value="1">
<input type="hidden" name="blog_message_edit_option" value="media">
<input type="hidden" name="blog_message_id" value="$vars{'blog_message_id'}">
$fb_window
$HELP
<table class="wide_table">
$IMAGES
$VIRCLASS_TXT_SEL
<tr>
<td>
<div id="ono_blogedit_adduploadbox" class="box_green abs w50 w80_800 hide" style="z-index:999;left:10px;top:150px">
<a href="javascript:void(0);" onclick="onojs_hide('ono_blogedit_adduploadbox');">
<img class="close" alt="close button">
</a>
<h2>$BLK{'Add'} / $BLK{'upload'}</h2>
<div class="box_paper">
<table class="wide_table">
<tr>
<td><img class="block48 mr5" src="/ono/osr/images/icons/crystal/64x64/filesystems/file_upload.png" alt=""></td>
<td class="w100">
<a href="$BLOG_LINK&blog_message_edit_option=media&add_upload=1" class="button_green fl mr10">$BLK{'upload'}</a>
<div class="inline mt5 col9 hide800">($BLK{'photos'}, $BLK{'documents'}, ...)</div>
</td>
</tr>
<tr>
<td></td>
<td class="p5"></td>
</tr>
$ADD_DIRS
<tr>
<td><img class="block48 mr5" src="/ono/osr/images/icons/crystal/64x64/filesystems/folder.png" alt=""></td>
<td class="w100">
<a href="$BLOG_LINK&blog_message_edit_option=media&add_dir=1" class="button_green fl mr10">$texts[0]</a>
<div class="inline mt5 col9 hide800">($texts[1])</div>
</td>
</tr>
<tr>
<td></td>
<td class="p5"></td>
</tr>
<tr>
<td><img class="block48 mr5" src="/ono/osr/images/icons/crystal/64x64/actions/editcopy.png" alt=""></td>
<td>
$fb_button
<div class="inline mt5 col9 hide800"> ($texts[3])</div>
</td>
</tr>
<tr>
<td></td>
<td class="p5"></td>
</tr>
<tr>
<td><img class="block48 mr5" src="/ono/osr/images/icons/crystal/64x64/mimetypes/video.png" alt=""></td>
<td>
<a href="$BLOG_LINK&blog_message_edit_option=media&add_video=1" class="button_green fl mr10">$texts[4]</a>
<div class="inline mt5 col9 hide800">(YouTube $BLK{'or'} Vimeo)</div>
</td>
</tr>
$VIRCLASS_TXT
</table>
</div>
</div>
<div id="ono_blogedit_addvideobox" class="box_green abs w50 w80_800$hide_video" style="z-index:999">
<a href="javascript:void(0);" onclick="onojs_hide('ono_blogedit_addvideobox');">
<img class="close" alt="close button">
</a>
<h2>$VIDEO (YouTube $BLK{'or'} Vimeo)</h2>
<div class="box_paper">
<table class="wide_table">
<tr>
<td><img class="block32" src="/ono/osr/images/icons/crystal/32x32/mimetypes/video.png" alt=""></td>
<td class="w100"><input type="text" name="blog_add_video" value="" class="w95" placeholder="https://www.youtube.com/watch?v=..."></td>
</tr>
<tr>
<td></td>
<td>$BLK{'submit_add'}</td>
</tr>
</table>
</div>
</div>
<div class="rel inline$hide_buttons">
<div id="file_action_fliprot_box" class="box_yellow abs hide" style="top:-10px;left:20px;z-index:999">
<a href="javascript:void(0);" onclick="onojs_hide('file_action_fliprot_box');"><img class="close" alt="close button"></a>
<h3 class="yellow">$BLK{'Flip'} / $BLK{'rotate'}</h3>
<div class="box_paper">
<div class="mb10">$texts[20]</div>
<div>$FLIP_ROTATE</div>
<div class="inline">
<input type="submit" name="blog_message_edit_option_fliprotate" value="$BLK{'rotate_selected'}" class="button_green">
<a href="javascript:void(0);" onclick="onojs_hide('file_action_fliprot_box');" class="button_yellow">$BLK{'cancel'}</a>
</div>
</div>
</div>
<a href="javascript:void(0);" class="button_green" onclick="onojs_block('ono_blogedit_adduploadbox');">$BLK{'add'} / $BLK{'upload'}</a>
$FILE_ACTIONS
<a href="$BLOG_LINK" class="button_yellow ml20">$BLK{'done'} / $BLK{'back'}</a>
</div>
<div class="rel" style="z-index:1">$DIR_LINKS</div>
</td>
</tr>
</table>
</form>
$fb_script
$CUSTOM_INFO
~;
}
if ($switches !~ /w/) {
$MAIN .= qq~</div>~;
}
#}
}
if (ONO::IO->devstation) {
$MAIN .= $DEBUG;
}
return $MAIN;
}
sub media_targets {
my (
$self,
$db,
$community,
$class,
$vars_ref,
$overrun,
) = @_;
#: Detect possible targets for media uploads.
#:
#: overrun = 1 is used by the pipeline module
#: overrun = 2 is used by the blog preferences
my %vars = %$vars_ref;
my (@opts,$counter,%used);
# my personal favorites (if no website or classroom selected)
if ($vars{'community_screen'} eq "blog" && $vars{'username'}) {
@opts = (@opts,"media/users/".ONO::IO->deepdir($vars{'username'})."/$vars{'username'}/public/blog:folder");
}
# website favorites (if website + env selected)
if ($vars{'website'}) {
my $base = "web";
if ($community eq "school") {
$base = "schoolweb";
}
$vars{'website'} =~ s~[^A-Za-z0-9]~~g;
@opts = (
@opts,
"$base/".ONO::IO->deepdir($vars{'website'})."/$vars{'website'}/media/photos/blog:folder",
);
}
# classroom / school favorites + default upload
if ($community eq "school" && $vars{'mode'} =~ /^website/) {
$class =~ s~[^0-9]~~g;
if (($vars{'blog_message_edit_option'} eq "media" || $overrun) && $class) {
# blog_prefs.txt - sort is important here!
# %used will also be used to exclude dirs
my (@opt2,$fav_subdir);
my @prefs = sort ONO::IO->list(ONO::Ext::Morzino::ToolBox->virclass_dir($class)."data/blog_prefs.txt");
foreach my $line (@prefs) {
$line =~ s~(\n|\r|\t)~~g;
my @lp = split(/:/,$line);
if ($lp[0] eq "dir_subdir") {
$fav_subdir = $lp[1];
}
}
foreach my $line (@prefs) {
$line =~ s~(\n|\r|\t)~~g;
my @lp = split(/:/,$line);
if ($lp[0] =~ /^default_dir_disable_(.*)$/ && $lp[1] && $overrun < 2) {
$used{$1}++;
$used{"$1/"}++;
}
# dir_upload is outdated, we'll only use dir_media
if (($lp[0] eq "dir_upload" || $lp[0] eq "dir_media") && $lp[1] =~ /[A-Za-z0-9]/ && !$used{"media/virclass/$class/public/$lp[1]"}) {
$used{"media/virclass/$class/public/$lp[1]"}++;
$used{"media/virclass/$class/public/$lp[1]/"}++;
$counter++;
@opt2 = (@opt2,"media/virclass/$class/public/$lp[1]:favorites:$fav_subdir");
}
}
# favorites (local)
foreach my $line (ONO::IO->list("media/virclass/$class/favorites.txt")) {
$line =~ s~(\n|\r|\t)~~g;
my @lp = split(/\^/,$line);
if ($lp[0] =~ /[A-Za-z0-9]/ && $lp[0] =~ m~/~ && !$used{$lp[0]}) {
$used{$lp[0]}++;
$counter++;
@opt2 = (@opt2,"$lp[0]:favorites:$fav_subdir");
}
}
# favorites (global)
my (%exclude,$disable_public,$disable_public_blog);
my $SCHOOLYEAR = ONO::Lib::DateTime::ToolBox->schoolyear();
foreach my $line (ONO::DB->select($db,"${community}_school_virschool_relationships","virclass = '$class'")) {
my @row = ONO::DB->readcols($line);
my $fav_subdir = ONO::IO->load("community/portal/school/$row[2]/docs/global_favorites_subdir.txt");
my $disabled = ONO::IO->load("community/portal/school/$row[2]/docs/global_disabled_subdirs.txt");
if (":$disabled:" =~ m~:public/blog:~) {
$disable_public_blog++;
$used{"media/virclass/$class/public/blog"}++;
$exclude{"media/virclass/$class/public/blog:folder"}++;
$exclude{"media/virclass/$class/public/blog:favorites"}++;
$exclude{"media/virclass/$class/public/blog/:folder"}++;
$exclude{"media/virclass/$class/public/blog/:favorites"}++;
}
if (":$disabled:" =~ m~:public:~) {
$disable_public++;
$used{"media/virclass/$class/public"}++;
$exclude{"media/virclass/$class/public:folder"}++;
$exclude{"media/virclass/$class/public:favorites"}++;
$exclude{"media/virclass/$class/public/:folder"}++;
$exclude{"media/virclass/$class/public/:favorites"}++;
}
foreach my $fav (ONO::IO->list("community/portal/school/$row[2]/docs/global_favorites.txt")) {
$fav =~ s~(\n|\r|\t)~~g;
$fav =~ s~_schoolyear_~$SCHOOLYEAR~g;
my @fp = split(/\^/,$fav);
my $not_valid;
if ($fp[0] =~ /\*/ && !$class) {
$not_valid++;
}
$fp[0] =~ s~\*~$class~g;
if (!$used{$fp[0]} && !$not_valid) {
$used{$fp[0]}++;
$counter++;
@opt2 = (@opt2,"$fp[0]:favorites:$fav_subdir");
}
}
}
# default
if ($class && !$used{"media/virclass/$class/public/blog"} && !$disable_public_blog) {
@opt2 = (@opt2,"media/virclass/$class/public/blog:folder:$fav_subdir");
}
foreach my $opt (@opt2) {
if (!$exclude{$opt}) {
@opts = (@opts,$opt);
}
}
}
}
return reverse sort @opts;
}
sub dir_links_icon {
my (
$self,
$community,
$subID,
$dir,
$file,
$sql_ref,
) = @_;
#: Generate a file icon.
my $ID = ONO::Lib::Code::RandomID->make;
my ($status,$dim_x) = ONO::Lib::Image::Size->resize("/$dir/$file","max_y:64");
if (ONO::IO->getfiletype($file) eq "image") {
my %sql = %$sql_ref;
my $IMG = ONO::FW::Media::Manager::ToolBox->protected_image("/$dir/$file",\%sql,$community);
my $SWITCH = ONO::Lib::UI::Check->switch("blog_message_image_update2_$subID\_$dir/$file",0,"ms");
my $ID2 = "$subID\_$dir/$file";
$ID2 =~ s~(\/|\.)~__~g;
return qq~<div class="box_fabric fl mr5 mb5 radius5" style="padding:2px;overflow:hidden" onclick="ono_ui_switch_blog_message_image_update2_${ID2}_toggle();">
<table class="default_table">
<tr class="vtop">
<td>$SWITCH</td>
<td>
<div class="rel cursorlink" style="z-index:999">
<img class="block64 radius5" src="$IMG?rand=$ID" style="width:${dim_x}px" alt="">
<div class="bg_paper abs small radius5 lh125 trans80" style="bottom:-3px;left:-22px;overflow:hidden">
<div id="blog_message_image_filename1_$ID" style="max-width:80px"> $file </div>
</div>
</div>
</td>
</tr>
</table>
</div>
~;
} else {
my $IMG = ONO::ToolBox::Docs->mimetype_icon($file,64);
return qq~<div class="box_fabric fl mr5 mb5 radius5" style="padding:2px;overflow:hidden">
<table class="default_table">
<tr class="vtop">
<td>
<div class="rel" style="z-index:999">
<img class="block64 radius5" src="$IMG" alt="">
<div class="bg_paper abs small radius5 lh125 trans80" style="bottom:-3px;left:-22px;overflow:hidden">
<div id="blog_message_image_filename1_$ID" style="max-width:80px"> $file </div>
</div>
</div>
</td>
</tr>
</table>
</div>
~;
}
}
sub dir_links_fliprot {
my (
$self,
$subID,
$BLK_ref,
) = @_;
my %BLK = %$BLK_ref;
#: Allow to flip or rotate an image.
my $FLIP_ROTATE = ONO::FW::Media::Manager::ToolBox->flip_rotate_selector($BLK_ref,"_$subID");
return qq~<div class="inline">
<div id="dir_links_fliprot_but_$subID"><a href="javascript:void(0);" onclick="onojs_hide('dir_links_fliprot_but_$subID');onojs_block('dir_links_fliprot_div_$subID');"
class="button_yellow button_small mt10">$BLK{'flip'} / $BLK{'rotate'}</a></div>
<div id="dir_links_fliprot_div_$subID" class="rel hide" style="top:10px">
<table class="default_table">
<tr class="vtop">
<td>$FLIP_ROTATE</td>
<td><input type="submit" name="blog_message_edit_option_fliprotate_$subID" value="$BLK{'flip'} / $BLK{'rotate'}" class="button_green button_small"></td>
</tr>
</table>
</div>
</div>
~;
}
###############################################################################
# end of script
###############################################################################
1;
__END__