diff --git a/scripts/im.js b/scripts/im.js
new file mode 100644
index 00000000..b184c2d4
--- /dev/null
+++ b/scripts/im.js
@@ -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);
+}
diff --git a/src/elogd.c b/src/elogd.c
index a131197e..4cee9d70 100755
--- a/src/elogd.c
+++ b/src/elogd.c
@@ -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("\n");
+ /* optionally load ImageMagic JavaScript code */
+ if (image_magick_exist)
+ rsprintf("\n\n");
+
/* optionally load ELCode JavaScript code */
if (enc_selected == 0)
rsprintf("\n\n");
@@ -11074,41 +11007,101 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL
rsprintf("
| %s %d: | \n", loc("Attachment"), index + 1);
sprintf(str, "attachment%d", index);
rsprintf("\n");
+ rsprintf("\n", str, att[index]);
if (strlen(att[index]) < 14 || att[index][6] != '_' || att[index][13] != '_') {
rsprintf("Error: Invalid attachment \"%s\" ", att);
} else {
- rsprintf("\n", str, att[index]);
- rsprintf("%s\n", att[index] + 14);
- rsprintf(" ");
-
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("| \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(" ");
+ 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(" ");
+ 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(" ");
+
+ /* ImageMagick available, so get image size */
+ rsprintf("%s \n", att[index] + 14);
+ sprintf(cmd, "identify -format %%P \"%s\"", file_name);
+ my_shell(cmd, str, sizeof(str));
+ if (atoi(str) > 0)
+ rsprintf("%s: %s\n", loc("Original size"), str);
+
+ rsprintf(" | \n");
+ rsprintf("");
+ } else {
+ rsprintf("%s\n", att[index] + 14);
+ rsprintf(" ");
+ rsprintf(" \n");
+ }
+
if (display_inline) {
- rsprintf(" \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(" \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(" \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(" \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(" | \n");
}
rsprintf(" |
\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("\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("\n");
rsprintf("\n", index + 1);
- rsprintf(" \n", ref, attachment[index] + 14,
- attachment[index] + 14);
+ rsprintf(" \n", ref,
+ attachment[index] + 14, attachment[index] + 14);
rsprintf(" |
\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");