Implemented resizing and rotation of thumbnails

SVN revision: 2027
This commit is contained in:
2008-02-05 21:20:59 +00:00
parent 92122ccd28
commit 72ebdc83cb
2 changed files with 292 additions and 156 deletions
+49
View File
@@ -0,0 +1,49 @@
/********************************************************************\
Name: md.js
Created by: Stefan Ritt
Contents: JavaScript code for ImageMagic interface inside ELOG
$Id$
\********************************************************************/
var dummy = 0;
function im(id, thumb, image, cmd)
{
var xmlHttp;
try {
xmlHttp = new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari
}
catch (e) {
try {
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
}
catch (e) {
try {
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {
alert("Your browser does not support AJAX!");
return false;
}
}
}
xmlHttp.onreadystatechange = function()
{
if(xmlHttp.readyState == 4)
{
if (xmlHttp.responseText != "")
alert(xmlHttp.responseText);
document.getElementById(id).src = thumb+'?'+dummy;
dummy++;
}
}
xmlHttp.open("GET","?cmd=im&req="+cmd+"&img="+image, true);
xmlHttp.send(null);
}
+243 -156
View File
@@ -439,6 +439,7 @@ void strencode2(char *b, const char *text, int size);
void load_config_section(char *section, char **buffer, char *error);
void remove_crlf(char *buffer);
time_t convert_date(char *date_string);
int get_thumb_name(const char *file_name, char *thumb_name, int size, int index);
int create_thumbnail(LOGBOOK * lbs, char *file_name);
/*---- Funcions from the MIDAS library -----------------------------*/
@@ -1005,79 +1006,7 @@ void redirect_to_stderr(void)
/*------------------------------------------------------------------*/
int my_system(const char *cmd)
/* execute system() command as original user */
{
#ifdef OS_UNIX
pid_t child_pid;
int status;
char str[256];
if ((child_pid = fork()) < 0)
return 0;
else if (child_pid > 0) {
/* parent process waits for child */
waitpid(child_pid, &status, 0);
} else {
/* child process */
/* restore original UID/GID */
if (setregid(-1, orig_gid) < 0 || setreuid(-1, orig_uid) < 0)
eprintf("Cannot restore original GID/UID.\n");
/* give up root privilege permanently */
if (geteuid() == 0) {
if (!getcfg("global", "Grp", str, sizeof(str)) || setgroup(str) < 0) {
eprintf("Falling back to default group \"elog\"\n");
if (setgroup("elog") < 0) {
eprintf("Falling back to default group \"%s\"\n", DEFAULT_GROUP);
if (setgroup(DEFAULT_GROUP) < 0) {
eprintf("Refuse to run as setgid root.\n");
eprintf("Please consider to define a Grp statement in configuration file\n");
exit(EXIT_FAILURE);
}
}
} else if (verbose)
eprintf("Falling back to group \"%s\"\n", str);
if (!getcfg("global", "Usr", str, sizeof(str)) || setuser(str) < 0) {
eprintf("Falling back to default user \"elog\"\n");
if (setuser("elog") < 0) {
eprintf("Falling back to default user \"%s\"\n", DEFAULT_USER);
if (setuser(DEFAULT_USER) < 0) {
eprintf("Refuse to run as setuid root.\n");
eprintf("Please consider to define a Usr statement in configuration file\n");
exit(EXIT_FAILURE);
}
}
} else if (verbose)
eprintf("Falling back to user \"%s\"\n", str);
}
/* execute shell with redirection to /tmp/elog-shell */
sprintf(str, "/bin/sh -c \"%s\"", cmd);
if (verbose) {
efputs("Going to execute: ");
efputs(str);
efputs("\n");
}
system(str);
exit(0);
}
#endif
#ifdef OS_WINNT
system(cmd);
#endif
return 1;
}
/*------------------------------------------------------------------*/
int subst_shell(char *cmd, char *result, int size)
int my_shell(char *cmd, char *result, int size)
{
#ifdef OS_WINNT
@@ -1394,7 +1323,7 @@ void strsubst_list(char *string, int size, char name[][NAME_LENGTH], char value[
strlcpy(result, loc("Shell execution not enabled via -x flag"), sizeof(result));
eprintf("Shell execution not enabled via -x flag.\n");
} else
subst_shell(str, result, sizeof(result));
my_shell(str, result, sizeof(result));
strlcpy(pt, result, sizeof(tmp) - (pt - tmp));
pt += strlen(pt);
@@ -8938,7 +8867,7 @@ void ricon(char *name, char *comment, char *onclick)
rsprintf(" onclick=\"%s\"", onclick);
rsprintf(" onmousedown=\"document.images.%s.src='icons/eld_%s.png'\"", name, name);
rsprintf(" onmouseup=\"document.images.%s.src='icons/elc_%s.png'\"", name, name);
rsprintf(" onmouseover=\"this.style.cursor='pointer';\" />");
rsprintf(" onmouseover=\"this.style.cursor='pointer';\" />\n");
}
/*------------------------------------------------------------------*/
@@ -8991,7 +8920,7 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL
int i, j, n, index, aindex, size, width, height, fh, length, input_size, input_maxlen,
format_flags[MAX_N_ATTR], year, month, day, hour, min, sec, n_attr, n_disp_attr, n_lines,
attr_index[MAX_N_ATTR], enc_selected, show_smileys, show_text, n_moptions, display_inline,
allowed_encoding;
allowed_encoding, thumb_status;
char str[2 * NAME_LENGTH], str2[NAME_LENGTH], preset[2 * NAME_LENGTH], *p, *pend, star[80], comment[10000],
reply_string[256], list[MAX_N_ATTR][NAME_LENGTH], file_name[256], *buffer, format[256], date[80],
script_onload[256], script_onfocus[256], script_onunload[256], attrib[MAX_N_ATTR][NAME_LENGTH], *text,
@@ -8999,7 +8928,7 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL
slist[MAX_N_ATTR + 10][NAME_LENGTH], svalue[MAX_N_ATTR + 10][NAME_LENGTH], owner[256], locked_by[256],
class_value[80], class_name[80], ua[NAME_LENGTH], mid[80], title[256], login_name[256], full_name[256],
cookie[256], orig_author[256], attr_moptions[MAX_N_LIST][NAME_LENGTH], ref[256], file_enc[256],
tooltip[10000], enc_attr[NAME_LENGTH], user_email[256];
tooltip[10000], enc_attr[NAME_LENGTH], user_email[256], cmd[256], thumb_name[256];
time_t now, ltime;
char fl[8][NAME_LENGTH];
struct tm *pts;
@@ -9700,6 +9629,10 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL
rsprintf("//-->\n");
rsprintf("</script>\n");
/* optionally load ImageMagic JavaScript code */
if (image_magick_exist)
rsprintf("<script type=\"text/javascript\" src=\"../im.js\"></script>\n\n");
/* optionally load ELCode JavaScript code */
if (enc_selected == 0)
rsprintf("<script type=\"text/javascript\" src=\"../elcode.js\"></script>\n\n");
@@ -11074,41 +11007,101 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL
rsprintf("<tr><td nowrap class=\"attribname\">%s %d:</td>\n", loc("Attachment"), index + 1);
sprintf(str, "attachment%d", index);
rsprintf("<td class=\"attribvalue\">\n");
rsprintf("<input type=hidden name=\"%s\" value=\"%s\">\n", str, att[index]);
if (strlen(att[index]) < 14 || att[index][6] != '_' || att[index][13] != '_') {
rsprintf("<b>Error: Invalid attachment \"%s\"</b><br>", att);
} else {
rsprintf("<input type=hidden name=\"%s\" value=\"%s\">\n", str, att[index]);
rsprintf("%s\n", att[index] + 14);
rsprintf("&nbsp;&nbsp;<input type=\"submit\" name=\"delatt%d\" value=\"%s\" ", index,
loc("Delete"));
rsprintf("onClick=\"return mark_submit();\">");
strlcpy(file_name, lbs->data_dir, sizeof(file_name));
strlcat(file_name, att[index], sizeof(file_name));
display_inline = is_image(file_name) || is_ascii(file_name);
if (chkext(file_name, ".PS") || chkext(file_name, ".PDF") || chkext(file_name, ".EPS"))
if (chkext(file_name, ".ps") || chkext(file_name, ".pdf") || chkext(file_name, ".eps"))
display_inline = 0;
if ((chkext(file_name, ".HTM") || chkext(file_name, ".HTML")) && is_full_html(file_name))
if ((chkext(file_name, ".htm") || chkext(file_name, ".html")) && is_full_html(file_name))
display_inline = 0;
if (getcfg(lbs->name, "Preview attachments", str, sizeof(str)) && atoi(str) == 0)
display_inline = 0;
thumb_status = create_thumbnail(lbs, file_name);
if (thumb_status)
display_inline = 1;
if (thumb_status) {
get_thumb_name(file_name, thumb_name, sizeof(thumb_name), 0);
if (strrchr(thumb_name, DIR_SEPARATOR))
strlcpy(str, strrchr(thumb_name, DIR_SEPARATOR)+1, sizeof(str));
else
strlcpy(str, thumb_name, sizeof(str));
strlcpy(thumb_name, str, sizeof(str));
rsprintf("<table><tr><td class=\"toolframe\">\n");
sprintf(str, "im('att'+%d,'%s','%s','smaller');", index, thumb_name, att[index]);
ricon("smaller", loc("Make smaller"), str);
sprintf(str, "im('att'+%d,'%s','%s','larger');", index, thumb_name, att[index]);
ricon("larger", loc("Make larger"), str);
rsprintf("&nbsp;");
sprintf(str, "im('att'+%d,'%s','%s','rotleft');", index, thumb_name, att[index]);
ricon("rotleft", loc("Rotate left"), str);
sprintf(str, "im('att'+%d,'%s','%s','rotright');", index, thumb_name, att[index]);
ricon("rotright", loc("Rotate right"), str);
rsprintf("&nbsp;");
sprintf(str, "document.form1.jcmd.value='delete';");
sprintf(str+strlen(str), "document.form1.smcmd.value='delatt%d';", index);
sprintf(str+strlen(str), "document.form1.submit();");
ricon("delete", loc("Delete attachment"), str);
rsprintf("&nbsp;&nbsp;");
/* ImageMagick available, so get image size */
rsprintf("<b>%s</b>&nbsp;\n", att[index] + 14);
sprintf(cmd, "identify -format %%P \"%s\"", file_name);
my_shell(cmd, str, sizeof(str));
if (atoi(str) > 0)
rsprintf("<span class=\"bytes\">%s: %s</span>\n", loc("Original size"), str);
rsprintf("</td></tr>\n");
rsprintf("<tr><td align=center>");
} else {
rsprintf("%s\n", att[index] + 14);
rsprintf("&nbsp;&nbsp;<input type=\"submit\" name=\"delatt%d\" value=\"%s\" ",
index, loc("Delete"));
rsprintf("onClick=\"return mark_submit();\">");
rsprintf("<br>\n");
}
if (display_inline) {
rsprintf("<br>\n");
strlcpy(str, att[index], sizeof(str));
str[13] = 0;
strcpy(file_enc, att[index] + 14);
url_encode(file_enc, sizeof(file_enc)); /* for file names with special characters like "+" */
sprintf(ref, "%s/%s", str, file_enc);
if (is_image(att[index])) {
rsprintf("<img src=\"%s\" alt=\"%s\" title=\"%s\">\n", ref, att[index] + 14,
att[index] + 14);
if (thumb_status) {
for (i=0 ; ; i++) {
get_thumb_name(file_name, thumb_name, sizeof(thumb_name), i);
if (thumb_name[0]) {
strlcpy(str, att[index], sizeof(str));
str[13] = 0;
if (strrchr(thumb_name, DIR_SEPARATOR))
strlcpy(file_enc, strrchr(thumb_name, DIR_SEPARATOR)+1+14, sizeof(file_enc));
else
strlcpy(file_enc, thumb_name + 14, sizeof(file_enc));
url_encode(file_enc, sizeof(file_enc)); /* for file names with special characters like "+" */
sprintf(ref, "%s/%s", str, file_enc);
rsprintf("<img src=\"%s\" alt=\"%s\" title=\"%s\" id=\"att%d\">\n",
ref, att[index] + 14, att[index] + 14, index);
} else
break;
}
} else {
strlcpy(str, att[index], sizeof(str));
str[13] = 0;
strcpy(file_enc, att[index] + 14);
url_encode(file_enc, sizeof(file_enc)); /* for file names with special characters like "+" */
sprintf(ref, "%s/%s", str, file_enc);
rsprintf("<img src=\"%s\" alt=\"%s\" title=\"%s\" id=\"att%d\">\n",
ref, att[index] + 14, att[index] + 14, index);
}
} else {
if (is_ascii(file_name)) {
if (!chkext(att[index], ".HTML"))
@@ -11140,6 +11133,9 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL
}
}
}
if (thumb_status)
rsprintf("</td></tr></table>\n");
}
rsprintf("</td></tr>\n");
@@ -16917,13 +16913,13 @@ void display_line(LOGBOOK * lbs, int message_id, int number, char *mode,
if (thumb_status == 2) {
for (i=0 ; ; i++) {
strlcpy(str, file_name, sizeof(str));
if (chkext(str, ".pdf") || chkext(str, ".ps") | chkext(str, ".eps"))
if (chkext(str, ".pdf") || chkext(str, ".ps"))
if (strrchr(str, '.'))
*strrchr(str, '.') = 0;
sprintf(str+strlen(str), "-%d.png", i);
if (file_exist(str)) {
strlcpy(str, ref, sizeof(str));
if (chkext(file_name, ".pdf") || chkext(file_name, ".ps") | chkext(file_name, ".eps"))
if (chkext(file_name, ".pdf") || chkext(file_name, ".ps"))
if (strrchr(str, '.'))
*strrchr(str, '.') = 0;
sprintf(str+strlen(str), "-%d.png", i);
@@ -17381,6 +17377,9 @@ BOOL is_command_allowed(LOGBOOK * lbs, char *command)
else if (command[0] && strieq(command, "GetMD5")) {
return TRUE;
}
else if (command[0] && strieq(command, "IM")) {
return TRUE;
}
/* check if command is present in the menu list */
else if (command[0]) {
n = strbreak(menu_str, menu_item, MAX_N_LIST, ",", FALSE);
@@ -20839,7 +20838,7 @@ int execute_shell(LOGBOOK * lbs, int message_id, char attrib[MAX_N_ATTR][NAME_LE
sprintf(str, "SHELL \"%s\"", shell_cmd);
write_logfile(lbs, str);
my_system(shell_cmd);
my_shell(shell_cmd, str, sizeof(str));
return SUCCESS;
}
@@ -22029,6 +22028,7 @@ int is_inline_attachment(char *encoding, int message_id, char *text, int i, char
int create_thumbnail(LOGBOOK * lbs, char *file_name)
{
char str[MAX_PATH_LENGTH], cmd[2*MAX_PATH_LENGTH], thumb_size[256];
int status;
if (!image_magick_exist)
return 0;
@@ -22041,32 +22041,16 @@ int create_thumbnail(LOGBOOK * lbs, char *file_name)
!chkext(file_name, ".png") && !chkext(file_name, ".ico") && !chkext(file_name, ".tif"))
return 0;
/* append .png for all files as thumbnail name, except for PDF files (convert bug!) */
if (chkext(file_name, ".pdf") || chkext(file_name, ".ps") | chkext(file_name, ".eps")) {
strlcpy(str, file_name, sizeof(str));
status = get_thumb_name(file_name, str, sizeof(str), 0);
if (status)
return status;
strlcpy(str, file_name, sizeof(str));
if (chkext(file_name, ".pdf") || chkext(file_name, ".ps")) {
if (strrchr(str, '.'))
*strrchr(str, '.') = 0;
strlcat(str, "-0.png", sizeof(str));
if (file_exist(str))
return 2;
strlcpy(str, file_name, sizeof(str));
if (strrchr(str, '.'))
*strrchr(str, '.') = 0;
strlcat(str, ".png", sizeof(str));
if (file_exist(str))
return 1;
} else {
strlcpy(str, file_name, sizeof(str));
strlcat(str, "-0.png", sizeof(str));
if (file_exist(str))
return 2;
strlcpy(str, file_name, sizeof(str));
strlcat(str, ".png", sizeof(str));
if (file_exist(str))
return 1;
}
strlcat(str, ".png", sizeof(str));
#ifdef OS_UNIX
if (chkext(file_name, ".pdf") || chkext(file_name, ".ps"))
@@ -22082,42 +22066,140 @@ int create_thumbnail(LOGBOOK * lbs, char *file_name)
sprintf(str, "SHELL \"%s\"", cmd);
write_logfile(lbs, str);
if (verbose)
if (verbose) {
eprintf(str);
my_system(cmd);
if (chkext(file_name, ".pdf") || chkext(file_name, ".ps") | chkext(file_name, ".eps")) {
strlcpy(str, file_name, sizeof(str));
if (strrchr(str, '.'))
*strrchr(str, '.') = 0;
strlcat(str, "-0.png", sizeof(str));
if (file_exist(str))
return 2;
strlcpy(str, file_name, sizeof(str));
if (strrchr(str, '.'))
*strrchr(str, '.') = 0;
strlcat(str, ".png", sizeof(str));
if (file_exist(str))
return 1;
} else {
strlcpy(str, file_name, sizeof(str));
strlcat(str, ".png", sizeof(str));
if (file_exist(str))
return 1;
strlcpy(str, file_name, sizeof(str));
strlcat(str, "-0.png", sizeof(str));
if (file_exist(str))
return 2;
eprintf("\n");
}
my_shell(cmd, str, sizeof(str));
status = get_thumb_name(file_name, str, sizeof(str), 0);
if (status)
return status;
return 3;
}
/*------------------------------------------------------------------*/
int get_thumb_name(const char *file_name, char *thumb_name, int size, int index)
{
char str[MAX_PATH_LENGTH];
thumb_name[0] = 0;
/* append .png for all files as thumbnail name, except for PDF files (convert bug!) */
if (chkext(file_name, ".pdf") || chkext(file_name, ".ps")) {
strlcpy(str, file_name, sizeof(str));
if (strrchr(str, '.'))
*strrchr(str, '.') = 0;
sprintf(str+strlen(str), "-%d.png", index);
if (file_exist(str)) {
strlcpy(thumb_name, str, size);
return 2;
}
if (index > 0)
return 0;
strlcpy(str, file_name, sizeof(str));
if (strrchr(str, '.'))
*strrchr(str, '.') = 0;
strlcat(str, ".png", sizeof(str));
if (file_exist(str)) {
strlcpy(thumb_name, str, size);
return 1;
}
} else {
strlcpy(str, file_name, sizeof(str));
sprintf(str+strlen(str), "-%d.png", index);
if (file_exist(str)) {
strlcpy(thumb_name, str, size);
return 2;
}
if (index > 0)
return 0;
strlcpy(str, file_name, sizeof(str));
strlcat(str, ".png", sizeof(str));
if (file_exist(str)) {
strlcpy(thumb_name, str, size);
return 1;
}
}
return 0;
}
/*------------------------------------------------------------------*/
void call_image_magick(LOGBOOK *lbs, int message_id)
{
char str[256], cmd[256], file_name[256], thumb_name[256];
int cur_width, cur_height, new_size, cur_rot, new_rot;
if (!isparam("req") || !isparam("img")) {
show_error("Unknown IM request received");
return;
}
strlcpy(file_name, lbs->data_dir, sizeof(file_name));
strlcat(file_name, getparam("img"), sizeof(file_name));
get_thumb_name(file_name, thumb_name, sizeof(thumb_name), 0);
sprintf(cmd, "identify -format %%P%%c \"%s\"", thumb_name);
my_shell(cmd, str, sizeof(str));
if (atoi(str) > 0) {
cur_width = atoi(str);
if (strchr(str, 'x')) {
cur_height = atoi(strchr(str, 'x')+1);
} else
cur_height = cur_width;
if (strchr(str, ' ')) {
cur_rot = atoi(strchr(str, ' ')+1);
} else
cur_rot = 0;
} else {
show_error(str);
return;
}
if (strieq(getparam("req"), "rotleft")) {
new_rot = (cur_rot + 360 - 90) % 360;
sprintf(cmd, "convert \"%s\" -rotate %d -thumbnail %d -set comment \" %d\" \"%s\"",
file_name, new_rot, cur_height, new_rot, thumb_name);
my_shell(cmd, str, sizeof(str));
}
if (strieq(getparam("req"), "rotright")) {
new_rot = (cur_rot + 90) % 360;
sprintf(cmd, "convert \"%s\" -rotate %d -thumbnail %d -set comment \" %d\" \"%s\"",
file_name, new_rot, cur_height, new_rot, thumb_name);
my_shell(cmd, str, sizeof(str));
}
if (strieq(getparam("req"), "smaller")) {
new_size = (int) (cur_width/1.5);
sprintf(cmd, "convert \"%s\" -rotate %d -thumbnail %d -set comment \" %d\" \"%s\"",
file_name, cur_rot, new_size, cur_rot, thumb_name);
my_shell(cmd, str, sizeof(str));
}
if (strieq(getparam("req"), "larger")) {
new_size = (int) (cur_width*1.5);
sprintf(cmd, "convert \"%s\" -rotate %d -thumbnail %d -set comment \" %d\" \"%s\"",
file_name, cur_rot, new_size, cur_rot, thumb_name);
my_shell(cmd, str, sizeof(str));
}
show_http_header(NULL, FALSE, NULL);
rsputs(str);
return;
}
/*------------------------------------------------------------------*/
void show_elog_entry(LOGBOOK * lbs, char *dec_path, char *command)
{
int size, i, j, k, n, n_log, status, fh, length, message_error, index, n_hidden,
@@ -23079,13 +23161,13 @@ void show_elog_entry(LOGBOOK * lbs, char *dec_path, char *command)
if (thumb_status == 2 && !email) {
for (i=0 ; ; i++) {
strlcpy(str, file_name, sizeof(str));
if (chkext(file_name, ".pdf") || chkext(file_name, ".ps") | chkext(file_name, ".eps"))
if (chkext(file_name, ".pdf") || chkext(file_name, ".ps"))
if (strrchr(str, '.'))
*strrchr(str, '.') = 0;
sprintf(str+strlen(str), "-%d.png", i);
if (file_exist(str)) {
strlcpy(str, ref, sizeof(str));
if (chkext(file_name, ".pdf") || chkext(file_name, ".ps") | chkext(file_name, ".eps"))
if (chkext(file_name, ".pdf") || chkext(file_name, ".ps"))
if (strrchr(str, '.'))
*strrchr(str, '.') = 0;
sprintf(str+strlen(str), "-%d.png", i);
@@ -23099,7 +23181,7 @@ void show_elog_entry(LOGBOOK * lbs, char *dec_path, char *command)
if (!email) {
rsprintf("<a name=\"att%d\" href=\"%s\">\n", index + 1, ref);
strlcpy(str, ref, sizeof(str));
if (chkext(file_name, ".pdf") || chkext(file_name, ".ps") | chkext(file_name, ".eps"))
if (chkext(file_name, ".pdf") || chkext(file_name, ".ps"))
if (strrchr(str, '.'))
*strrchr(str, '.') = 0;
strlcat(str, ".png", sizeof(str));
@@ -23113,8 +23195,8 @@ void show_elog_entry(LOGBOOK * lbs, char *dec_path, char *command)
if (!email) {
rsprintf("<tr><td class=\"attachmentframe\">\n");
rsprintf("<a name=\"att%d\"></a>\n", index + 1);
rsprintf("<img src=\"%s\" alt=\"%s\" title=\"%s\">\n", ref, attachment[index] + 14,
attachment[index] + 14);
rsprintf("<img src=\"%s\" alt=\"%s\" title=\"%s\">\n", ref,
attachment[index] + 14, attachment[index] + 14);
rsprintf("</td></tr>\n\n");
}
} else {
@@ -25212,7 +25294,7 @@ void interprete(char *lbook, char *path)
/* check for deletion of attachments */
for (i = 0; i < MAX_ATTACHMENTS; i++) {
sprintf(str, "delatt%d", i);
if (isparam(str)) {
if (isparam(str) || (isparam("smcmd") && stricmp(getparam("smcmd"), str) == 0)) {
sprintf(str, "attachment%d", i);
strlcpy(file_name, getparam(str), sizeof(file_name));
el_delete_attachment(lbs, file_name);
@@ -25538,6 +25620,11 @@ void interprete(char *lbook, char *path)
return;
}
if (strieq(command, "IM")) {
call_image_magick(lbs, message_id);
return;
}
/* check for welcome page */
if (!_cmdline[0] && getcfg(lbs->name, "Welcome page", str, sizeof(str)) && str[0]) {
/* check if file starts with an absolute directory */
@@ -26781,7 +26868,7 @@ void server_loop(void)
eprintf("FCKedit detected\n");
/* check for ImageMagick */
subst_shell("convert -version", str, sizeof(str));
my_shell("convert -version", str, sizeof(str));
image_magick_exist = (strstr(str, "ImageMagick") != NULL);
if (image_magick_exist)
eprintf("ImageMagick detected\n");