function bulkLongToDate($arr) { foreach ($arr as $key => $value) { $arr[$key]['date'] = date(getDateString($value['date'])); } return $arr; }
function logToFile($filename, $msg) { $fd = fopen($filename, "a"); fwrite($fd, getDateString() . $_SERVER['REQUEST_METHOD'] . " " . $_SERVER['HTTP_X_FORWARDED_FOR'] . "\n"); if (is_array($msg)) { foreach ($msg as $key => $val) { fwrite($fd, $key . ":" . $val . "\n"); } } fclose($fd); }
function sqimap_get_small_header_list($imap_stream, $msg_list) { global $squirrelmail_language, $color, $data_dir, $username, $imap_server_type; global $uid_support, $allow_server_sort; /* Get the small headers for each message in $msg_list */ $sid = sqimap_session_id($uid_support); $maxmsg = sizeof($msg_list); $msgs_str = sqimap_message_list_squisher($msg_list); $messages = array(); $read_list = array(); /* * We need to return the data in the same order as the caller supplied * in $msg_list, but IMAP servers are free to return responses in * whatever order they wish... So we need to re-sort manually */ for ($i = 0; $i < sizeof($msg_list); $i++) { $id2index[$msg_list[$i]] = $i; } $internaldate = getPref($data_dir, $username, 'internal_date_sort'); if ($internaldate) { $query = "{$sid} FETCH {$msgs_str} (FLAGS UID RFC822.SIZE INTERNALDATE BODY.PEEK[HEADER.FIELDS (Date To Cc From Subject X-Priority Content-Type)])\r\n"; } else { $query = "{$sid} FETCH {$msgs_str} (FLAGS UID RFC822.SIZE BODY.PEEK[HEADER.FIELDS (Date To Cc From Subject X-Priority Content-Type)])\r\n"; } fputs($imap_stream, $query); $readin_list = sqimap_read_data_list($imap_stream, $sid, false, $response, $message); $i = 0; foreach ($readin_list as $r) { if (!$uid_support) { if (!preg_match("/^\\*\\s+([0-9]+)\\s+FETCH/iAU", $r[0], $regs)) { set_up_language($squirrelmail_language); echo '<br><b><font color=$color[2]>' . _("ERROR : Could not complete request.") . '</b><br>' . _("Unknown response from IMAP server: ") . ' 1.' . htmlspecialchars($r[0]) . "</font><br>\n"; } else { if (!isset($id2index[$regs[1]]) || !count($id2index[$regs[1]])) { set_up_language($squirrelmail_language); echo '<br><b><font color=$color[2]>' . _("ERROR : Could not complete request.") . '</b><br>' . _("Unknown message number in reply from server: ") . htmlspecialchars($regs[1]) . "</font><br>\n"; } else { $read_list[$id2index[$regs[1]]] = $r; } } } else { if (!preg_match("/^\\*\\s+([0-9]+)\\s+FETCH.*UID\\s+([0-9]+)\\s+/iAU", $r[0], $regs)) { set_up_language($squirrelmail_language); echo '<br><b><font color=$color[2]>' . _("ERROR : Could not complete request.") . '</b><br>' . _("Unknown response from IMAP server: ") . ' 1.' . htmlspecialchars($r[0]) . "</font><br>\n"; } else { if (!isset($id2index[$regs[2]]) || !count($id2index[$regs[2]])) { set_up_language($squirrelmail_language); echo '<br><b><font color=$color[2]>' . _("ERROR : Could not complete request.") . '</b><br>' . _("Unknown message number in reply from server: ") . htmlspecialchars($regs[2]) . "</font><br>\n"; } else { $read_list[$id2index[$regs[2]]] = $r; $unique_id = $regs[2]; } } } } arsort($read_list); $patterns = array("/^To:(.*)\$/AUi", "/^From:(.*)\$/AUi", "/^X-Priority:(.*)\$/AUi", "/^Cc:(.*)\$/AUi", "/^Date:(.*)\$/AUi", "/^Subject:(.*)\$/AUi", "/^Content-Type:(.*)\$/AUi"); $regpattern = ''; for ($msgi = 0; $msgi < $maxmsg; $msgi++) { $subject = _("(no subject)"); $from = _("Unknown Sender"); $priority = 0; $messageid = '<>'; $cc = $to = $date = $type[0] = $type[1] = $inrepto = ''; $flag_seen = $flag_answered = $flag_deleted = $flag_flagged = false; $read = $read_list[$msgi]; $prevline = false; foreach ($read as $read_part) { //unfold multi-line headers if ($prevline && $prevline[strlen($prevline) - 1] == "\n" && ($read_part[0] == ' ' || $read_part[0] == "\t")) { $read_part = substr($prevline, 0, -2) . preg_replace('/(\\t\\s+)/', ' ', $read_part); } $prevline = $read_part; if ($read_part[0] == '*') { if ($internaldate) { if (preg_match("/^.+INTERNALDATE\\s+\"(.+)\".+/iUA", $read_part, $reg)) { $tmpdate = trim($reg[1]); $tmpdate = str_replace(' ', ' ', $tmpdate); $tmpdate = explode(' ', $tmpdate); $date = str_replace('-', ' ', $tmpdate[0]) . " " . $tmpdate[1] . ' ' . $tmpdate[2]; } } if (preg_match("/^.+RFC822.SIZE\\s+(\\d+).+/iA", $read_part, $reg)) { $size = $reg[1]; } if (preg_match("/^.+FLAGS\\s+\\((.*)\\).+/iUA", $read_part, $regs)) { $flags = explode(' ', trim($regs[1])); foreach ($flags as $flag) { $flag = strtolower($flag); if ($flag == '\\seen') { $flag_seen = true; } else { if ($flag == '\\answered') { $flag_answered = true; } else { if ($flag == '\\deleted') { $flag_deleted = true; } else { if ($flag == '\\flagged') { $flag_flagged = true; } } } } } } if (preg_match("/^.+UID\\s+(\\d+).+/iA", $read_part, $reg)) { $unique_id = $reg[1]; } } else { $firstchar = strtoupper($read_part[0]); if ($firstchar == 'T') { $regpattern = $patterns[0]; $id = 1; } else { if ($firstchar == 'F') { $regpattern = $patterns[1]; $id = 2; } else { if ($firstchar == 'X') { $regpattern = $patterns[2]; $id = 3; } else { if ($firstchar == 'C') { if (strtolower($read_part[1]) == 'c') { $regpattern = $patterns[3]; $id = 4; } else { if (strtolower($read_part[1]) == 'o') { $regpattern = $patterns[6]; $id = 7; } } } else { if ($firstchar == 'D' && !$internaldate) { $regpattern = $patterns[4]; $id = 5; } else { if ($firstchar == 'S') { $regpattern = $patterns[5]; $id = 6; } else { $regpattern = ''; } } } } } } if ($regpattern) { if (preg_match($regpattern, $read_part, $regs)) { switch ($id) { case 1: $to = trim($regs[1]); break; case 2: $from = trim($regs[1]); break; case 3: $priority = $regs[1]; break; case 4: $cc = trim($regs[1]); break; case 5: $date = $regs[1]; break; case 6: $subject = trim($regs[1]); if ($subject == "") { $subject = _("(no subject)"); } break; case 7: $type = strtolower(trim($regs[1])); if ($pos = strpos($type, ";")) { $type = substr($type, 0, $pos); } $type = explode("/", $type); if (!is_array($type)) { $type[0] = 'text'; } if (!isset($type[1])) { $type[1] = ''; } break; default: break; } } } } } if (isset($date)) { $date = str_replace(' ', ' ', $date); $tmpdate = explode(' ', trim($date)); } else { $tmpdate = $date = array('', '', '', '', '', ''); } if ($uid_support) { $messages[$msgi]['ID'] = $unique_id; } else { $messages[$msgi]['ID'] = $msg_list[$msgi]; } $messages[$msgi]['TIME_STAMP'] = getTimeStamp($tmpdate); $messages[$msgi]['DATE_STRING'] = getDateString($messages[$msgi]['TIME_STAMP']); $messages[$msgi]['FROM'] = parseAddress($from); $messages[$msgi]['SUBJECT'] = $subject; // if (handleAsSent($mailbox)) { $messages[$msgi]['TO'] = parseAddress($to); // } $messages[$msgi]['PRIORITY'] = $priority; $messages[$msgi]['CC'] = parseAddress($cc); $messages[$msgi]['SIZE'] = $size; $messages[$msgi]['TYPE0'] = $type[0]; $messages[$msgi]['FLAG_DELETED'] = $flag_deleted; $messages[$msgi]['FLAG_ANSWERED'] = $flag_answered; $messages[$msgi]['FLAG_SEEN'] = $flag_seen; $messages[$msgi]['FLAG_FLAGGED'] = $flag_flagged; /* non server sort stuff */ if (!$allow_server_sort) { $from = parseAddress($from); if ($from[0][1]) { $from = decodeHeader($from[0][1]); } else { $from = $from[0][0]; } $messages[$msgi]['FROM-SORT'] = $from; $subject_sort = strtolower(decodeHeader($subject)); if (preg_match("/^(vedr|sv|re|aw):\\s*(.*)\$/si", $subject_sort, $matches)) { $messages[$msgi]['SUBJECT-SORT'] = $matches[2]; } else { $messages[$msgi]['SUBJECT-SORT'] = $subject_sort; } } } return $messages; }
return; } echo '<div class="ads_manager"> <table>'; foreach ($campaigns['data'] as $campaign) { $campaign_id = trim(sprintf("%20.0f", $campaign['campaign_id'])); echo '<tr style="background-color:#aaa;">' . '<td>'; if ($campaign['campaign_status'] == CampaignStatus::ACTIVE) { echo '<input type=button onclick="pauseCampaign(' . $campaign_id . ')" value="Pause">'; } else { if ($campaign['campaign_status'] == CampaignStatus::PAUSED) { echo '<input type=button onclick="resumeCampaign(' . $campaign_id . ')" value="Resume">'; } } echo '<input type=button onclick="deleteCampaign(' . $campaign_id . ')" value="Delete"></td>'; echo '<td>Campaign ' . $campaign_id . '</td>' . '<td>Campaign Name: ' . $campaign['name'] . '</td>' . '<td>from ' . getDateString($campaign['start_time']) . ' ' . 'to ' . ($campaign['end_time'] ? getDateString($campaign['end_time']) : '') . '</td>' . '<td>Daily Budget: ' . (isset($campaign['daily_budget']) ? getMoneyString($campaign['daily_budget']) : 'N/A') . '</td>' . '<td>Lifetime Budget: ' . (isset($campaign['lifetime_budget']) ? getMoneyString($campaign['lifetime_budget']) : 'N/A') . '</td>' . '<td>Status: ' . getStatusString($campaign['campaign_status']) . '</td>'; $stat = getCampaignStat($campaign_stats, $campaign_id); if ($stat) { $impressions = 0; $clicks = 0; $spend = 0; if ($stat) { $impressions = $stat['impressions']; $clicks = $stat['clicks']; $spend = $stat['spent']; } echo '<td>Impressions: ' . $impressions . ', ' . 'Clicks: ' . $clicks . ', ' . 'Cost: ' . getMoneyString($spend) . '</td>'; } echo '</tr>'; $adgroups = array(); foreach ($all_adgroups['data'] as $adgroup) {
<?php if (!array_key_exists("type", $_POST)) { return; } if (!array_key_exists("name", $_POST)) { return; } if (!array_key_exists("goal", $_POST)) { return; } $type = $_POST["type"]; if ($type != "add") { return; } //TODO: sanitize $activityName = $_POST["name"]; $goalDuration = $_POST["goal"]; include_once 'auth/login.php'; list($userId, $timezone) = checkLogin(); include_once '../classes/db.php'; $db = new Db($userId, $timezone); $result = $db->createActivity($activityName, $goalDuration); $activities = $db->getActivities(); include_once '../util/util.php'; //Data for today $dataForToday = $db->getData(getDateString(0)); echo json_encode(array("result" => $result, "activities" => $activities, "dataForToday" => $dataForToday));
/** * Displays message header row in messages list * * @param array $aMsg contains all message related parameters * @return void */ function printMessageInfo($aMsg) { // FIX ME, remove these globals as well by adding an array as argument for the user settings // specificly meant for header display global $checkall, $color, $default_use_priority, $message_highlight_list, $index_order, $truncate_sender, $email_address, $show_recipient_instead, $use_icons, $icon_theme; /* icons theming */ $color_string = $color[4]; // initialisation: $mailbox = $aMsg['MAILBOX']; $msg = $aMsg['HEADER']; $t = $aMsg['INDX']; $start_msg = $aMsg['PAGEOFFSET']; $last = $aMsg['LAST']; if (isset($aMsg['SEARCH']) && count($aMsg['SEARCH']) > 1) { $where = $aMsg['SEARCH'][0]; $what = $aMsg['SEARCH'][1]; } else { $where = false; $what = false; } $iIndent = $aMsg['INDENT']; $sSubject = isset($msg['SUBJECT']) && $msg['SUBJECT'] != '' ? $msg['SUBJECT'] : _("(no subject)"); $sFrom = isset($msg['FROM']) ? $msg['FROM'] : _("Unknown sender"); $sTo = isset($msg['TO']) ? $msg['TO'] : _("Unknown recipient"); $sCc = isset($msg['CC']) ? $msg['CC'] : ''; $aFlags = isset($msg['FLAGS']) ? $msg['FLAGS'] : array(); $iPrio = isset($msg['PRIORITY']) ? $msg['PRIORITY'] : 3; $iSize = isset($msg['SIZE']) ? $msg['SIZE'] : 0; $sType0 = isset($msg['TYPE0']) ? $msg['TYPE0'] : 'text'; $sType1 = isset($msg['TYPE1']) ? $msg['TYPE1'] : 'plain'; if (isset($msg['INTERNALDATE'])) { $sDate = getDateString(getTimeStamp(explode(' ', $msg['INTERNALDATE']))); } else { $sDate = isset($msg['DATE']) ? getDateString(getTimeStamp(explode(' ', $msg['DATE']))) : ''; } $iId = isset($msg['UID']) ? $msg['UID'] : false; if (!$iId) { return; } if ($GLOBALS['alt_index_colors']) { if (!($t % 2)) { if (!isset($color[12])) { $color[12] = '#EAEAEA'; } $color_string = $color[12]; } } $urlMailbox = urlencode($mailbox); // FIXME, foldertype should be set in right_main.php // in other words, handle as sent is obsoleted from now. // We replace that by providing an array to aMailbox with the to shown headers // that way we are free to show the user different layouts for different folders $bSentFolder = handleAsSent($mailbox); if (!$bSentFolder && $show_recipient_instead) { // If the From address is the same as $email_address, then handle as Sent $from_array = parseAddress($sFrom, 1); if (!isset($email_address)) { global $datadir, $username; $email_address = getPref($datadir, $username, 'email_address'); } $bHandleAsSent = isset($from_array[0][0]) && $from_array[0][0] == $email_address; } else { $bHandleAsSent = $bSentFolder; } // If this is a Sent message, display To address instead of From if ($bHandleAsSent) { $sFrom = $sTo; } // Passing 1 below results in only 1 address being parsed, thus defeating the following code $sFrom = parseAddress($sFrom); /* * This is done in case you're looking into Sent folders, * because you can have multiple receivers. */ $senderNames = $sFrom; $senderName = ''; $senderAddress = ''; if (sizeof($senderNames)) { foreach ($senderNames as $senderNames_part) { if ($senderName != '') { $senderName .= ', '; $senderAddress .= ', '; } $sender_address_part = htmlspecialchars($senderNames_part[0]); $sender_name_part = str_replace(' ', ' ', decodeHeader($senderNames_part[1])); if ($sender_name_part) { $senderName .= $sender_name_part; $senderAddress .= $sender_name_part . ' <' . $sender_address_part . '>'; } else { $senderName .= $sender_address_part; $senderAddress .= $sender_address_part; } } } // If Sent, prefix with To: but only if not Sent folder if ($bHandleAsSent ^ $bSentFolder) { $senderName = _("To") . ': ' . $senderName; $senderAddress = _("To") . ': ' . $senderAddress; } // this is a column property which can apply to multiple columns. Do not use vars for one column // only. instead we should use something like this: // 1ed column $aMailbox['columns']['SUBJECT'] value: aray with properties ... // 2ed column $aMailbox['columns']['FROM'] value: aray with properties ... // NB in case of the sentfolder this could be the TO field // properties array example: // 'truncate' => length (0 is no truncate) // 'prefix => if (x in b then do that ) if ($truncate_sender > 0) { $senderName = truncateWithEntities($senderName, $truncate_sender); } $flag = $flag_end = $bold = $bold_end = $fontstr = $fontstr_end = $italic = $italic_end = ''; $bold = '<b>'; $bold_end = '</b>'; foreach ($aFlags as $sFlag => $value) { switch ($sFlag) { case '\\flagged': if ($value) { $flag = "<font color=\"{$color['2']}\">"; $flag_end = '</font>'; } break; case '\\seen': if ($value) { $bold = ''; $bold_end = ''; } break; case '\\deleted': if ($value) { $fontstr = "<font color=\"{$color['9']}\">"; $fontstr_end = '</font>'; } break; } } if ($bHandleAsSent) { $italic = '<i>'; $italic_end = '</i>'; } if ($where && $what) { $searchstr = '&where=' . $where . '&what=' . $what; } else { $searchstr = ''; } /* * Message highlight code */ $matches = array('TO' => 'sTo', 'CC' => 'sCc', 'FROM' => 'sFrom', 'SUBJECT' => 'sSubject'); if (is_array($message_highlight_list) && count($message_highlight_list)) { $sTo = parseAddress($sTo); $sCc = parseAddress($sCc); foreach ($message_highlight_list as $message_highlight_list_part) { if (trim($message_highlight_list_part['value']) != '') { $high_val = strtolower($message_highlight_list_part['value']); $match_type = strtoupper($message_highlight_list_part['match_type']); if ($match_type == 'TO_CC') { $match = array('TO', 'CC'); } else { $match = array($match_type); } foreach ($match as $match_type) { switch ($match_type) { case 'TO': case 'CC': case 'FROM': foreach (${$matches}[$match_type] as $address) { $address[0] = decodeHeader($address[0], true, false); $address[1] = decodeHeader($address[1], true, false); if (strstr('^^' . strtolower($address[0]), $high_val) || strstr('^^' . strtolower($address[1]), $high_val)) { $hlt_color = $message_highlight_list_part['color']; break 4; } } break; default: $headertest = strtolower(decodeHeader(${$matches}[$match_type], true, false)); if (strstr('^^' . $headertest, $high_val)) { $hlt_color = $message_highlight_list_part['color']; break 3; } break; } } } } } /* end Message highlight code */ if (!isset($hlt_color)) { $hlt_color = $color_string; } $col = 0; $sSubject = str_replace(' ', ' ', decodeHeader($sSubject)); $subject = processSubject($sSubject, $iIndent); echo html_tag('tr', '', '', '', 'valign="top"') . "\n"; if (sizeof($index_order)) { foreach ($index_order as $index_order_part) { switch ($index_order_part) { case 1: /* checkbox */ echo html_tag('td', addCheckBox("msg[{$t}]", $checkall, $iId), 'center', $hlt_color); break; case 2: /* from */ if ($senderAddress != $senderName) { $senderAddress = strtr($senderAddress, array_flip(get_html_translation_table(HTML_SPECIALCHARS))); $title = ' title="' . str_replace('"', "''", $senderAddress) . '"'; } else { $title = ''; } echo html_tag('td', $italic . $bold . $flag . $fontstr . $senderName . $fontstr_end . $flag_end . $bold_end . $italic_end, 'left', $hlt_color, $title); break; case 3: /* date */ if ($sDate == '') { $sDate = _("Unknown date"); } echo html_tag('td', $bold . $flag . $fontstr . $sDate . $fontstr_end . $flag_end . $bold_end, 'center', $hlt_color, 'nowrap'); break; case 4: /* subject */ $td_str = $bold; if ($iIndent) { $td_str .= str_repeat(" ", $iIndent); } $td_str .= '<a href="read_body.php?mailbox=' . $urlMailbox . '&passed_id=' . $iId . '&startMessage=' . $start_msg . $searchstr . '"'; $td_str .= ' ' . concat_hook_function('subject_link', array($start_msg, $searchstr)); if ($subject != $sSubject) { $title = get_html_translation_table(HTML_SPECIALCHARS); $title = array_flip($title); $title = strtr($sSubject, $title); $title = str_replace('"', "''", $title); $td_str .= " title=\"{$title}\""; } $td_str .= ">{$flag}{$subject}{$flag_end}</a>{$bold_end}"; echo html_tag('td', $td_str, 'left', $hlt_color); break; case 5: /* flags */ // icon message markers // if ($use_icons && $icon_theme != 'none') { $td_str = "<b><small>"; if (isset($aFlags['\\flagged']) && $aFlags['\\flagged'] == true) { $td_str .= '<img src="' . SM_PATH . 'images/themes/' . $icon_theme . '/flagged.png" border="0" height="10" width="10" /> '; } if ($default_use_priority) { if ($iPrio == 1 || $iPrio == 2) { $td_str .= '<img src="' . SM_PATH . 'images/themes/' . $icon_theme . '/prio_high.png" border="0" height="10" width="5" /> '; } else { if ($iPrio == 5) { $td_str .= '<img src="' . SM_PATH . 'images/themes/' . $icon_theme . '/prio_low.png" border="0" height="10" width="5" /> '; } else { $td_str .= '<img src="' . SM_PATH . 'images/themes/' . $icon_theme . '/transparent.png" border="0" width="5" /> '; } } } if ($sType1 == 'mixed') { $td_str .= '<img src="' . SM_PATH . 'images/themes/' . $icon_theme . '/attach.png" border="0" height="10" width="6" />'; } else { $td_str .= '<img src="' . SM_PATH . 'images/themes/' . $icon_theme . '/transparent.png" border="0" width="6" />'; } $msg_icon = ''; if (!isset($aFlags['\\seen']) || $aFlags['\\seen'] == false) { $msg_alt = '(' . _("New") . ')'; $msg_title = '(' . _("New") . ')'; $msg_icon .= SM_PATH . 'images/themes/' . $icon_theme . '/msg_new'; } else { $msg_alt = '(' . _("Read") . ')'; $msg_title = '(' . _("Read") . ')'; $msg_icon .= SM_PATH . 'images/themes/' . $icon_theme . '/msg_read'; } if (isset($aFlags['\\deleted']) && $aFlags['\\deleted'] == true) { $msg_icon .= '_deleted'; } if (isset($aFlags['\\answered']) && $aFlags['\\answered'] == true) { $msg_alt = '(' . _("Answered") . ')'; $msg_title = '(' . _("Answered") . ')'; $msg_icon .= '_reply'; } $td_str .= '<img src="' . $msg_icon . '.png" border="0" alt="' . $msg_alt . '" title="' . $msg_title . '" height="12" width="18" />'; $td_str .= '</small></b>'; echo html_tag('td', $td_str, 'right', $hlt_color, 'nowrap'); } else { $stuff = false; $td_str = "<b><small>"; if (isset($aFlags['\\answered']) && $aFlags['\\answered'] == true) { $td_str .= _("A"); $stuff = true; } if ($sType1 == 'mixed') { $td_str .= '+'; $stuff = true; } if ($default_use_priority) { if ($iPrio == 1 || $iPrio == 2) { $td_str .= "<font color=\"{$color['1']}\">!</font>"; $stuff = true; } if ($iPrio == 5) { $td_str .= "<font color=\"{$color['8']}\">?</font>"; $stuff = true; } } if (isset($aFlags['\\deleted']) && $aFlags['\\deleted'] == true) { $td_str .= "<font color=\"{$color['1']}\">D</font>"; $stuff = true; } if (!$stuff) { $td_str .= ' '; } $td_str .= '</small></b>'; echo html_tag('td', $td_str, 'center', $hlt_color, 'nowrap'); } break; case 6: /* size */ echo html_tag('td', $bold . $fontstr . show_readable_size($iSize) . $fontstr_end . $bold_end, 'right', $hlt_color); break; } ++$col; } } /* html for separationlines between rows */ if ($last) { echo '</tr>' . "\n"; } else { echo '</tr>' . "\n" . '<tr><td colspan="' . $col . '" bgcolor="' . $color[0] . '" height="1"></td></tr>' . "\n"; } }
/** * Prepares the message headers for display inside a template. The links are calculated, * color for row highlighting is calculated and optionally the strings are truncated. * * @param array $aMailbox (reference) mailbox retrieved from sqm_api_mailbox_select * @param array $aProps properties * @return array $aFormattedMessages array with message headers and format info * @since 1.5.1 * @author Marc Groot Koerkamp */ function prepareMessageList(&$aMailbox, $aProps) { /* Globalize link attributes so plugins can share in modifying them */ global $link, $title, $target, $onclick, $link_extra, $preselected; /* retrieve the properties */ $my_email_address = isset($aProps['email']) ? $aProps['email'] : false; $highlight_list = isset($aProps['config']['highlight_list']) ? $aProps['config']['highlight_list'] : false; $aColumnDesc = isset($aProps['columns']) ? $aProps['columns'] : false; $aExtraColumns = isset($aProps['extra_columns']) ? $aProps['extra_columns'] : array(); $iAccount = isset($aProps['account']) ? (int) $aProps['account'] : 0; $sMailbox = isset($aProps['mailbox']) ? $aProps['mailbox'] : false; $sTargetModule = isset($aProps['module']) ? $aProps['module'] : 'read_body'; /* * TODO 1, retrieve array with identity email addresses in order to match against to,cc and set a flag * $aFormattedMessages[$iUid]['match_identity'] = true * The template can show some image if there is a match. * TODO 2, makes sure the matching is done fast by doing a strpos call on the returned $value */ /** * Only retrieve values for displayable columns */ foreach ($aColumnDesc as $k => $v) { switch ($k) { case SQM_COL_FROM: $aCol[SQM_COL_FROM] = 'from'; break; case SQM_COL_DATE: $aCol[SQM_COL_DATE] = 'date'; break; case SQM_COL_SUBJ: $aCol[SQM_COL_SUBJ] = 'subject'; break; case SQM_COL_FLAGS: $aCol[SQM_COL_FLAGS] = 'FLAGS'; break; case SQM_COL_SIZE: $aCol[SQM_COL_SIZE] = 'SIZE'; break; case SQM_COL_PRIO: $aCol[SQM_COL_PRIO] = 'x-priority'; break; case SQM_COL_ATTACHMENT: $aCol[SQM_COL_ATTACHMENT] = 'content-type'; break; case SQM_COL_INT_DATE: $aCol[SQM_COL_INT_DATE] = 'INTERNALDATE'; break; case SQM_COL_TO: $aCol[SQM_COL_TO] = 'to'; break; case SQM_COL_CC: $aCol[SQM_COL_CC] = 'cc'; break; case SQM_COL_BCC: $aCol[SQM_COL_BCC] = 'bcc'; break; default: break; } } $aExtraHighLightColumns = array(); foreach ($aExtraColumns as $v) { switch ($v) { case SQM_COL_FROM: $aExtraHighLightColumns[] = 'from'; break; case SQM_COL_SUBJ: $aExtraHighLightColumns[] = 'subject'; break; case SQM_COL_TO: $aExtraHighLightColumns[] = 'to'; break; case SQM_COL_CC: $aExtraHighLightColumns[] = 'cc'; break; case SQM_COL_BCC: $aExtraHighLightColumns[] = 'bcc'; break; default: break; } } $aFormattedMessages = array(); $iSetIndx = $aMailbox['SETINDEX']; $aId = $aMailbox['UIDSET'][$iSetIndx]; $aHeaders =& $aMailbox['MSG_HEADERS']; /* use a reference to avoid a copy. MSG_HEADERS can contain large amounts of data */ $iOffset = $aMailbox['OFFSET']; $sort = $aMailbox['SORT']; $iPageOffset = $aMailbox['PAGEOFFSET']; $sMailbox = $aMailbox['NAME']; $sSearch = isset($aMailbox['SEARCH'][$aMailbox['SETINDEX']]) && $aMailbox['SEARCH'][$aMailbox['SETINDEX']] != 'ALL' ? $aMailbox['SEARCH'][$aMailbox['SETINDEX']] : false; $aSearch = $sSearch ? array('search.php', $aMailbox['SETINDEX']) : null; /* avoid improper usage */ if ($sMailbox && isset($iAccount) && $sTargetModule) { $aInitQuery = array("account={$iAccount}", 'mailbox=' . urlencode($sMailbox)); } else { $aInitQuery = false; } if ($aMailbox['SORT'] & SQSORT_THREAD) { $aIndentArray =& $aMailbox['THREAD_INDENT'][$aMailbox['SETINDEX']]; $bThread = true; } else { $bThread = false; } /* * Retrieve value for checkbox column */ if (!sqgetGlobalVar('checkall', $checkall, SQ_GET)) { $checkall = false; } /* * Loop through and display the info for each message. */ $iEnd = $aMailbox['SHOWALL'][$iSetIndx] ? $aMailbox['EXISTS'] : $iOffset + $aMailbox['LIMIT']; for ($i = $iOffset, $t = 0; $i < $iEnd; ++$i) { if (isset($aId[$i])) { $bHighLight = false; $value = $title = $link = $target = $onclick = $link_extra = ''; $aQuery = $aInitQuery !== false ? $aInitQuery : false; $aMsg = $aHeaders[$aId[$i]]; if (isset($aSearch) && count($aSearch) > 1 && $aQuery) { $aQuery[] = "where=" . $aSearch[0]; $aQuery[] = "what=" . $aSearch[1]; } $iUid = isset($aMsg['UID']) ? $aMsg['UID'] : $aId[$i]; if ($aQuery) { $aQuery[] = "passed_id={$aId[$i]}"; $aQuery[] = "startMessage={$iPageOffset}"; } foreach ($aCol as $k => $v) { $title = $link = $target = $onclick = $link_extra = ''; $aColumns[$k] = array(); $value = isset($aMsg[$v]) ? $aMsg[$v] : ''; $sUnknown = _("Unknown recipient"); switch ($k) { case SQM_COL_FROM: $sUnknown = _("Unknown sender"); case SQM_COL_TO: case SQM_COL_CC: case SQM_COL_BCC: $sTmp = false; if ($value) { if ($highlight_list && !$bHighLight) { $bHighLight = highlightMessage($aCol[$k], $value, $highlight_list, $aFormattedMessages[$iUid]); } $aAddressList = parseRFC822Address($value); $sTmp = getAddressString($aAddressList, array('best' => true)); $title = $title_maybe = ''; foreach ($aAddressList as $aAddr) { $sPersonal = isset($aAddr[SQM_ADDR_PERSONAL]) ? $aAddr[SQM_ADDR_PERSONAL] : ''; $sMailbox = isset($aAddr[SQM_ADDR_MAILBOX]) ? $aAddr[SQM_ADDR_MAILBOX] : ''; $sHost = isset($aAddr[SQM_ADDR_HOST]) ? $aAddr[SQM_ADDR_HOST] : ''; if ($sPersonal) { $title .= sm_encode_html_special_chars($sMailbox . '@' . $sHost) . ', '; } else { // if $value gets truncated we need to add the addresses with no // personal name as well $title_maybe .= sm_encode_html_special_chars($sMailbox . '@' . $sHost) . ', '; } } if ($title) { $title = substr($title, 0, -2); // strip ', '; } $sTmp = decodeHeader($sTmp); if (isset($aColumnDesc[$k]['truncate']) && $aColumnDesc[$k]['truncate']) { $sTrunc = sm_truncate_string($sTmp, $aColumnDesc[$k]['truncate'], '...', TRUE); if ($sTrunc != $sTmp) { if (!$title) { $title = $sTmp; } else { if ($title_maybe) { $title = $title . ', ' . $title_maybe; $title = substr($title, 0, -2); // strip ', '; } } } $sTmp = $sTrunc; } } $value = $sTmp ? substr($sTmp, 0, 6) == '"' && substr($sTmp, -6) == '"' ? substr(substr($sTmp, 0, -6), 6) : $sTmp : $sUnknown; break; case SQM_COL_SUBJ: // subject is mime encoded, decode it. // value is sanitized in decoding function. // TODO, verify if it should be done before or after the highlighting $value = decodeHeader($value); if ($highlight_list && !$bHighLight) { $bHighLight = highlightMessage('SUBJECT', $value, $highlight_list, $aFormattedMessages[$iUid]); } $iIndent = isset($aIndentArray[$aId[$i]]) ? $aIndentArray[$aId[$i]] : 0; // FIXME: don't break 8bit symbols and html entities during truncation if (isset($aColumnDesc[$k]['truncate']) && $aColumnDesc[$k]['truncate']) { $sTmp = sm_truncate_string($value, $aColumnDesc[$k]['truncate'] - $iIndent, '...', TRUE); // drop any double spaces since these will be displayed in the title // Nah, it's nice to always have a roll-over //$title = ($sTmp != $value) ? preg_replace('/\s{2,}/', ' ', $value) : ''; $title = preg_replace('/\\s{2,}/', ' ', $value); $value = $sTmp; } /* generate the link to the message */ if ($aQuery) { // TODO, $sTargetModule should be a query parameter so that we can use a single entrypoint $link = $sTargetModule . '.php?' . implode('&', $aQuery); // see top of this function for which attributes are available // in the global scope for plugin use (like $link, $target, // $onclick, $link_extra, $title, and so forth) // plugins are responsible for sharing nicely (such as for // setting the target, etc) $temp = array(&$iPageOffset, &$sSearch, &$aSearch, $aMsg); do_hook('subject_link', $temp); } $value = trim($value) ? $value : _("(no subject)"); /* add thread indentation */ $aColumns[$k]['indent'] = $iIndent; break; case SQM_COL_SIZE: $value = show_readable_size($value); break; case SQM_COL_DATE: case SQM_COL_INT_DATE: $value = getTimeStamp(explode(' ', trim($value))); $title = getDateString($value, TRUE); $value = getDateString($value); break; case SQM_COL_FLAGS: $aFlagColumn = array('seen' => false, 'deleted' => false, 'answered' => false, 'forwarded' => false, 'flagged' => false, 'draft' => false); if (!is_array($value)) { $value = array(); } foreach ($value as $sFlag => $v) { switch ($sFlag) { case '\\seen': $aFlagColumn['seen'] = true; break; case '\\deleted': $aFlagColumn['deleted'] = true; break; case '\\answered': $aFlagColumn['answered'] = true; break; case '$forwarded': $aFlagColumn['forwarded'] = true; break; case '\\flagged': $aFlagColumn['flagged'] = true; break; case '\\draft': $aFlagColumn['draft'] = true; break; default: break; } } $value = $aFlagColumn; break; case SQM_COL_PRIO: $value = $value ? (int) $value : 3; break; case SQM_COL_ATTACHMENT: $value = is_array($value) && $value[0] == 'multipart' && $value[1] == 'mixed' ? true : false; break; case SQM_COL_CHECK: $value = $checkall || in_array($iUid, $preselected); break; default: break; } if ($title) { $aColumns[$k]['title'] = $title; } if ($link) { $aColumns[$k]['link'] = $link; } if ($link_extra) { $aColumns[$k]['link_extra'] = $link_extra; } if ($onclick) { $aColumns[$k]['onclick'] = $onclick; } if ($target) { $aColumns[$k]['target'] = $target; } $aColumns[$k]['value'] = $value; } /* columns which will not be displayed but should be inspected because the highlight list contains rules with those columns */ foreach ($aExtraHighLightColumns as $v) { if ($highlight_list && !$bHighLight && isset($aMsg[$v])) { $bHighLight = highlightMessage($v, $aMsg[$v], $highlight_list, $aFormattedMessages[$iUid]); } } $aFormattedMessages[$iUid]['columns'] = $aColumns; } else { break; } } return $aFormattedMessages; }
/** * Retrieves a list with headers, flags, size or internaldate from the imap server */ function sqimap_get_small_header_list($imap_stream, $msg_list, $show_num = false) { global $squirrelmail_language, $color, $data_dir, $username, $imap_server_type; global $uid_support, $allow_server_sort; /* Get the small headers for each message in $msg_list */ $maxmsg = sizeof($msg_list); if ($show_num != '999999') { $msgs_str = sqimap_message_list_squisher($msg_list); } else { $msgs_str = '1:*'; } $messages = array(); $read_list = array(); /* * We need to return the data in the same order as the caller supplied * in $msg_list, but IMAP servers are free to return responses in * whatever order they wish... So we need to re-sort manually */ for ($i = 0; $i < sizeof($msg_list); $i++) { $messages["{$msg_list[$i]}"] = array(); } $internaldate = getPref($data_dir, $username, 'internal_date_sort', SMPREF_ON); if ($internaldate) { $query = "FETCH {$msgs_str} (FLAGS UID RFC822.SIZE INTERNALDATE BODY.PEEK[HEADER.FIELDS (Date To Cc From Subject X-Priority Importance Priority Content-Type)])"; } else { $query = "FETCH {$msgs_str} (FLAGS UID RFC822.SIZE BODY.PEEK[HEADER.FIELDS (Date To Cc From Subject X-Priority Importance Priority Content-Type)])"; } $read_list = sqimap_run_command_list($imap_stream, $query, true, $response, $message, $uid_support); $i = 0; foreach ($read_list as $r) { /* initialize/reset vars */ $subject = _("(no subject)"); $from = _("Unknown Sender"); $priority = 0; $messageid = '<>'; $type = array('', ''); $cc = $to = $inrepto = ''; $size = 0; // use unset because we do isset below unset($date); $flag_seen = $flag_answered = $flag_deleted = $flag_flagged = false; $read = implode('', $r); /* * #id<space>FETCH<space>( */ /* extract the message id */ $i_space = strpos($read, ' ', 2); $id = substr($read, 2, $i_space - 2); $fetch = substr($read, $i_space + 1, 5); if (!is_numeric($id) && $fetch !== 'FETCH') { set_up_language($squirrelmail_language); echo '<br /><b><font color="' . $color[2] . '">' . _("ERROR: Could not complete request.") . '</b><br />' . _("Unknown response from IMAP server:") . ' 1.' . htmlspecialchars($read) . "</font><br />\n"; break; } $i = strpos($read, '(', $i_space + 5); $read = substr($read, $i + 1); $i_len = strlen($read); $i = 0; while ($i < $i_len && $i !== false) { /* get argument */ $read = trim(substr($read, $i)); $i_len = strlen($read); $i = strpos($read, ' '); $arg = substr($read, 0, $i); ++$i; switch ($arg) { case 'UID': $i_pos = strpos($read, ' ', $i); if (!$i_pos) { $i_pos = strpos($read, ')', $i); } if ($i_pos) { $unique_id = substr($read, $i, $i_pos - $i); $i = $i_pos + 1; } else { break 3; } break; case 'FLAGS': $flags = parseArray($read, $i); if (!$flags) { break 3; } foreach ($flags as $flag) { $flag = strtolower($flag); switch ($flag) { case '\\seen': $flag_seen = true; break; case '\\answered': $flag_answered = true; break; case '\\deleted': $flag_deleted = true; break; case '\\flagged': $flag_flagged = true; break; default: break; } } break; case 'RFC822.SIZE': $i_pos = strpos($read, ' ', $i); if (!$i_pos) { $i_pos = strpos($read, ')', $i); } if ($i_pos) { $size = substr($read, $i, $i_pos - $i); $i = $i_pos + 1; } else { break 3; } break; case 'INTERNALDATE': $date = parseString($read, $i); //if ($tmpdate === false) break 3; //$tmpdate = str_replace(' ',' ',$tmpdate); //$tmpdate = explode(' ',$tmpdate); //$date = str_replace('-',' ',$tmpdate[0]) . " " . // $tmpdate[1] . ' ' . $tmpdate[2]; break; case 'BODY.PEEK[HEADER.FIELDS': case 'BODY[HEADER.FIELDS': $i = strpos($read, '{', $i); $header = parseString($read, $i); if ($header === false) { break 2; } /* First we replace all \r\n by \n, and unfold the header */ $hdr = trim(str_replace(array("\r\n", "\n\t", "\n "), array("\n", ' ', ' '), $header)); /* Now we can make a new header array with */ /* each element representing a headerline */ $hdr = explode("\n", $hdr); foreach ($hdr as $line) { $pos = strpos($line, ':'); if ($pos > 0) { $field = strtolower(substr($line, 0, $pos)); if (!strstr($field, ' ')) { /* valid field */ $value = trim(substr($line, $pos + 1)); switch ($field) { case 'to': $to = $value; break; case 'cc': $cc = $value; break; case 'from': $from = $value; break; case 'date': $date = $value; break; case 'x-priority': case 'importance': case 'priority': $priority = parsePriority($value); break; case 'subject': $subject = $value; if ($subject == "") { $subject = _("(no subject)"); } break; case 'content-type': $type = strtolower($value); if ($pos = strpos($type, ";")) { $type = substr($type, 0, $pos); } $type = explode("/", $type); if (empty($type[0])) { $type[0] = 'text'; // I had this added, but not committed to CVS.... did it help fix something? // $type[1] = 'plain'; } if (empty($type[1])) { $type[1] = 'plain'; } break; default: break; } } } } break; default: ++$i; break; } } if (isset($date)) { $date = str_replace(' ', ' ', $date); $tmpdate = explode(' ', trim($date)); } else { $tmpdate = $date = array(); } if ($uid_support) { $msgi = "{$unique_id}"; $messages[$msgi]['ID'] = $unique_id; } else { $msgi = "{$id}"; $messages[$msgi]['ID'] = $id; } $messages[$msgi]['TIME_STAMP'] = getTimeStamp($tmpdate); $messages[$msgi]['DATE_STRING'] = getDateString($messages[$msgi]['TIME_STAMP']); $messages[$msgi]['FROM'] = $from; //parseAddress($from); $messages[$msgi]['SUBJECT'] = $subject; // if (handleAsSent($mailbox)) { $messages[$msgi]['TO'] = $to; //parseAddress($to); // } $messages[$msgi]['PRIORITY'] = $priority; $messages[$msgi]['CC'] = $cc; //parseAddress($cc); $messages[$msgi]['SIZE'] = $size; $messages[$msgi]['TYPE0'] = $type[0]; $messages[$msgi]['TYPE1'] = $type[1]; $messages[$msgi]['FLAG_DELETED'] = $flag_deleted; $messages[$msgi]['FLAG_ANSWERED'] = $flag_answered; $messages[$msgi]['FLAG_SEEN'] = $flag_seen; $messages[$msgi]['FLAG_FLAGGED'] = $flag_flagged; /* non server sort stuff */ if (!$allow_server_sort) { $from = parseAddress($from); if ($from[0][1]) { $from = decodeHeader($from[0][1], true, false); } else { $from = $from[0][0]; } $messages[$msgi]['FROM-SORT'] = $from; $subject_sort = strtolower(decodeHeader($subject, true, false)); if (preg_match("/^(?:(?:vedr|sv|re|aw|fw|fwd|\\[\\w\\]):\\s*)*\\s*(.*)\$/si", $subject_sort, $matches)) { $messages[$msgi]['SUBJECT-SORT'] = $matches[1]; } else { $messages[$msgi]['SUBJECT-SORT'] = $subject_sort; } } ++$msgi; } array_reverse($messages); $new_messages = array(); foreach ($messages as $i => $message) { $new_messages[] = $message; } return $new_messages; }
$tagIds = [$tag['_id']]; $tagPostsCollection = collection('Blog Posts'); $tagPostCount = $tagPostsCollection->count(function ($post) use($tagIds) { return count(array_intersect($tagIds, $post['tags'])) === count($tagIds) && isset($post['published']) && $post['published'] == true; }); $tagPageCount = ceil($tagPostCount / $blogPostsPerPage); for ($tagPageId = 1; $tagPageId <= $tagPageCount; $tagPageId++) { $pages[] = ['loc' => 'blog/tag/' . $tag['name_slug'] . '/' . $tagPageId, 'lastmod' => getDateString($lastBlogModified), 'changefreq' => 'weekly', 'priority' => 0.5]; } } $pages[] = ['loc' => 'blog', 'lastmod' => getDateString($lastBlogModified), 'changefreq' => 'monthly', 'priority' => 0.75]; /* ##### PROJECTS ##### */ $lastProjectModified = 0; $projects = collection('Projects')->find(["published" => true])->toArray(); foreach ($projects as $project) { $pages[] = ['loc' => 'projects/' . $project['name_slug'], 'lastmod' => getDateString($project['modified']), 'changefreq' => 'weekly', 'priority' => 0.85]; if ($project['modified'] > $lastProjectModified) { $lastProjectModified = $project['modified']; } } $pages[] = ['loc' => 'projects', 'lastmod' => getDateString($lastProjectModified), 'changefreq' => 'weekly', 'priority' => 0.75]; /* ##### PRINT OUTS ##### */ foreach ($pages as $page) { echo " <url>\n"; echo " <loc>" . $url . $page['loc'] . "</loc>\n"; echo " <lastmod>" . $page['lastmod'] . "</lastmod>\n"; echo " <changefreq>" . $page['changefreq'] . "</changefreq>\n"; echo " <priority>" . $page['priority'] . "</priority>\n"; echo " </url>\n"; } echo '</urlset>';
echo "\n"; echo "if(DATA.currentEvent) DATA.currentEvent = new Event(DATA.currentEvent);"; //For readability echo "\n";*/ //. echo "DATA.activities = createActivitiesArray(" . json_encode($activities) . ");"; /*echo "\n"; echo "DATA.completed = createEventsArray(".json_encode($completed).");"; */ //Data Format //Array (('id'=>'1', 'name'=>'exercise', 'goal'=>3600 duration'=>600), ...) echo "DATA.data = [];"; echo "DATA.days = [];"; //Get the graph data for ($dayOffset = -6; $dayOffset < 1; $dayOffset++) { echo "DATA.data.push(" . json_encode($db->getData(getDateString($dayOffset))) . "); \n"; echo "DATA.days.push('" . getDayInitialFormattedString($dayOffset) . "'); \n"; } ?> console.log(DATA); //Document Ready $(document).ready(function(){ //Setup setUpLife(DATA); }); </script> <div class="navbar navbar-fixed-top"> <div class="navbar-inner">