diff --git a/src/elogd.c b/src/elogd.c
index 4416729a..c7656eb1 100755
--- a/src/elogd.c
+++ b/src/elogd.c
@@ -5559,6 +5559,44 @@ void replace_inline_img(char *str)
/*------------------------------------------------------------------*/
+void convert_elog_link(LOGBOOK *lbs, char *link, char *link_text, char *result, int absolute_link, int message_id)
+{
+ char str[256], base_url[256];
+ int i;
+
+ strlcpy(str, link, sizeof(str));
+ if (strchr(str, '/'))
+ *strchr(str, '/') = 0;
+
+ for (i = 0; i < (int) strlen(str); i++)
+ if (!isdigit(str[i]))
+ break;
+
+ if (i < (int) strlen(str)) {
+ /* if link contains reference to other logbook, put logbook explicitly */
+ if (absolute_link)
+ compose_base_url(NULL, base_url, sizeof(base_url), FALSE);
+ else
+ strcpy(base_url, "../");
+ sprintf(result, "elog:%s", base_url, link, link_text);
+ } else if (link[0] == '/') {
+ if (absolute_link)
+ compose_base_url(NULL, base_url, sizeof(base_url), FALSE);
+ else
+ base_url[0] = 0;
+ sprintf(result, "elog:%s", base_url, lbs->name_enc,
+ message_id, link, link_text);
+ } else {
+ if (absolute_link)
+ compose_base_url(lbs, base_url, sizeof(base_url), FALSE);
+ else
+ base_url[0] = 0;
+ sprintf(result, "elog:%s", base_url, link, link_text);
+ }
+}
+
+/*------------------------------------------------------------------*/
+
void rsputs(const char *str)
{
if (strlen_retbuf + (int) strlen(str) + 1 >= return_buffer_size) {
@@ -5577,8 +5615,8 @@ char *key_list[] = { "http://", "https://", "ftp://", "mailto:", "elog:", "file:
void rsputs2(LOGBOOK * lbs, int absolute_link, const char *str)
{
- int i, j, k, l, m, n;
- char *p, *pd, link[1000], link_text[1000], tmp[1000], base_url[256];
+ int i, j, k, l, n;
+ char *p, *pd, link[1000], link_text[1000];
if (strlen_retbuf + (int) (2 * strlen(str) + 1000) >= return_buffer_size) {
return_buffer = xrealloc(return_buffer, return_buffer_size + 100000);
@@ -5658,36 +5696,7 @@ void rsputs2(LOGBOOK * lbs, int absolute_link, const char *str)
strlcpy(link_text, link, sizeof(link_text));
if (strcmp(key_list[l], "elog:") == 0) {
- strlcpy(tmp, link, sizeof(tmp));
- if (strchr(tmp, '/'))
- *strchr(tmp, '/') = 0;
-
- for (m = 0; m < (int) strlen(tmp); m++)
- if (!isdigit(tmp[m]))
- break;
-
- if (m < (int) strlen(tmp)) {
- /* if link contains reference to other logbook, put logbook explicitly */
- if (absolute_link)
- compose_base_url(NULL, base_url, sizeof(base_url), FALSE);
- else
- strcpy(base_url, "../");
- sprintf(return_buffer + j, "elog:%s", base_url, link, link_text);
- } else if (link[0] == '/') {
- if (absolute_link)
- compose_base_url(NULL, base_url, sizeof(base_url), FALSE);
- else
- base_url[0] = 0;
- sprintf(return_buffer + j, "elog:%s", base_url, lbs->name_enc,
- _current_message_id, link, link_text);
- } else {
- if (absolute_link)
- compose_base_url(lbs, base_url, sizeof(base_url), FALSE);
- else
- base_url[0] = 0;
- sprintf(return_buffer + j, "elog:%s", base_url, link, link_text);
- }
-
+ convert_elog_link(lbs, link, link_text, return_buffer+j, absolute_link, _current_message_id);
} else if (strcmp(key_list[l], "mailto:") == 0) {
sprintf(return_buffer + j, "%s", link, link_text);
} else {
@@ -21694,6 +21703,22 @@ void submit_elog(LOGBOOK * lbs)
p, in_reply_to, reply_to, encoding, att_file, TRUE, NULL);
}
+ /*---- replace elog: by HTML link ----*/
+ if (strieq(encoding, "HTML") && stristr(getparam("text"), "elog:")) {
+ p = stristr(getparam("text"), "elog:");
+ while (p) {
+ for (i=0 ; i<5 || (p[i] == '/' || isalnum(p[i])) ; i++)
+ str[i] = p[i];
+ str[i] = 0;
+ convert_elog_link(lbs, str+5, str+5, str2, 0, message_id);
+ strsubst(p, TEXT_SIZE, str, str2);
+ p += strlen(str2);
+ p = stristr(p, "elog:");
+ }
+ el_submit(lbs, message_id, TRUE, date, attr_list, attrib, n_attr,
+ getparam("text"), in_reply_to, reply_to, encoding, att_file, TRUE, NULL);
+ }
+
/*---- email notifications ----*/
suppress = isparam("suppress") ? atoi(getparam("suppress")) : 0;