/** * Send a message to a user */ function post_message($user, $from, $to, $cc, $subject, $body, $priority, $replyto_hash = '') { global $smarty, $userlib, $prefs; $subject = strip_tags($subject); $body = strip_tags($body, '<a><b><img><i>'); // Prevent duplicates $hash = md5($subject . $body); if ($this->getOne("select count(*) from `messu_messages` where `user`=? and `user_from`=? and `hash`=?", array($user, $from, $hash))) { return false; } $query = "insert into `messu_messages`(`user`,`user_from`,`user_to`,`user_cc`,`subject`,`body`,`date`,`isRead`,`isReplied`,`isFlagged`,`priority`,`hash`,`replyto_hash`) values(?,?,?,?,?,?,?,?,?,?,?,?,?)"; $this->query($query, array($user, $from, $to, $cc, $subject, $body, (int) $this->now, 'n', 'n', 'n', (int) $priority, $hash, $replyto_hash)); // Now check if the user should be notified by email $foo = parse_url($_SERVER["REQUEST_URI"]); $machine = $this->httpPrefix() . $foo["path"]; $machine = str_replace('messu-compose', 'messu-mailbox', $machine); if ($this->get_user_preference($user, 'minPrio', 6) <= $priority) { if (!isset($_SERVER["SERVER_NAME"])) { $_SERVER["SERVER_NAME"] = $_SERVER["HTTP_HOST"]; } $email = $userlib->get_user_email($user); if ($email) { include_once 'lib/webmail/tikimaillib.php'; $smarty->assign('mail_site', $_SERVER["SERVER_NAME"]); $smarty->assign('mail_machine', $machine); $smarty->assign('mail_date', $this->now); $smarty->assign('mail_user', stripslashes($user)); $smarty->assign('mail_from', stripslashes($from)); $smarty->assign('mail_subject', stripslashes($subject)); $smarty->assign('mail_body', stripslashes($body)); $mail = new TikiMail($user); $lg = $this->get_user_preference($user, 'language', $prefs['site_language']); $s = $smarty->fetchLang($lg, 'mail/messu_message_notification_subject.tpl'); $mail->setSubject(sprintf($s, $_SERVER["SERVER_NAME"])); $mail_data = $smarty->fetchLang($lg, 'mail/messu_message_notification.tpl'); $mail->setText($mail_data); if ($userlib->get_user_preference($from, 'email is public', 'n') == 'y') { $prefs['sender_email'] = $userlib->get_user_email($from); } if (strlen($prefs['sender_email']) > 1) { $mail->setHeader("Reply-To", $prefs['sender_email']); $mail->setHeader("From", $prefs['sender_email']); } if (!$mail->send(array($email), 'mail')) { return false; } //TODO echo $mail->errors; } } return true; }
function payment_behavior_cart_send_confirm_email($u, $email_template_ids = array()) { global $prefs, $smarty, $userlib; require_once 'lib/webmail/tikimaillib.php'; $email = $userlib->get_user_email($u); if (!$email) { return false; } $smarty->assign("email_template_ids", $email_template_ids); $mail_subject = $smarty->fetch('mail/cart_order_received_reg_subject.tpl'); $mail_data = $smarty->fetch('mail/cart_order_received_reg.tpl'); $mail = new TikiMail(); $mail->setSubject($mail_subject); if ($mail_data == strip_tags($mail_data)) { $mail->setText($mail_data); } else { $mail->setHtml($mail_data); } $mail->setHeader("From", $prefs['sender_email']); $mail->send($email); return true; }
function wikiplugin_tracker($data, $params) { global $tikilib, $userlib, $dbTiki, $user, $group, $page, $tiki_p_admin_trackers, $smarty, $prefs, $trklib, $tiki_p_view; static $iTRACKER = 0; ++$iTRACKER; include_once 'lib/trackers/trackerlib.php'; //var_dump($_REQUEST); extract($params, EXTR_SKIP); if ($prefs['feature_trackers'] != 'y') { return $smarty->fetch("wiki-plugins/error_tracker.tpl"); } if (empty($trackerId) || !($tracker = $trklib->get_tracker($trackerId))) { return $smarty->fetch("wiki-plugins/error_tracker.tpl"); } if ($t = $trklib->get_tracker_options($trackerId)) { $tracker = array_merge($tracker, $t); } if (empty($trackerId) && !empty($view) && $view == 'user' && $prefs['userTracker'] == 'y') { // the user tracker item $utid = $userlib->get_tracker_usergroup($user); if (!empty($utid) && !empty($utid['usersTrackerId'])) { $itemId = $trklib->get_item_id($utid['usersTrackerId'], $utid['usersFieldId'], $user); $trackerId = $utid['usersTrackerId']; $usertracker = true; } } elseif (!empty($trackerId) && !empty($view) && $view == 'user') { // the user item of a tracker $itemId = $trklib->get_user_item($trackerId, $tracker); $usertracker = true; } elseif (!empty($trackerId) && !empty($view) && $view == 'page' && !empty($_REQUEST['page']) && ($f = $trklib->get_field_id_from_type($trackerId, 'k', '1%'))) { // the page item $itemId = $trklib->get_item_id($trackerId, $f, $_REQUEST['page']); } elseif (!empty($trackerId) && !empty($_REQUEST['view_user'])) { $itemId = $trklib->get_user_item($trackerId, $tracker, $_REQUEST['view_user']); } elseif (!empty($_REQUEST['itemId'])) { $itemId = $_REQUEST['itemId']; $item = $trklib->get_tracker_item($itemId); $trackerId = $item['trackerId']; } elseif (!empty($view) && $view == 'group') { $gtid = $userlib->get_grouptrackerid($group); if (isset($gtid['groupTrackerId'])) { $trackerId = $gtid['groupTrackerId']; $itemId = $trklib->get_item_id($trackerId, $gtid['groupFieldId'], $group); $grouptracker = true; } } if (!isset($trackerId)) { return $smarty->fetch("wiki-plugins/error_tracker.tpl"); } if (!isset($embedded)) { $embedded = "n"; } if (!isset($showtitle)) { $showtitle = "n"; } if (!isset($showdesc)) { $showdesc = "n"; } if (!isset($sort)) { $sort = 'n'; } if (!isset($action)) { $action = 'Save'; } if (isset($preview)) { if (empty($preview)) { $preview = 'Preview'; } } else { unset($_REQUEST['tr_preview']); } if (!isset($showmandatory)) { $showmandatory = 'y'; } $smarty->assign('showmandatory', $showmandatory); if (!empty($wiki)) { $wiki = trim($wiki); } if (isset($values)) { if (!is_array($values)) { $values = $tikilib->quotesplit(':', $values); foreach ($values as $i => $v) { $values[$i] = preg_replace('/^"(.*)"$/', '$1', $v); } } } if (isset($_REQUEST['values'])) { if (is_array($_REQUEST['values'])) { foreach ($_REQUEST['values'] as $i => $k) { $_REQUEST['values'][$i] = urldecode($k); } } else { $_REQUEST['values'] = urldecode($_REQUEST['values']); } } if (empty($_SERVER['SCRIPT_NAME']) || !strstr($_SERVER['SCRIPT_NAME'], 'tiki-register.php')) { if (!empty($itemId) && $tracker['writerCanModify'] == 'y' && isset($usertracker) && $usertracker) { // user tracker he can modify } elseif (!empty($itemId) && $tracker['writerCanModify'] == 'y' && $user && (($itemUser = $trklib->get_item_creator($trackerId, $itemId)) == $user || $tracker['userCanTakeOwnership'] == 'y' && empty($itemUser))) { } elseif (!empty($itemId) && isset($grouptracker) && $grouptracker) { } else { $perms = $tikilib->get_perm_object($trackerId, 'tracker', $tracker, false); if ($perms['tiki_p_create_tracker_items'] == 'n' && empty($itemId)) { return '<b>' . tra("You do not have permission to insert an item") . '</b>'; } elseif (!empty($itemId)) { $item_info = $trklib->get_tracker_item($itemId); if (!(($perms['tiki_p_modify_tracker_items'] == 'y' and $item_info['status'] != 'p' and $item_info['status'] != 'c') || ($perms['tiki_p_modify_tracker_items_pending'] == 'y' and $item_info['status'] == 'p') || ($perms['tiki_p_modify_tracker_items_closed'] == 'y' and $item_info['status'] == 'c'))) { if ($tracker['writerGroupCanModify'] == 'y' && in_array($trklib->get_item_group_creator($trackerId, $itemId), $tikilib->get_user_groups($user))) { global $group; $smarty->assign_by_ref('ours', $group); } else { return '<b>' . tra("You do not have permission to modify an item") . '</b>'; } } } } } if (isset($_REQUEST['removeattach']) && $tracker['useAttachments'] == 'y') { $owner = $trklib->get_item_attachment_owner($_REQUEST['removeattach']); if ($perms['tiki_p_admin_trackers'] == 'y' || $user && $user == $owner) { $trklib->remove_item_attachment($_REQUEST["removeattach"]); unset($_REQUEST['removeattach']); } } if (isset($_REQUEST['removeImage']) && !empty($_REQUEST['trackerId']) && !empty($_REQUEST['itemId']) && !empty($_REQUEST['fieldId']) && !empty($_REQUEST['fieldName'])) { $img_field = array('data' => array()); $img_field['data'][] = array('fieldId' => $_REQUEST['fieldId'], 'type' => 'i', 'name' => $_REQUEST['fieldName'], 'value' => 'blank'); $trklib->replace_item($_REQUEST['trackerId'], $_REQUEST['itemId'], $img_field); } $back = ''; $js = ''; $thisIsThePlugin = isset($_REQUEST['iTRACKER']) && $_REQUEST['iTRACKER'] == $iTRACKER; if (!isset($_REQUEST["ok"]) || $_REQUEST["ok"] == "n" || !$thisIsThePlugin || isset($_REQUEST['tr_preview'])) { $field_errors = array('err_mandatory' => array(), 'err_value' => array()); global $notificationlib; include_once 'lib/notifications/notificationlib.php'; $tracker = $trklib->get_tracker($trackerId); $tracker = array_merge($tracker, $trklib->get_tracker_options($trackerId)); if (!empty($tracker['start']) && $tikilib->now < $tracker['start'] || !empty($tracker['end']) && $tikilib->now > $tracker['end']) { return; } $flds = $trklib->list_tracker_fields($trackerId, 0, -1, "position_asc", ""); if (empty($fields) && (!empty($wiki) || !empty($tpl))) { if (!empty($wiki)) { $outf = $trklib->get_pretty_fieldIds($wiki, 'wiki'); } else { $outf = $trklib->get_pretty_fieldIds($tpl, 'tpl'); } $ret = array(); foreach ($flds['data'] as $field) { if ($field['type'] == 'q' || $field['type'] == 'k' || $field['type'] == 'u' || $field['type'] == 'g' || in_array($field['fieldId'], $outf)) { $ret[] = $field; } } $flds['cant'] = sizeof($ret); $flds['data'] = $ret; } $bad = array(); $embeddedId = false; $onemandatory = false; $full_fields = array(); $mainfield = ''; if ($thisIsThePlugin) { /* ------------------------------------- Recup all values from REQUEST -------------- */ $cpt = 0; if (isset($fields)) { $fields_plugin = split(':', $fields); } foreach ($flds['data'] as $fl) { // store value to display it later if form // isn't fully filled. if ($flds['data'][$cpt]['type'] == 's' && $flds['data'][$cpt]['name'] == 'Rating') { if (isset($_REQUEST['track'][$fl['fieldId']])) { $newItemRate = $_REQUEST['track'][$fl['fieldId']]; $newItemRateField = $fl['fieldId']; } else { $newItemRate = NULL; } } elseif (($flds['data'][$cpt]['type'] == 'u' || $flds['data'][$cpt]['type'] == 'g' || $flds['data'][$cpt]['type'] == 'I' || $flds['data'][$cpt]['type'] == 'k') && ($flds['data'][$cpt]['options_array'][0] == '1' || $flds['data'][$cpt]['options_array'][0] == '2') && empty($_REQUEST['track'][$fl['fieldId']])) { if (empty($itemId) && ($flds['data'][$cpt]['options_array'][0] == '1' || $flds['data'][$cpt]['options_array'][0] == '2')) { if ($flds['data'][$cpt]['type'] == 'u') { $_REQUEST['track'][$fl['fieldId']] = empty($user) ? empty($_REQUEST['name']) ? '' : $_REQUEST['name'] : $user; } elseif ($flds['data'][$cpt]['type'] == 'g') { $_REQUEST['track'][$fl['fieldId']] = $group; } elseif ($flds['data'][$cpt]['type'] == 'I') { $_REQUEST['track'][$fl['fieldId']] = $tikilib->get_ip_address(); } elseif ($flds['data'][$cpt]['type'] == 'k') { $_REQUEST['track'][$fl['fieldId']] = isset($_REQUEST['page']) ? $_REQUEST['page'] : ''; } } elseif (!empty($itemId) && $flds['data'][$cpt]['options_array'][0] == '2') { if ($flds['data'][$cpt]['type'] == 'u') { $_REQUEST['track'][$fl['fieldId']] = $user; } elseif ($flds['data'][$cpt]['type'] == 'g') { $_REQUEST['track'][$fl['fieldId']] = $group; } elseif ($flds['data'][$cpt]['type'] == 'I') { $_REQUEST['track'][$fl['fieldId']] = $tikilib->get_ip_address(); } } } elseif (($flds['data'][$cpt]['type'] == 'C' || $flds['data'][$cpt]['type'] == 'e') && empty($_REQUEST['track'][$fl['fieldId']])) { $_REQUEST['track'][$fl['fieldId']] = ''; } elseif ($flds['data'][$cpt]['type'] == 'f') { $ins_id = 'track_' . $fl['fieldId']; if (isset($_REQUEST[$ins_id . 'Day'])) { if (empty($_REQUEST['$ins_id' . 'Hour'])) { $_REQUEST['$ins_id' . 'Hour'] = 0; } if (empty($_REQUEST['$ins_id' . 'Minute'])) { $_REQUEST['$ins_id' . 'Minute'] = 0; } $_REQUEST['track'][$fl['fieldId']] = $tikilib->make_time($_REQUEST["{$ins_id}" . "Hour"], $_REQUEST["{$ins_id}" . "Minute"], 0, $_REQUEST["{$ins_id}" . "Month"], $_REQUEST["{$ins_id}" . "Day"], $_REQUEST["{$ins_id}" . "Year"]); } else { $_REQUEST['track'][$fl['fieldId']] = $tikilib->now; } } elseif ($f['type'] == 'N' && !empty($itemId)) { if (empty($itemUser)) { $itemUser = $this->get_item_creator($trackerId, $itemId); } $flds['data'][$i]['value'] = $trklib->in_group_value($flds['data'][$i], $itemUser); } if (isset($_REQUEST['ins_cat_' . $fl['fieldId']])) { // to remember if error $_REQUEST['track'][$fl['fieldId']] = $_REQUEST['ins_cat_' . $fl['fieldId']]; } if (isset($_REQUEST['track'][$fl['fieldId']])) { $flds['data'][$cpt]['value'] = $_REQUEST['track'][$fl['fieldId']]; } else { $flds['data'][$cpt]['value'] = ''; if ($fl['type'] == 'c') { $_REQUEST['track'][$fl['fieldId']] = 'n'; } elseif ($fl['type'] == 'R' && $fl['isMandatory'] == 'y') { // if none radio is selected, there will be no value and no error if mandatory $_REQUEST['track'][$fl['fieldId']] = ''; } } if (!empty($_REQUEST['other_track'][$fl['fieldId']])) { $flds['data'][$cpt]['value'] = $_REQUEST['other_track'][$fl['fieldId']]; } if ($flds['data'][$cpt]['isMultilingual'] == 'y') { foreach ($prefs['available_languages'] as $num => $tmplang) { if (isset($_REQUEST['track'][$fl['fieldId']][$tmplang])) { $fl['lingualvalue'][$num]['value'] = $_REQUEST['track'][$fl['fieldId']][$tmplang]; $fl['lingualvalue'][$num]['lang'] = $tmplang; } } } $full_fields[$fl['fieldId']] = $fl; if ($embedded == 'y' and $fl['name'] == 'page') { $embeddedId = $fl['fieldId']; } if ($fl['isMain'] == 'y') { $mainfield = $flds['data'][$cpt]['value']; } $cpt++; } /*foreach */ if (isset($_REQUEST['track'])) { foreach ($_REQUEST['track'] as $fld => $val) { //$ins_fields["data"][] = array('fieldId' => $fld, 'value' => $val, 'type' => 1); if (!empty($_REQUEST['other_track'][$fld])) { $val = $_REQUEST['other_track'][$fld]; } $ins_fields["data"][] = array_merge(array('value' => $val), $full_fields[$fld]); } } if (isset($_FILES['track'])) { // image or attachment fields foreach ($_FILES['track'] as $label => $w) { foreach ($w as $fld => $val) { if ($label == 'tmp_name' && is_uploaded_file($val)) { $fp = fopen($val, 'rb'); $data = ''; while (!feof($fp)) { $data .= fread($fp, 8192 * 16); } fclose($fp); $files[$fld]['old_value'] = $files[$fld]['value']; $files[$fld]['value'] = $data; } else { $files[$fld]['file_' . $label] = $val; } } } foreach ($files as $fld => $file) { $ins_fields['data'][] = array_merge($file, $full_fields[$fld]); } } if ($embedded == 'y' && isset($_REQUEST['page'])) { $ins_fields["data"][] = array('fieldId' => $embeddedId, 'value' => $_REQUEST['page']); } $ins_categs = array(); $categorized_fields = array(); while (list($postVar, $postVal) = each($_REQUEST)) { if (preg_match("/^ins_cat_([0-9]+)/", $postVar, $m)) { foreach ($postVal as $v) { $ins_categs[] = $v; } $categorized_fields[] = $m[1]; } } /* ------------------------------------- End recup all values from REQUEST -------------- */ /* ------------------------------------- Check field values for each type and presence of mandatory ones ------------------- */ $field_errors = $trklib->check_field_values($ins_fields, $categorized_fields); if (empty($user) && $prefs['feature_antibot'] == 'y' && !$_SESSION['in_tracker']) { // in_tracker session var checking is for tiki-register.php if (!isset($_SESSION['random_number']) || $_SESSION['random_number'] != $_REQUEST['antibotcode']) { $field_errors['err_antibot'] = 'y'; } } if (count($field_errors['err_mandatory']) == 0 && count($field_errors['err_value']) == 0 && empty($field_errors['err_antibot']) && !isset($_REQUEST['tr_preview'])) { /* ------------------------------------- save the item ---------------------------------- */ if (!isset($itemId) && $tracker['oneUserItem'] == 'y') { $itemId = $trklib->get_user_item($trackerId, $tracker); } if (isset($_REQUEST['status'])) { $status = $_REQUEST['status']; } elseif (isset($newstatus) && ($newstatus == 'o' || $newstatus == 'c' || $newstatus == 'p')) { $status = $newstatus; } elseif (empty($itemId) && isset($tracker['newItemStatus'])) { $status = $tracker['newItemStatus']; } else { $status = ''; } $rid = $trklib->replace_item($trackerId, $itemId, $ins_fields, $status, $ins_categs); $trklib->categorized_item($trackerId, $rid, $mainfield, $ins_categs); if (isset($newItemRate)) { $trklib->replace_rating($trackerId, $rid, $newItemRateField, $user, $newItemRate); } if (!empty($email)) { $emailOptions = split("\\|", $email); if (is_numeric($emailOptions[0])) { $emailOptions[0] = $trklib->get_item_value($trackerId, $rid, $emailOptions[0]); } if (empty($emailOptions[0])) { // from $emailOptions[0] = $prefs['sender_email']; } if (empty($emailOptions[1])) { // to $emailOptions[1][0] = $prefs['sender_email']; } else { $emailOptions[1] = split(',', $emailOptions[1]); foreach ($emailOptions[1] as $key => $email) { if (is_numeric($email)) { $emailOptions[1][$key] = $trklib->get_item_value($trackerId, $rid, $email); } } } if (!empty($emailOptions[2])) { //tpl if (!preg_match('/\\.tpl$/', $emailOptions[2])) { $emailOptions[2] .= '.tpl'; } $tplSubject = str_replace('.tpl', '_subject.tpl', $emailOptions[2]); } else { $emailOptions[2] = 'tracker_changed_notification.tpl'; } if (empty($tplSubject)) { $tplSubject = 'tracker_changed_notification_subject.tpl'; } include_once 'lib/webmail/tikimaillib.php'; $mail = new TikiMail(); @($mail_data = $smarty->fetch('mail/' . $tplSubject)); if (empty($mail_data)) { $mail_data = tra('Tracker was modified at ') . $_SERVER["SERVER_NAME"]; } $mail->setSubject($mail_data); $mail_data = $smarty->fetch('mail/' . $emailOptions[2]); $mail->setText($mail_data); $mail->setHeader('From', $emailOptions[0]); $mail->send($emailOptions[1]); } if (empty($url)) { if (!empty($page)) { $url = "tiki-index.php?page=" . urlencode($page) . "&ok=y&iTRACKER={$iTRACKER}"; $url .= "#wikiplugin_tracker{$iTRACKER}"; header("Location: {$url}"); die; } else { return ''; } } else { if (strstr($url, 'itemId')) { $url = str_replace('itemId', 'itemId=' . $rid, $url); } header("Location: {$url}"); die; } /* ------------------------------------- end save the item ---------------------------------- */ } elseif (isset($_REQUEST['trackit']) and $_REQUEST['trackit'] == $trackerId) { $smarty->assign('wikiplugin_tracker', $trackerId); //used in vote plugin } } else { if (empty($itemId) && !empty($values) || (!empty($_REQUEST['values']) and empty($_REQUEST['prefills']))) { // assign default values for each filedId specify if (empty($values)) { // url with values[]=x&values[] witouth the list of fields $values = $_REQUEST['values']; } if (!is_array($values)) { $values = array($values); } if (isset($fields)) { $fl = split(':', $fields); for ($j = 0, $count_fl = count($fl); $j < $count_fl; $j++) { for ($i = 0, $count_flds = count($flds['data']); $i < $count_flds; $i++) { if ($flds['data'][$i]['fieldId'] == $fl[$j]) { $flds['data'][$i]['value'] = $values[$j]; } } } } else { // values contains all the fields value in the default order $i = 0; foreach ($values as $value) { $flds['data'][$i++]['value'] = $value; } } } elseif (!empty($itemId)) { if (isset($fields)) { $fl = split(':', $fields); $filter = ''; foreach ($flds['data'] as $f) { if (in_array($f['fieldId'], $fl)) { $filter[] = $f; } } } else { $filter =& $flds['data']; } if (!empty($filter)) { foreach ($filter as $f) { $filter2[$f['fieldId']] = $f; } $flds['data'] = $trklib->get_item_fields($trackerId, $itemId, $filter2, $itemUser); } } else { if (isset($_REQUEST['values']) && isset($_REQUEST['prefills'])) { //url:prefields=1:2&values[]=x&values[]=y if (!is_array($_REQUEST['values'])) { $_REQUEST['values'] = array($_REQUEST['values']); } $fl = split(':', $_REQUEST['prefills']); } else { unset($fl); } for ($i = 0, $count_flds2 = count($flds['data']); $i < $count_flds2; $i++) { if (isset($fl) && ($j = array_search($flds['data'][$i]['fieldId'], $fl)) !== false) { $flds['data'][$i]['value'] = $_REQUEST['values'][$j]; } else { $flds['data'][$i]['value'] = ''; // initialize fields with blank values } } } } $optional = array(); $outf = array(); if (isset($fields) && !empty($fields)) { $fl = split(":", $fields); if ($sort == 'y') { $flds = $trklib->sort_fields($flds, $fl); } foreach ($fl as $l) { if (substr($l, 0, 1) == '-') { $l = substr($l, 1); $optional[] = $l; } $ok = false; foreach ($flds['data'] as $f) { if ($f['fieldId'] == $l) { $ok = true; break; } } if (!$ok) { $back .= tra('Incorrect fieldId:') . ' ' . $l; } $outf[] = $l; } } elseif (empty($fields) && !empty($wiki)) { $wiki_info = $tikilib->get_page_info($wiki); preg_match_all('/\\$f_([0-9]+)/', $wiki_info['data'], $matches); $outf = $matches[1]; } elseif (empty($fields) && !empty($tpl)) { $f = $smarty->get_filename($tpl); if (!empty($f)) { $f = file_get_contents($f); preg_match_all('/\\$f_([0-9]+)/', $f, $matches); $outf = $matches[1]; } } elseif (empty($fields) && empty($wiki)) { foreach ($flds['data'] as $f) { if ($f['isMandatory'] == 'y') { $optional[] = $f['fieldId']; } $outf[] = $f['fieldId']; } } // Display warnings when needed if (count($field_errors['err_mandatory']) > 0) { $back .= '<div class="simplebox highlight"><img src="pics/icons/exclamation.png" alt=" ' . tra('Error') . '" style="vertical-align:middle" /> '; $back .= tra('Following mandatory fields are missing') . ' :<br/>'; $coma_cpt = count($field_errors['err_mandatory']); foreach ($field_errors['err_mandatory'] as $f) { $back .= $f['name']; $back .= --$coma_cpt > 0 ? ', ' : ''; } $back .= '</div><br />'; $_REQUEST['error'] = 'y'; } if (count($field_errors['err_value']) > 0) { $back .= '<div class="simplebox highlight">'; $b = ''; foreach ($field_errors['err_value'] as $f) { if (!empty($f['errorMsg'])) { $back .= tra($f['errorMsg']) . '<br>'; } else { if (!empty($b)) { $b .= ' : '; } $b .= $f['name']; } } if (!empty($b)) { $back .= tra('Following fields are incorrect') . ' :<br/>' . $b; } $back .= '</div><br />'; $_REQUEST['error'] = 'y'; } if (isset($field_errors['err_antibot'])) { $back .= '<div class="simplebox highlight"><img src="pics/icons/exclamation.png" alt=" ' . tra('Error') . '" style="vertical-align:middle" /> '; $back .= tra('You have mistyped the anti-bot verification code; please try again.'); $back .= '</div><br />'; $_REQUEST['error'] = 'y'; } if (count($field_errors['err_mandatory']) > 0 || count($field_errors['err_value']) > 0 || isset($field_errors['err_antibot'])) { $smarty->assign('input_err', 'y'); } if (!empty($page)) { $back .= '~np~'; } $smarty->assign_by_ref('tiki_p_admin_trackers', $perms['tiki_p_admin_trackers']); $back .= '<form enctype="multipart/form-data" method="post"' . (isset($target) ? ' target="' . $target . '"' : '') . ' action="' . $_SERVER['REQUEST_URI'] . '"><input type="hidden" name="trackit" value="' . $trackerId . '" />'; $back .= '<input type="hidden" name="iTRACKER" value="' . $iTRACKER . '" />'; $back .= '<input type="hidden" name="refresh" value="1" />'; if (isset($_REQUEST['page'])) { $back .= '<input type="hidden" name="page" value="' . $_REQUEST["page"] . '" />'; } // for registration if (isset($_REQUEST['name'])) { $back .= '<input type="hidden" name="name" value="' . $_REQUEST["name"] . '" />'; } if (isset($_REQUEST['pass'])) { $back .= '<input type="hidden" name="pass" value="' . $_REQUEST["pass"] . '" />'; $back .= '<input type="hidden" name="passAgain" value="' . $_REQUEST["pass"] . '" />'; } if (isset($_REQUEST['email'])) { $back .= '<input type="hidden" name="email" value="' . $_REQUEST["email"] . '" />'; } if (isset($_REQUEST['regcode'])) { $back .= '<input type="hidden" name="regcode" value="' . $_REQUEST["regcode"] . '" />'; } if (isset($_REQUEST['chosenGroup'])) { // for registration $back .= '<input type="hidden" name="chosenGroup" value="' . $_REQUEST["chosenGroup"] . '" />'; } if (isset($_REQUEST['register'])) { $back .= '<input type="hidden" name="register" value="' . $_REQUEST["register"] . '" />'; } if ($showtitle == 'y') { $back .= '<div class="titlebar">' . $tracker["name"] . '</div>'; } if ($showdesc == 'y' && $tracker['description']) { if ($tracker['descriptionIsParsed'] == 'y') { $back .= '<div class="wikitext">' . $tikilib->parse_data($tracker['description']) . '</div><br />'; } else { $back .= '<div class="wikitext">' . $tracker["description"] . '</div><br />'; } } if (isset($_REQUEST['tr_preview'])) { // use for the computed and join fields $assocValues = array(); $assocNumerics = array(); foreach ($flds['data'] as $f) { if (empty($f['value']) && ($f['type'] == 'u' || $f['type'] == 'g' || $f['type'] == 'I') && ($f['options_array'][0] == '1' || $f['options_array'][0] == '2')) { //need to fill the selector fields for the join $f['value'] = $f['type'] == 'I' ? $tikilib->get_ip_address() : ($f['type'] == 'g' ? $group : $user); } $assocValues[$f['fieldId']] = $f['value']; $assocNumerics[$f['fieldId']] = preg_replace('/[^0-9\\.\\+]/', '', $f['value']); // get rid off the $ and such unit } } if (!empty($itemId)) { $item = array('itemId' => $itemId, 'trackerId' => $trackerId); } foreach ($flds['data'] as $i => $f) { // collect additional infos if (in_array($f['fieldId'], $outf)) { $flds['data'][$i]['ins_id'] = $f['type'] == 'e' ? 'ins_cat_' . $f['fieldId'] : ($f['type'] == 'f' ? 'track_' . $f['fieldId'] : 'track[' . $f['fieldId'] . ']'); if ($f['isHidden'] == 'c' && !empty($itemId) && !isset($item['creator'])) { $item['creator'] = $trklib->get_item_creator($trackerId, $itemId); } if ($f['type'] == 's' && ($f['name'] == 'Rating' || $f['name'] == tra('Rating')) && $perms['tiki_p_tracker_vote_ratings'] == 'y' && isset($item)) { $item['my_rate'] = $tikilib->get_user_vote("tracker{$trackerId}.{$itemId}", $user); } if ($f['isMultilingual'] == 'y') { $multi_languages = $prefs['available_languages']; foreach ($multi_languages as $num => $tmplang) { $flds['data'][$i]['lingualvalue'][$num]['lang'] = $tmplang; } } if ($f['type'] == 'r') { $flds['data'][$i]['list'] = array_unique($trklib->get_all_items($f['options_array'][0], $f['options_array'][1], 'poc')); if (isset($f['options_array'][3])) { $flds['data'][$i]['displayedList'] = array_unique($trklib->concat_all_items_from_fieldslist($f['options_array'][0], $f['options_array'][3])); } } elseif ($f['type'] == 'y') { $flds['data'][$i]['flags'] = $tikilib->get_flags(); if ($prefs['language'] != 'en') { foreach ($flags as $flag) { $flagsTranslated[] = $tikilib->take_away_accent(tra($flag)); } array_multisort($flagsTranslated, $flds['data'][$i]['flags']); } } elseif ($f['type'] == 'u') { if ($perms['tiki_p_admin_trackers'] == 'y' || $f['options_array'][0] != 1 && $f['options_array'][0] != 2) { $flds['data'][$i]['list'] = $userlib->list_all_users(); } elseif ($f['options_array'][0] == 1) { $flds['data'][$i]['value'] = $user; } } elseif ($f['type'] == 'g') { if ($perms['tiki_p_admin_trackers'] == 'y' || $f['options_array'][0] != 1 && $f['options_array'][0] != 2) { $flds['data'][$i]['list'] = $userlib->list_all_groups(); } elseif ($f['options_array'][0] == 1) { global $group; $flds['data'][$i]['value'] = $group; } } elseif ($f['type'] == 'k') { if ($f['options_array'][0] == 1) { if (isset($page)) { $flds['data'][$i]['value'] = $page; } } } elseif ($f['type'] == 'e') { global $categlib; include_once 'lib/categories/categlib.php'; $flds['data'][$i]['list'] = $categlib->get_viewable_child_categories($f["options_array"][0]); } elseif ($f['type'] == 'A') { if (!empty($f['value'])) { $flds['data'][$i]['info'] = $trklib->get_item_attachment($f['value']); } } elseif ($f['type'] == 'a') { if ($f['options_array'][0] == 1 && empty($toolbars)) { // all in the smarty object now } } elseif ($f['type'] == 'l' && isset($itemId)) { $opts[1] = split(':', $f['options_array'][1]); $finalFields = explode('|', $f['options_array'][3]); $flds['data'][$i]['value'] = $trklib->get_join_values($itemId, array_merge(array($f['options_array'][2]), array($f['options_array'][1]), array($finalFields[0])), $f['options_array'][0], $finalFields); } elseif ($f['type'] == 'w') { $refFieldId = $f['options_array'][2]; foreach ($flds['data'] as $i => $ff) { if ($ff['fieldId'] == $refFieldId) { $refFieldId = $i; } } if (!isset($flds['data'][$refFieldId]['http_request'])) { $flds['data'][$refFieldId]['http_request'] = array('', '', '', '', '', '', '', '', ''); } for ($i = 0; $i < 5; $i++) { $flds['data'][$refFieldId]['http_request'][$i] .= ($flds['data'][$refFieldId]['http_request'][$i] ? "," : "") . isset($f['options_array'][$i]) ? $f['options_array'][$i] : ''; } $flds['data'][$refFieldId]['http_request'][5] .= ($flds['data'][$refFieldId]['http_request'][5] ? "," : "") . $f['fieldId']; $flds['data'][$refFieldId]['http_request'][6] .= ($flds['data'][$refFieldId]['http_request'][6] ? "," : "") . $f['isMandatory']; $flds['data'][$refFieldId]['http_request'][7] .= $flds['data'][$refFieldId]['value']; $flds['data'][$refFieldId]['http_request'][8] .= ($flds['data'][$refFieldId]['http_request'][8] ? "," : "") . $f['value']; } } } // Loop on tracker fields and display form if (empty($tpl) && empty($wiki)) { $back .= '<table class="wikiplugin_tracker">'; } else { $back .= '<div class="wikiplugin_tracker">'; } $backLength0 = strlen($back); foreach ($flds['data'] as $f) { if ($f['type'] == 'u' and $f['options_array'][0] == '1') { $back .= '<input type="hidden" name="authorfieldid" value="' . $f['fieldId'] . '" />'; } if ($f['type'] == 'I' and $f['options_array'][0] == '1') { $back .= '<input type="hidden" name="authoripid" value="' . $f['fieldId'] . '" />'; } if ($f['type'] == 'g' and $f['options_array'][0] == '1') { $back .= '<input type="hidden" name="authorgroupfieldid" value="' . $f['fieldId'] . '" />'; } if ($f['type'] == 'q') { $back .= '<input type="hidden" name="track[' . $f['fieldId'] . ']" />'; } if (in_array($f['fieldId'], $outf)) { if ($showmandatory == 'y' and $f['isMandatory'] == 'y') { $onemandatory = true; } if (!empty($tpl) || !empty($wiki)) { $smarty->assign_by_ref('field_value', $f); $smarty->assign('showmandatory', $showmandatory); if (isset($item)) { $smarty->assign_by_ref('item', $item); } $smarty->assign('f_' . $f['fieldId'], $smarty->fetch('tracker_item_field_input.tpl')); } else { if (in_array($f['fieldId'], $optional)) { $f['name'] = "<i>" . $f['name'] . "</i>"; } if ($f['type'] != 'h') { $back .= "<tr><td"; if (!empty($colwidth)) { $back .= " width='" . $colwidth . "'"; } $back .= ">" . wikiplugin_tracker_name($f['fieldId'], $f['name'], $field_errors); if ($showmandatory == 'y' and $f['isMandatory'] == 'y') { $back .= " <strong class='mandatory_star'>*</strong> "; } $back .= "</td><td>"; } else { $back .= "<tr><th colspan='2'>" . wikiplugin_tracker_name($f['fieldId'], $f['name'], $field_errors); } $smarty->assign_by_ref('field_value', $f); if (isset($item)) { $smarty->assign_by_ref('item', $item); } $back .= $smarty->fetch('tracker_item_field_input.tpl'); } if (!empty($f['description']) && $f['type'] != 'h' && $f['type'] != 'S') { $back .= '<br />'; if ($f['descriptionIsParsed'] == 'y') { $back .= $tikilib->parse_data($f['description']); } else { $back .= '<i>' . $f['description'] . '</i>'; } } if (empty($tpl) && empty($wiki)) { if ($f['type'] != 'h') { $back .= "</td></tr>"; } else { $back .= "</th></tr>"; } } if (!empty($f['http_request']) && !empty($itemId)) { $js .= 'selectValues("trackerIdList=' . $f['http_request'][0] . '&fieldlist=' . $f['http_request'][3] . '&filterfield=' . $f['http_request'][1] . '&status=' . $f['http_request'][4] . '&mandatory=' . $f['http_request'][6] . '&filtervalue=' . $f['http_request'][7] . '&selected=' . $f['http_request'][8] . '","' . $f['http_request'][5] . '");'; } } } if (!empty($tpl)) { $smarty->security = true; $back .= $smarty->fetch($tpl); } elseif (!empty($wiki)) { $smarty->security = true; $back .= $smarty->fetch('wiki:' . $wiki); } if ($prefs['feature_antibot'] == 'y' && empty($user) && !$_SESSION['in_tracker']) { // in_tracker session var checking is for tiki-register.php $back .= $smarty->fetch('antibot.tpl'); } if (empty($tpl) && empty($wiki)) { $back .= "<tr><td></td><td>"; } if (!empty($preview)) { $back .= "<input type='submit' name='tr_preview' value='" . tra($preview) . "' />"; } $back .= "<input type='submit' name='action' value='" . tra($action) . "' />"; if ($showmandatory == 'y' and $onemandatory) { $back .= "<em class='mandatory_note'>" . tra("Fields marked with a * are mandatory.") . "</em>"; } if (empty($tpl) && empty($wiki)) { $back .= "</td></tr>"; $back .= "</table>"; } else { $back .= '</div>'; } $back .= '</form>'; if (!empty($js)) { $back .= '<script type="text/javascript">' . $js . '</script>'; } if (!empty($page)) { $back .= '~/np~'; } $smarty->assign_by_ref('tiki_p_admin_trackers', $tiki_p_admin_trackers); return $back; } else { if (isset($_REQUEST['trackit']) and $_REQUEST['trackit'] == $trackerId) { $smarty->assign('wikiplugin_tracker', $trackerId); } //used in vote plugin $id = ' id="wikiplugin_tracker' . $iTRACKER . '"'; if ($showtitle == 'y') { $back .= '<div class="titlebar"' . $id . '>' . $tracker["name"] . '</div>'; $id = ''; } if ($showdesc == 'y') { $back .= '<div class="wikitext"' . $id . '>' . $tracker["description"] . '</div><br />'; $id = ''; } $back .= "<div{$id}>" . $data . '</div>'; return $back; } }
function remove_tracker_item($itemId) { global $user; $query = "select * from `tiki_tracker_items` where `itemId`=?"; $result = $this->query($query, array((int) $itemId)); $res = $result->fetchRow(); $trackerId = $res['trackerId']; $status = $res['status']; // ---- save image list before sql query --------------------------------- $fieldList = $this->list_tracker_fields($trackerId, 0, -1, 'name_asc', ''); $imgList = array(); foreach ($fieldList['data'] as $f) { if ($f['type'] == 'i') { $imgList[] = $this->get_item_value($trackerId, $itemId, $f['fieldId']); } } $watchers = $this->get_notification_emails($trackerId, $itemId, $this->get_tracker_options($trackerId)); if (count($watchers > 0)) { global $smarty; $trackerName = $this->getOne("select `name` from `tiki_trackers` where `trackerId`=?", array((int) $trackerId)); $smarty->assign('mail_date', $this->now); $smarty->assign('mail_user', $user); $smarty->assign('mail_action', 'deleted'); $smarty->assign('mail_itemId', $itemId); $smarty->assign('mail_trackerId', $trackerId); $smarty->assign('mail_trackerName', $trackerName); $foo = parse_url($_SERVER["REQUEST_URI"]); $machine = $this->httpPrefix() . $foo["path"]; $smarty->assign('mail_machine', $machine); $parts = explode('/', $foo['path']); if (count($parts) > 1) { unset($parts[count($parts) - 1]); } $smarty->assign('mail_machine_raw', $this->httpPrefix() . implode('/', $parts)); if (!isset($_SERVER["SERVER_NAME"])) { $_SERVER["SERVER_NAME"] = $_SERVER["HTTP_HOST"]; } include_once 'lib/webmail/tikimaillib.php'; $smarty->assign('server_name', $_SERVER['SERVER_NAME']); foreach ($watchers as $w) { $mail = new TikiMail($w['user']); $mail->setHeader("From", $prefs['sender_email']); $mail->setSubject($smarty->fetchLang($w['lang'], 'mail/tracker_changed_notification_subject.tpl')); $mail->setText($smarty->fetchLang($w['lang'], 'mail/tracker_changed_notification.tpl')); $mail->send(array($w['email'])); } } $query = "update `tiki_trackers` set `lastModif`=? where `trackerId`=?"; $result = $this->query($query, array((int) $this->now, (int) $trackerId)); $query = "update `tiki_trackers` set `items`=`items`-1 where `trackerId`=?"; $result = $this->query($query, array((int) $trackerId)); $query = "delete from `tiki_tracker_item_fields` where `itemId`=?"; $result = $this->query($query, array((int) $itemId)); $query = "delete from `tiki_tracker_items` where `itemId`=?"; $result = $this->query($query, array((int) $itemId)); $query = "delete from `tiki_tracker_item_comments` where `itemId`=?"; $result = $this->query($query, array((int) $itemId)); $query = "delete from `tiki_tracker_item_attachments` where `itemId`=?"; $result = $this->query($query, array((int) $itemId)); // ---- delete image from disk ------------------------------------- foreach ($imgList as $img) { if (file_exists($img)) { unlink($img); } } global $cachelib; require_once 'lib/cache/cachelib.php'; $cachelib->invalidate('trackerItemLabel' . $itemId); foreach ($fieldList['data'] as $f) { $cachelib->invalidate(md5('trackerfield' . $f['fieldId'] . $status)); $cachelib->invalidate(md5('trackerfield' . $f['fieldId'] . 'opc')); $cachelib->invalidate(md5('trackerfield' . $f['fieldId'] . 'opc')); if ($status == 'o') { $cachelib->invalidate(md5('trackerfield' . $f['fieldId'] . 'op')); $cachelib->invalidate(md5('trackerfield' . $f['fieldId'] . 'oc')); } elseif ($status == 'c') { $cachelib->invalidate(md5('trackerfield' . $f['fieldId'] . 'oc')); $cachelib->invalidate(md5('trackerfield' . $f['fieldId'] . 'pc')); } elseif ($status == 'p') { $cachelib->invalidate(md5('trackerfield' . $f['fieldId'] . 'op')); $cachelib->invalidate(md5('trackerfield' . $f['fieldId'] . 'pc')); } } $options = $this->get_tracker_options($trackerId); if (isset($option) && isset($option['autoCreateCategories']) && $option['autoCreateCategories'] == 'y') { $currentCategId = $categlib->get_category_id("Tracker Item {$itemId}"); $categlib->remove_category($currentCategId); } return true; }
function wikiplugin_tracker($data, $params) { global $tikilib, $userlib, $dbTiki, $user, $group, $page, $tiki_p_admin, $tiki_p_create_tracker_items, $smarty, $prefs, $trklib, $tiki_p_tracker_vote_ratings; include_once 'lib/trackers/trackerlib.php'; //var_dump($_REQUEST); extract($params, EXTR_SKIP); if ($prefs['feature_trackers'] != 'y') { return $smarty->fetch("wiki-plugins/error_tracker.tpl"); } if (empty($trackerId) || !($tracker = $trklib->get_tracker($trackerId))) { return $smarty->fetch("wiki-plugins/error_tracker.tpl"); } if ($t = $trklib->get_tracker_options($trackerId)) { $tracker = array_merge($tracker, $t); } if (empty($trackerId) && !empty($view) && $view == 'user' && $prefs['userTracker'] == 'y') { // the user tracker item $utid = $userlib->get_tracker_usergroup($user); if (!empty($utid) && !empty($utid['usersTrackerId'])) { $itemId = $trklib->get_item_id($utid['usersTrackerId'], $utid['usersFieldId'], $user); $trackerId = $utid['usersTrackerId']; $usertracker = true; } } elseif (!empty($trackerId) && !empty($view) && $view == 'user') { // the user item of a tracker $itemId = $trklib->get_user_item($trackerId, $tracker); $usertracker = true; } elseif (!empty($trackerId) && !empty($_REQUEST['view_user'])) { $itemId = $trklib->get_user_item($trackerId, $tracker, $_REQUEST['view_user']); } if (!isset($trackerId)) { return $smarty->fetch("wiki-plugins/error_tracker.tpl"); } if (!isset($embedded)) { $embedded = "n"; } if (!isset($showtitle)) { $showtitle = "n"; } if (!isset($showdesc)) { $showdesc = "n"; } if (!isset($sort)) { $sort = 'n'; } if (!isset($action)) { $action = 'Save'; } if (isset($preview)) { if (empty($preview)) { $preview = 'Preview'; } } else { unset($_REQUEST['tr_preview']); } if (!isset($showmandatory)) { $showmandatory = 'y'; } $smarty->assign('showmandatory', $showmandatory); if (isset($values)) { if (!is_array($values)) { $values = explode(':', $values); } } if (isset($_REQUEST['values'])) { if (is_array($_REQUEST['values'])) { foreach ($_REQUEST['values'] as $i => $k) { $_REQUEST['values'][$i] = urldecode($k); } } else { $_REQUEST['values'] = urldecode($_REQUEST['values']); } } if (empty($_SERVER['SCRIPT_NAME']) || !strstr($_SERVER['SCRIPT_NAME'], 'tiki-register.php')) { if (!empty($itemId) && $tracker['writerCanModify'] == 'y' && isset($usertracker) && $usertracker) { // user tracker he can modify } else { $perms = $tikilib->get_perm_object($trackerId, 'tracker', $tracker, false); if ($perms['tiki_p_create_tracker_items'] == 'n' && empty($itemId)) { return '<b>' . tra("You do not have permission to insert an item") . '</b>'; } elseif ($perms['tiki_p_modify_tracker_items'] == 'n' && !empty($itemId)) { return '<b>' . tra("You do not have permission to modify an item") . '</b>'; } } } if (isset($_REQUEST['removeattach']) && $tracker['useAttachments'] == 'y') { $owner = $trklib->get_item_attachment_owner($_REQUEST['removeattach']); if ($tiki_p_wiki_admin_attachments == 'y' || $user && $user == $owner) { $trklib->remove_item_attachment($_REQUEST["removeattach"]); unset($_REQUEST['removeattach']); } } if (isset($_REQUEST['removeImage']) && !empty($_REQUEST['trackerId']) && !empty($_REQUEST['itemId']) && !empty($_REQUEST['fieldId']) && !empty($_REQUEST['fieldName'])) { $img_field = array('data' => array()); $img_field['data'][] = array('fieldId' => $_REQUEST['fieldId'], 'type' => 'i', 'name' => $_REQUEST['fieldName'], 'value' => 'blank'); $trklib->replace_item($_REQUEST['trackerId'], $_REQUEST['itemId'], $img_field); } $back = ''; $thisIsThePlugin = isset($_REQUEST['trackit']) && $_REQUEST['trackit'] == $trackerId && (isset($_REQUEST['fields']) && isset($params['fields']) && $_REQUEST['fields'] == $params['fields'] || !isset($_REQUEST['fields']) && !isset($params['fields'])); if (!isset($_REQUEST["ok"]) || $_REQUEST["ok"] == "n" || !$thisIsThePlugin || isset($_REQUEST['tr_preview'])) { $field_errors = array('err_mandatory' => array(), 'err_value' => array()); global $notificationlib; include_once 'lib/notifications/notificationlib.php'; $tracker = $trklib->get_tracker($trackerId); $tracker = array_merge($tracker, $trklib->get_tracker_options($trackerId)); if (!empty($tracker['start']) && $tikilib->now < $tracker['start'] || !empty($tracker['end']) && $tikilib->now > $tracker['end']) { return; } $flds = $trklib->list_tracker_fields($trackerId, 0, -1, "position_asc", ""); $bad = array(); $embeddedId = false; $onemandatory = false; $full_fields = array(); $mainfield = ''; if ($thisIsThePlugin) { /* ------------------------------------- Recup all values from REQUEST -------------- */ $cpt = 0; if (isset($fields)) { $fields_plugin = split(':', $fields); } foreach ($flds['data'] as $fl) { // store value to display it later if form // isn't fully filled. if (($flds['data'][$cpt]['type'] == 'u' || $flds['data'][$cpt]['type'] == 'g' || $flds['data'][$cpt]['type'] == 'I') && ($flds['data'][$cpt]['options_array'][0] == '1' || $flds['data'][$cpt]['options_array'][0] == '2') && $tiki_p_admin_trackers != 'y' && empty($_REQUEST['track'][$fl['fieldId']])) { if (empty($itemId) && ($flds['data'][$cpt]['options_array'][0] == '1' || $flds['data'][$cpt]['options_array'][0] == '2')) { if ($flds['data'][$cpt]['type'] == 'u') { $_REQUEST['track'][$fl['fieldId']] = empty($user) ? empty($_REQUEST['name']) ? '' : $_REQUEST['name'] : $user; } elseif ($flds['data'][$cpt]['type'] == 'g') { $_REQUEST['track'][$fl['fieldId']] = $group; } elseif ($flds['data'][$cpt]['type'] == 'I') { $_REQUEST['track'][$fl['fieldId']] = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''; } } elseif (!empty($itemId) && $flds['data'][$cpt]['options_array'][0] == '2') { if ($flds['data'][$cpt]['type'] == 'u') { $_REQUEST['track'][$fl['fieldId']] = $user; } elseif ($flds['data'][$cpt]['type'] == 'g') { $_REQUEST['track'][$fl['fieldId']] = $group; } elseif ($flds['data'][$cpt]['type'] == 'I') { $_REQUEST['track'][$fl['fieldId']] = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''; } } } elseif ($flds['data'][$cpt]['type'] == 'f') { $ins_id = 'track_' . $fl['fieldId']; if (isset($_REQUEST[$ins_id . 'Day'])) { if (empty($_REQUEST['$ins_id' . 'Hour'])) { $_REQUEST['$ins_id' . 'Hour'] = 0; } if (empty($_REQUEST['$ins_id' . 'Minute'])) { $_REQUEST['$ins_id' . 'Minute'] = 0; } $_REQUEST['track'][$fl['fieldId']] = $tikilib->make_time($_REQUEST["{$ins_id}" . "Hour"], $_REQUEST["{$ins_id}" . "Minute"], 0, $_REQUEST["{$ins_id}" . "Month"], $_REQUEST["{$ins_id}" . "Day"], $_REQUEST["{$ins_id}" . "Year"]); } else { $_REQUEST['track'][$fl['fieldId']] = $tikilib->now; } } if (isset($_REQUEST['ins_cat_' . $fl['fieldId']])) { // to remember if error $_REQUEST['track'][$fl['fieldId']] = $_REQUEST['ins_cat_' . $fl['fieldId']]; } if (isset($_REQUEST['track'][$fl['fieldId']])) { $flds['data'][$cpt]['value'] = $_REQUEST['track'][$fl['fieldId']]; } else { $flds['data'][$cpt]['value'] = ''; if ($fl['type'] == 'c' && (empty($fields_plugin) || in_array($fl['fieldId'], $fields_plugin))) { $_REQUEST['track'][$fl['fieldId']] = 'n'; } elseif ($fl['type'] == 'R' && $fl['isMandatory'] == 'y' && !isset($_REQUEST['track'][$fl['fieldId']])) { // if none radio is selected, there will be no value and no error if mandatory if (empty($fields_plugin) || in_array($fl['fieldId'], $fields_plugin)) { $_REQUEST['track'][$fl['fieldId']] = ''; } } } if (!empty($_REQUEST['other_track'][$fl['fieldId']])) { $flds['data'][$cpt]['value'] = $_REQUEST['other_track'][$fl['fieldId']]; } $full_fields[$fl['fieldId']] = $fl; if ($embedded == 'y' and $fl['name'] == 'page') { $embeddedId = $fl['fieldId']; } if ($fl['isMain'] == 'y') { $mainfield = $flds['data'][$cpt]['value']; } $cpt++; } /*foreach */ if (isset($_REQUEST['track'])) { foreach ($_REQUEST['track'] as $fld => $val) { //$ins_fields["data"][] = array('fieldId' => $fld, 'value' => $val, 'type' => 1); if (!empty($_REQUEST['other_track'][$fld])) { $val = $_REQUEST['other_track'][$fld]; } $ins_fields["data"][] = array_merge(array('value' => $val), $full_fields[$fld]); } } if (isset($_FILES['track'])) { // image or attachment fields foreach ($_FILES['track'] as $label => $w) { foreach ($w as $fld => $val) { if ($label == 'tmp_name' && is_uploaded_file($val)) { $fp = fopen($val, 'rb'); $data = ''; while (!feof($fp)) { $data .= fread($fp, 8192 * 16); } fclose($fp); $files[$fld]['old_value'] = $files[$fld]['value']; $files[$fld]['value'] = $data; } else { $files[$fld]['file_' . $label] = $val; } } } foreach ($files as $fld => $file) { $ins_fields['data'][] = array_merge($file, $full_fields[$fld]); } } if ($embedded == 'y' && isset($_REQUEST['page'])) { $ins_fields["data"][] = array('fieldId' => $embeddedId, 'value' => $_REQUEST['page']); } $ins_categs = array(); $categorized_fields = array(); while (list($postVar, $postVal) = each($_REQUEST)) { if (preg_match("/^ins_cat_([0-9]+)/", $postVar, $m)) { foreach ($postVal as $v) { $ins_categs[] = $v; } $categorized_fields[] = $m[1]; } } /* ------------------------------------- End recup all values from REQUEST -------------- */ /* ------------------------------------- Check field values for each type and presence of mandatory ones ------------------- */ $field_errors = $trklib->check_field_values($ins_fields, $categorized_fields); if (empty($user) && $prefs['feature_antibot'] == 'y') { if (!isset($_SESSION['random_number']) || $_SESSION['random_number'] != $_REQUEST['antibotcode']) { $field_errors['err_antibot'] = 'y'; } } if (count($field_errors['err_mandatory']) == 0 && count($field_errors['err_value']) == 0 && empty($field_errors['err_antibot']) && !isset($_REQUEST['tr_preview'])) { /* ------------------------------------- save the item ---------------------------------- */ if (!isset($itemId)) { $itemId = $trklib->get_user_item($trackerId, $tracker); } if (isset($_REQUEST['status'])) { $status = $_REQUEST['status']; } elseif (isset($newstatus) && ($newstatus == 'o' || $newstatus == 'c' || $newstatus == 'p')) { $status = $newstatus; } elseif (empty($itemId) && isset($tracker['newItemStatus'])) { $status = $tracker['newItemStatus']; } else { $status = ''; } $rid = $trklib->replace_item($trackerId, $itemId, $ins_fields, $status, $ins_categs); $trklib->categorized_item($trackerId, $rid, $mainfield, $ins_categs); if (!empty($email)) { $emailOptions = split("\\|", $email); if (is_numeric($emailOptions[0])) { $emailOptions[0] = $trklib->get_item_value($trackerId, $rid, $emailOptions[0]); } if (empty($emailOptions[0])) { // from $emailOptions[0] = $prefs['sender_email']; } if (empty($emailOptions[1])) { // to $emailOptions[1][0] = $prefs['sender_email']; } else { $emailOptions[1] = split(',', $emailOptions[1]); foreach ($emailOptions[1] as $key => $email) { if (is_numeric($email)) { $emailOptions[1][$key] = $trklib->get_item_value($trackerId, $rid, $email); } } } if (!empty($emailOptions[2])) { //tpl if (!preg_match('/\\.tpl$/', $emailOptions[2])) { $emailOptions[2] .= '.tpl'; } $tplSubject = str_replace('.tpl', '_subject.tpl', $emailOptions[2]); } else { $emailOptions[2] = 'tracker_changed_notification.tpl'; } if (empty($tplSubject)) { $tplSubject = 'tracker_changed_notification_subject.tpl'; } include_once 'lib/webmail/tikimaillib.php'; $mail = new TikiMail(); @($mail_data = $smarty->fetch('mail/' . $tplSubject)); if (empty($mail_data)) { $mail_data = tra('Tracker was modified at ') . $_SERVER["SERVER_NAME"]; } $mail->setSubject($mail_data); $mail_data = $smarty->fetch('mail/' . $emailOptions[2]); $mail->setText($mail_data); $mail->setHeader('From', $emailOptions[0]); $mail->send($emailOptions[1]); } if (empty($url)) { if (!empty($page)) { $url = "tiki-index.php?page=" . urlencode($page) . "&ok=y&trackit={$trackerId}"; if (!empty($params['fields'])) { $url .= "&fields=" . urlencode($params['fields']); } $url .= "#wikiplugin_tracker{$trackerId}"; header("Location: {$url}"); die; } else { return ''; } } else { header("Location: {$url}"); die; } /* ------------------------------------- end save the item ---------------------------------- */ } elseif (isset($_REQUEST['trackit']) and $_REQUEST['trackit'] == $trackerId) { $smarty->assign('wikiplugin_tracker', $trackerId); //used in vote plugin } } else { if (!empty($values) || (!empty($_REQUEST['values']) and empty($_REQUEST['prefills']))) { // assign default values for each filedId specify if (empty($values)) { // url with values[]=x&values[] witouth the list of fields $values = $_REQUEST['values']; } if (!is_array($values)) { $values = array($values); } if (isset($fields)) { $fl = split(':', $fields); for ($j = 0; $j < count($fl); $j++) { for ($i = 0; $i < count($flds['data']); $i++) { if ($flds['data'][$i]['fieldId'] == $fl[$j]) { $flds['data'][$i]['value'] = $values[$j]; } } } } else { // values contains all the fields value in the default order $i = 0; foreach ($values as $value) { $flds['data'][$i++]['value'] = $value; } } } elseif (!empty($itemId)) { if (isset($fields)) { $fl = split(':', $fields); $filter = ''; foreach ($flds['data'] as $f) { if (in_array($f['fieldId'], $fl)) { $filter[] = $f; } } } else { $filter =& $flds['data']; } if (!empty($filter)) { $flds['data'] = $trklib->get_item_fields($trackerId, $itemId, $filter, $itemUser); } } else { if (isset($_REQUEST['values']) && isset($_REQUEST['prefills'])) { //url:prefields=1:2&values[]=x&values[]=y if (!is_array($_REQUEST['values'])) { $_REQUEST['values'] = array($_REQUEST['values']); } $fl = split(':', $_REQUEST['prefills']); } else { unset($fl); } for ($i = 0; $i < count($flds['data']); $i++) { if (isset($fl) && ($j = array_search($flds['data'][$i]['fieldId'], $fl)) !== false) { $flds['data'][$i]['value'] = $_REQUEST['values'][$j]; } else { $flds['data'][$i]['value'] = ''; // initialize fields with blank values } } } } $optional = array(); $outf = array(); if (isset($fields) && !empty($fields)) { $fl = split(":", $fields); if ($sort == 'y') { $flds = $trklib->sort_fields($flds, $fl); } foreach ($fl as $l) { if (substr($l, 0, 1) == '-') { $l = substr($l, 1); $optional[] = $l; } $ok = false; foreach ($flds['data'] as $f) { if ($f['fieldId'] == $l) { $ok = true; break; } } if (!$ok) { $back .= tra('Incorrect fieldId:') . ' ' . $l; } $outf[] = $l; } } elseif (!isset($fields)) { foreach ($flds['data'] as $f) { if ($f['isMandatory'] == 'y') { $optional[] = $f['fieldId']; } $outf[] = $f['fieldId']; } } // Display warnings when needed if (count($field_errors['err_mandatory']) > 0) { $back .= '<div class="simplebox highlight"><img src="pics/icons/exclamation.png" alt=" ' . tra('Error') . '" style="vertical-align:middle" /> '; $back .= tra('Following mandatory fields are missing') . ' :<br/>'; $coma_cpt = count($field_errors['err_mandatory']); foreach ($field_errors['err_mandatory'] as $f) { $back .= $f['name']; $back .= --$coma_cpt > 0 ? ', ' : ''; } $back .= '</div><br />'; $_REQUEST['error'] = 'y'; } if (count($field_errors['err_value']) > 0) { $back .= '<div class="simplebox highlight">'; $b = ''; foreach ($field_errors['err_value'] as $f) { if (!empty($f['errorMsg'])) { $back .= tra($f['errorMsg']) . '<br>'; } else { if (!empty($b)) { $b .= ' : '; } $b .= $f['name']; } } if (!empty($b)) { $back .= tra('Following fields are incorrect') . ' :<br/>' . $b; } $back .= '</div><br />'; $_REQUEST['error'] = 'y'; } if (isset($field_errors['err_antibot'])) { $back .= '<div class="simplebox highlight"><img src="pics/icons/exclamation.png" alt=" ' . tra('Error') . '" style="vertical-align:middle" /> '; $back .= tra('You have mistyped the anti-bot verification code; please try again.'); $back .= '</div><br />'; $_REQUEST['error'] = 'y'; } if (count($field_errors['err_mandatory']) > 0 || count($field_errors['err_value']) > 0 || isset($field_errors['err_antibot'])) { $smarty->assign('input_err', 'y'); } if (!empty($page)) { $back .= '~np~'; } $back .= '<form enctype="multipart/form-data" method="post"><input type="hidden" name="trackit" value="' . $trackerId . '" />'; if (isset($fields)) { $back .= '<input type="hidden" name="fields" value="' . $params['fields'] . '" />'; } //if plugin inserted twice with the same trackerId if (!empty($_REQUEST['page'])) { $back .= '<input type="hidden" name="page" value="' . $_REQUEST["page"] . '" />'; } $back .= '<input type="hidden" name="refresh" value="1" />'; if (isset($_REQUEST['page'])) { $back .= '<input type="hidden" name="page" value="' . $_REQUEST["page"] . '" />'; } // for registration if (isset($_REQUEST['name'])) { $back .= '<input type="hidden" name="name" value="' . $_REQUEST["name"] . '" />'; } if (isset($_REQUEST['pass'])) { $back .= '<input type="hidden" name="pass" value="' . $_REQUEST["pass"] . '" />'; $back .= '<input type="hidden" name="passAgain" value="' . $_REQUEST["pass"] . '" />'; } if (isset($_REQUEST['email'])) { $back .= '<input type="hidden" name="email" value="' . $_REQUEST["email"] . '" />'; } if (isset($_REQUEST['regcode'])) { $back .= '<input type="hidden" name="regcode" value="' . $_REQUEST["regcode"] . '" />'; } if (isset($_REQUEST['chosenGroup'])) { // for registration $back .= '<input type="hidden" name="chosenGroup" value="' . $_REQUEST["chosenGroup"] . '" />'; } if (isset($_REQUEST['register'])) { $back .= '<input type="hidden" name="register" value="' . $_REQUEST["register"] . '" />'; } if ($showtitle == 'y') { $back .= '<div class="titlebar">' . $tracker["name"] . '</div>'; } if ($showdesc == 'y' && $tracker['description']) { if ($tracker["descriptionIsParsed"] == 'y') { $back .= '<div class="wikitext">' . $tikilib->parse_data($tracker["description"], 'false') . '</div><br />'; } else { $back .= '<div class="wikitext">' . $tracker["description"] . '</div><br />'; } } if (isset($_REQUEST['tr_preview'])) { // use for the computed and join fields $assocValues = array(); $assocNumerics = array(); foreach ($flds['data'] as $f) { if (empty($f['value']) && ($f['type'] == 'u' || $f['type'] == 'g' || $f['type'] == 'I') && ($f['options_array'][0] == '1' || $f['options_array'][0] == '2')) { //need to fill the selector fields for the join $f['value'] = $f['type'] == 'I' ? $_SERVER['REMOTE_ADDR'] : ($f['type'] == 'g' ? $group : $user); } $assocValues[$f['fieldId']] = $f['value']; $assocNumerics[$f['fieldId']] = preg_replace('/[^0-9\\.\\+]/', '', $f['value']); // get rid off the $ and such unit } } if (!empty($itemId)) { $item = array('itemId' => $itemId, 'trackerId' => $trackerId); } foreach ($flds['data'] as $i => $f) { // collect additional infos if (in_array($f['fieldId'], $outf)) { $flds['data'][$i]['ins_id'] = $f['type'] == 'e' ? 'ins_cat_' . $f['fieldId'] : ($f['type'] == 'f' ? 'track_' . $f['fieldId'] : 'track[' . $f['fieldId'] . ']'); if ($f['isHidden'] == 'c' && !empty($itemId) && !isset($item['creator'])) { $item['creator'] = $trklib->get_item_creator($trackerId, $itemId); } if ($f['type'] == 's' && ($f['name'] == 'Rating' || $f['name'] == tra('Rating')) && $tiki_p_tracker_vote_ratings == 'y' && isset($item)) { $item['my_rate'] = $tikilib->get_user_vote("tracker{$trackerId}.{$itemId}", $user); } if ($f['type'] == 'r') { $flds['data'][$i]['list'] = array_unique($trklib->get_all_items($f['options_array'][0], $f['options_array'][1], 'o')); if (isset($f['options_array'][3])) { $flds['data'][$i]['displayedList'] = array_unique($trklib->concat_all_items_from_fieldslist($f['options_array'][0], $f['options_array'][3])); } } elseif ($f['type'] == 'y') { $flds['data'][$i]['flags'] = $tikilib->get_flags(); if ($prefs['language'] != 'en') { foreach ($flags as $flag) { $flagsTranslated[] = $tikilib->take_away_accent(tra($flag)); } array_multisort($flagsTranslated, $flds['data'][$i]['flags']); } } elseif ($f['type'] == 'u') { if ($tiki_p_admin == 'y' || $f['options_array'][0] != 1 && $f['options_array'][0] != 2) { $flds['data'][$i]['list'] = $userlib->list_all_users(); } } elseif ($f['type'] == 'g') { if ($tiki_p_admin == 'y' || $f['options_array'][0] != 1 && $f['options_array'][0] != 2) { $flds['data'][$i]['list'] = $userlib->list_all_groups(); } } elseif ($f['type'] == 'e') { global $categlib; include_once 'lib/categories/categlib.php'; $flds['data'][$i]['list'] = $categlib->get_child_categories($f["options_array"][0]); } elseif ($f['type'] == 'A') { if (!empty($f['value'])) { $flds['data'][$i]['info'] = $trklib->get_item_attachment($f['value']); } } elseif ($f['type'] == 'a') { if ($f['options_array'][0] == 1 && empty($quicktags)) { global $quicktagslib; include_once 'lib/quicktags/quicktagslib.php'; $quicktags = $quicktagslib->list_quicktags(0, -1, 'taglabel_desc', '', 'trackers'); $smarty->assign_by_ref('quicktags', $quicktags['data']); } } } } // Loop on tracker fields and display form if (empty($tpl) && empty($wiki)) { $back .= '<table class="wikiplugin_tracker">'; } else { $back .= '<div class="wikiplugin_tracker">'; } $backLength0 = strlen($back); foreach ($flds['data'] as $f) { if ($f['type'] == 'u' and $f['options_array'][0] == '1') { $back .= '<input type="hidden" name="authorfieldid" value="' . $f['fieldId'] . '" />'; } if ($f['type'] == 'I' and $f['options_array'][0] == '1') { $back .= '<input type="hidden" name="authoripid" value="' . $f['fieldId'] . '" />'; } if ($f['type'] == 'g' and $f['options_array'][0] == '1') { $back .= '<input type="hidden" name="authorgroupfieldid" value="' . $f['fieldId'] . '" />'; } if ($f['type'] == 'q') { $back .= '<input type="hidden" name="track[' . $f['fieldId'] . ']" />'; } if (in_array($f['fieldId'], $outf)) { if (!empty($tpl) || !empty($wiki)) { $smarty->assign_by_ref('field_value', $f); $smarty->assign('f_' . $f['fieldId'], $smarty->fetch('tracker_item_field_input.tpl')); } elseif (true) { // comment this block in problem if (in_array($f['fieldId'], $optional)) { $f['name'] = "<i>" . $f['name'] . "</i>"; } if ($f['type'] != 'h') { $back .= "<tr><td>" . wikiplugin_tracker_name($f['fieldId'], $f['name'], $field_errors); if ($showmandatory == 'y' and $f['isMandatory'] == 'y') { $back .= " <b>*</b> "; $onemandatory = true; } $back .= "</td><td>"; } else { $back .= "<tr><td class='heading' colspan='2'>" . wikiplugin_tracker_name($f['fieldId'], $f['name'], $field_errors); } $smarty->assign_by_ref('field_value', $f); if (isset($item)) { $smarty->assign_by_ref('item', $item); } $back .= $smarty->fetch('tracker_item_field_input.tpl'); } else { //old // numeric or text field if ($f['type'] == 't' or $f['type'] == 'n' and $f["fieldId"] != $embeddedId or $f['type'] == 'm') { $back .= "<tr><td>" . wikiplugin_tracker_name($f['fieldId'], $f['name'], $field_errors); if ($showmandatory == 'y' and $f['isMandatory'] == 'y') { $back .= " <b>*</b> "; $onemandatory = true; } if ($f['type'] != 'h') { $back .= "</td><td>"; } $back .= '<input type="text" name="track[' . $f["fieldId"] . ']" value="' . $f['value'] . '"'; if (isset($f['options_array'][1])) { $back .= 'size="' . $f['options_array'][1] . '" maxlength="' . $f['options_array'][1] . '"'; } else { $back .= 'size="30"'; } $back .= '/>'; // item link } elseif ($f['type'] == 'r') { $back .= "<tr><td>" . wikiplugin_tracker_name($f['fieldId'], $f['name'], $field_errors); if ($showmandatory == 'y' and $f['isMandatory'] == 'y') { $back .= " <b>*</b> "; $onemandatory = true; } $back .= "</td><td>"; $back .= '<select name="track[' . $f["fieldId"] . ']">'; $back .= '<option value=""></option>'; foreach ($f['list'] as $key => $item) { $selected = $f['value'] == $item ? 'selected="selected"' : ''; $back .= '<option value="' . $item . '" ' . $selected . '>'; $back .= isset($f['displayedList'][$key]) ? $f['displayedList'][$key] : $item; $back .= '</option>'; } $back .= "</select>"; // country } elseif ($f['type'] == 'y') { $back .= "<tr><td>" . wikiplugin_tracker_name($f['fieldId'], $f['name'], $field_errors); if ($showmandatory == 'y' and $f['isMandatory'] == 'y') { $back .= " <b>*</b> "; $onemandatory = true; } $back .= "</td><td>"; $back .= '<select name="track[' . $f["fieldId"] . ']">'; $back .= '<option value=""></option>'; foreach ($f['flags'] as $flag) { $selected = $f['value'] == $flag ? 'selected="selected"' : ''; if (!isset($f['options_array'][0]) || $f['options_array'][0] != '1') { $selected .= ' style="background-image:url(\'img/flags/' . $flag . '.gif\');background-repeat:no-repeat;padding-left:25px;padding-bottom:3px;"'; } $back .= '<option value="' . $flag . '" ' . $selected . '>' . tra($flag) . '</option>'; } $back .= "</select>"; // textarea } elseif ($f['type'] == 'a') { $back .= "<tr><td>" . wikiplugin_tracker_name($f['fieldId'], $f['name'], $field_errors); if ($showmandatory == 'y' and $f['isMandatory'] == 'y') { $back .= " <b>*</b> "; $onemandatory = true; } $back .= "</td><td>"; if (isset($f['options_array'][1])) { $back .= '<textarea cols="' . $f['options_array'][1] . '" rows="' . $f['options_array'][2] . '" name="track[' . $f["fieldId"] . ']" wrap="soft">' . $f['value'] . '</textarea>'; } else { $back .= '<textarea cols="29" rows="7" name="track[' . $f["fieldId"] . ']" wrap="soft">' . $f['value'] . '</textarea>'; } // user selector } elseif (($f['type'] == 'u' or $f['type'] == 'g' or $f['type'] == 'I') and ($f['options_array'][0] == '1' or $f['options_array'][0] == '2')) { $back .= '<tr><td>' . wikiplugin_tracker_name($f['fieldId'], $f['name'], $field_errors) . '</td><td>'; $back .= $f['type'] == 'I' ? $_SERVER['REMOTE_ADDR'] : ($f['type'] == 'g' ? $group : $user); // drop down, user selector or group selector } elseif ($f['type'] == 'd' or $f['type'] == 'D' or $f['type'] == 'u' or $f['type'] == 'g' or $f['type'] == 'r' or $f['type'] == 'R') { if ($f['type'] == 'd' or $f['type'] == 'D' or $f['type'] == 'R') { $list = $f['options_array']; } elseif ($f['type'] == 'u') { $list = $f['list']; } elseif ($f['type'] == 'g') { $list = $f['list']; } if ($list) { $back .= "<tr><td>" . wikiplugin_tracker_name($f['fieldId'], $f['name'], $field_errors); if ($showmandatory == 'y' and $f['isMandatory'] == 'y') { $back .= " <b>*</b> "; $onemandatory = true; } $back .= "</td><td>"; if ($f['type'] == 'R') { foreach ($list as $item) { $selected = $f['value'] == $item || empty($f['value']) && !empty($f['defaultvalue']) && $item == $f['defaultvalue'] ? 'checked="checked"' : ''; $back .= '<div class="radio"><input type="radio" name="track[' . $f["fieldId"] . ']" value="' . $item . '" ' . $selected . ' />' . $item . '</div>'; } } else { $back .= '<select name="track[' . $f["fieldId"] . ']">'; $back .= '<option value=""></option>'; $otherValue = $f['value']; foreach ($list as $item) { if ($f['value'] == $item || empty($f['value']) && !empty($f['defaultvalue']) && $item == $f['defaultvalue']) { $selected = 'selected="selected"'; $otherValue = ''; } else { $selected = ''; } $back .= '<option value="' . $item . '" ' . $selected . '>' . tra($item) . '</option>'; } $back .= "</select>"; } if ($f['type'] == 'D') { $back .= '<br />' . tra('Other:') . ' <input type="text" name="track_other[' . $f["fieldId"] . ']" value="' . $otherValue . '" />'; } } else { $back .= '<input type="hidden" name="track[' . $f["fieldId"] . ']" value="' . $user . '" />'; } } elseif ($f['type'] == 'h') { if (strlen($back) != $backLength0) { $back .= '</td></tr>'; } $back .= "<tr><td colspan=\"2\" class=\"trackerheader\"><h2>"; $n = wikiplugin_tracker_name($f['fieldId'], $f['name'], $field_errors); $back .= $n ? $n : ' ' . '</h2>'; if (!empty($f['description'])) { $back .= '<i>' . $f['description'] . '</i>'; } } elseif ($f['type'] == 'e') { $back .= "<tr><td>" . wikiplugin_tracker_name($f['fieldId'], $f['name'], $field_errors); if ($showmandatory == 'y' and $f['isMandatory'] == 'y') { $back .= " <b>*</b> "; $onemandatory = true; } $back .= "</td><td>"; $i = 0; if (!empty($f['options_array'][2]) && ($f['options_array'][2] == '1' || $f['options_array'][2] == 'y')) { $back .= '<script type="text/javascript"> /* <![CDATA[ */'; $back .= "document.write('<div class=\"categSelectAll\"><input type=\"checkbox\" onclick=\"switchCheckboxes(this.form,\\'ins_cat_{$f['fieldId']}[]\\',this.checked)\"/>"; $back .= tra('Select All'); $back .= "</div>')/* ]]> */</script>"; } if (isset($f['options_array'][1]) && ($f['options_array'][1] == 'd' || $f['options_array'][1] == 'm')) { $back .= '<select name="ins_cat_' . $f['fieldId'] . '[]"'; if ($f['options_array'][1] == 'm') { $back .= ' multiple="multiple"'; } $back .= '>'; if ($f['options_array'][1] == 'd') { $back .= '<option value=""></option>"'; } foreach ($f['list'] as $cat) { $checked = $f['value'] == $cat['categId'] ? 'selected="selected"' : ''; $back .= '<option value="' . $cat['categId'] . '" ' . $checked . '>' . $cat['name'] . '</option>'; } $back .= '</select>'; } else { $t = isset($f["options_array"][1]) && $f["options_array"][1] == 'radio' ? 'radio' : 'checkbox'; foreach ($f['list'] as $cat) { $checked = $f['value'] == $cat['categId'] ? 'checked="checked"' : ''; $back .= '<input type="' . $t . '" name="ins_cat_' . $f['fieldId'] . '[]" value="' . $cat["categId"] . '" ' . $checked . '>' . $cat['name'] . '</input><br />'; } } } elseif ($f['type'] == 'c') { $back .= "<tr><td>" . wikiplugin_tracker_name($f['fieldId'], $f['name'], $field_errors); if ($showmandatory == 'y' and $f['isMandatory'] == 'y') { $back .= " <b>*</b> "; $onemandatory = true; } $checked = $f['value'] == 'y' ? 'checked="checked"' : ''; $back .= '</td><td><input type="checkbox" name="track[' . $f["fieldId"] . ']" value="y" ' . $checked . '/>'; } elseif ($f['type'] == 'i') { $back .= "<tr><td>" . wikiplugin_tracker_name($f['fieldId'], $f['name'], $field_errors); if ($showmandatory == 'y' and $f['isMandatory'] == 'y') { $back .= " <b>*</b> "; $onemandatory = true; } $back .= "</td><td>"; $back .= '<input type="file" name="track[' . $f["fieldId"] . ']" />'; } elseif ($f['type'] == 'f') { $back .= "<tr><td>" . wikiplugin_tracker_name($f['fieldId'], $f['name'], $field_errors); if ($showmandatory == 'y' and $f['isMandatory'] == 'y') { $back .= " <b>*</b> "; $onemandatory = true; } $back .= "</td><td>"; include_once 'lib/smarty_tiki/function.html_select_date.php'; include_once 'lib/smarty_tiki/function.html_select_time.php'; $params['prefix'] = 'track_' . $f['fieldId']; if (isset($f['options_array'][1])) { $params['start_year'] = $f['options_array'][1]; } if (isset($f['options_array'][2])) { $params['end_year'] = $f['options_array'][2]; } if (isset($f['value'])) { $params['time'] = $f['value']; } $back .= smarty_function_html_select_date($params, $smarty); if (empty($f['options_array'][0]) || $f['options_array'][0] != 'd') { $params['display_seconds'] = false; $back .= smarty_function_html_select_time($params, $smarty); } } elseif ($f['type'] == 'j') { $back .= "<tr><td>" . wikiplugin_tracker_name($f['fieldId'], $f['name'], $field_errors); if ($showmandatory == 'y' and $f['isMandatory'] == 'y') { $back .= " <b>*</b> "; $onemandatory = true; } $back .= "</td><td>"; include_once 'lib/smarty_tiki/function.jscalendar.php'; $params['id'] = 'track[' . $f['fieldId'] . ']'; $params['fieldname'] = 'track[' . $f['fieldId'] . ']'; if (empty($f['options_array'][0]) || $f['options_array'][0] != 'd') { $params['showtime'] = 'y'; } else { $params['showtime'] = 'n'; } if (isset($f['value'])) { $params['date'] = $f['value']; } $back .= smarty_function_jscalendar_body($params, $smarty); } elseif ($f['type'] == 'C' && isset($_REQUEST['tr_preview'])) { // computed $back .= "<tr><td>" . wikiplugin_tracker_name($f['fieldId'], $f['name'], $field_errors) . "</td><td>"; $calc = preg_replace('/#([0-9]+)/', '$assocNumerics[\\1]', $f['options_array'][0]); eval('$computed = ' . $calc . ';'); $back .= $computed; } elseif ($f['type'] == 'l' && isset($_REQUEST['tr_preview'])) { // itemlist $back .= "<tr><td>" . wikiplugin_tracker_name($f['fieldId'], $f['name'], $field_errors) . "</td><td>"; $items = $trklib->get_items_list($f['options_array'][0], $f['options_array'][1], $assocValues[$f['options_array'][2]]); $i = 0; foreach ($items as $id) { $value = $trklib->get_item_value($f['options_array'][0], $id, $f['options_array'][3]); $assocValues[$f['fieldId']] = $value; // can be used in another computed field $assocNumerics[$f['fieldId']] = preg_replace('/[^0-9\\.\\+]/', '', $value); if ($i++ > 0) { $back .= ','; } $back .= $value; } } else { } } //old if (!empty($f['description']) && $f['type'] != 'h' && $f['type'] != 'S') { $back .= '<br /><i>' . $f['description'] . '</i>'; } if (empty($tpl) && empty($wiki)) { $back .= "</td></tr>"; } } } if (!empty($tpl)) { $smarty->security = true; $back .= $smarty->fetch($tpl); } elseif (!empty($wiki)) { $smarty->security = true; $back .= $smarty->fetch('wiki:' . $wiki); } if ($prefs['feature_antibot'] == 'y' && empty($user)) { $back .= $smarty->fetch('antibot.tpl'); } if (empty($tpl) && empty($wiki)) { $back .= "<tr><td></td><td>"; } if (!empty($preview)) { $back .= "<input type='submit' name='tr_preview' value='" . tra($preview) . "' />"; } $back .= "<input type='submit' name='action' value='" . tra($action) . "' />"; if ($showmandatory == 'y' and $onemandatory) { $back .= "<br /><i>" . tra("Fields marked with a * are mandatory.") . "</i>"; } if (empty($tpl) && empty($wiki)) { $back .= "</td></tr>"; $back .= "</table>"; } else { $back .= '</div>'; } $back .= '</form>'; if (!empty($page)) { $back .= '~/np~'; } return $back; } else { if (isset($_REQUEST['trackit']) and $_REQUEST['trackit'] == $trackerId) { $smarty->assign('wikiplugin_tracker', $trackerId); } //used in vote plugin $id = ' id="wikiplugin_tracker' . $trackerId . '"'; if ($showtitle == 'y') { $back .= '<div class="titlebar"' . $id . '>' . $tracker["name"] . '</div>'; $id = ''; } if ($showdesc == 'y') { $back .= '<div class="wikitext"' . $id . '>' . $tracker["description"] . '</div><br />'; $id = ''; } $back .= "<div{$id}>" . $data . '</div>'; return $back; } }
/** \brief send the email notifications dealing with the forum changes to * \brief outbound address + admin notification addresses / forum admin email + watching users addresses * \param $event = 'forum_post_topic' or 'forum_post_thread' * \param $object = forumId watch if forum_post_topic or topicId watch if forum_post_thread * \param $threadId = topicId if forum_post_thread * \param $title of the message * \param $topicName name of the parent topic */ function sendForumEmailNotification($event, $object, $forum_info, $title, $data, $author, $topicName, $messageId = '', $inReplyTo = '', $threadId, $parentId, $contributions = '', $postId = '') { global $tikilib, $prefs, $smarty, $userlib; // Per-forum From address overrides global default. if ($forum_info['outbound_from']) { $author = $userlib->clean_user($author); $my_sender = '"' . "{$author}" . '" <' . $forum_info['outbound_from'] . '>'; } else { $my_sender = $prefs['sender_email']; } //outbound email -> will be sent in utf8 - from sender_email if ($forum_info['outbound_address']) { include_once 'lib/webmail/tikimaillib.php'; $mail = new TikiMail(); $mail->setSubject($title); if (!empty($forum_info['outbound_mails_reply_link']) && $forum_info['outbound_mails_reply_link'] == 'y') { $foo = parse_url($_SERVER["REQUEST_URI"]); $machine = $tikilib->httpPrefix(true) . dirname($foo["path"]); if ($event == 'forum_post_topic') { $reply_link = "{$machine}/tiki-view_forum_thread.php?forumId=" . $forum_info['forumId'] . "&comments_parentId={$threadId}#form"; } else { $reply_link = "{$machine}/tiki-view_forum_thread.php?forumId=" . $forum_info['forumId'] . "&comments_reply_threadId={$object}&comments_parentId={$threadId}&post_reply=1#form"; } } else { $reply_link = ''; } $smarty->assign('title', $title); $smarty->assign('data', $data); $smarty->assign('reply_link', $reply_link); $smarty->assign('author', $author); $mail_data = $smarty->fetch("mail/forum_outbound.tpl"); $mail->setText($mail_data); $mail->setReplyTo($my_sender); $mail->setFrom($my_sender); $mail->setSubject($topicName); if ($inReplyTo) { $mail->setHeader("In-Reply-To", "<" . $inReplyTo . ">"); } global $commentslib; $attachments = $commentslib->get_thread_attachments($event == 'forum_post_topic' ? $threadId : $object, 0); if (count($attachments) > 0) { foreach ($attachments as $att) { $att_data = $commentslib->get_thread_attachment($att['attId']); if ($att_data['dir'] . $att_data['path'] == "") { // no path to file on disk $file = $att_data['data']; // read file from database } else { $file = $mail->getFile($att_data['dir'] . $att_data['path']); // read file from disk } $mail->addAttachment($file, $att_data['filename'], $att_data['filetype']); } } // Message-ID is set below buildMessage because otherwise lib/webmail/htmlMimeMail.php will over-write it. $mail->setHeader("Message-ID", "<" . $messageId . ">"); $mail->send(array($forum_info['outbound_address'])); } $nots = array(); $defaultLanguage = $prefs['site_language']; // Users watching this forum or this post if ($prefs['feature_user_watches'] == 'y' || $prefs['feature_group_watches'] == 'y') { $nots_raw = $tikilib->get_event_watches($event, $event == 'forum_post_topic' ? $forum_info['forumId'] : $threadId, $forum_info); $nots = array(); $users = array(); foreach ($nots_raw as $n) { if ($n['user'] != $author && !in_array($n['user'], $users)) { // make sure user receive only one notification even if he is monitoring both the topic and thread $n['language'] = $tikilib->get_user_preference($n['user'], "language", $defaultLanguage); $nots[] = $n; $users[] = $n['user']; } } } // Special forward address //TODO: merge or use the admin notification feature if ($forum_info["useMail"] == 'y') { $not['email'] = $forum_info['mail']; if ($not['user'] = $userlib->get_user_by_email($forum_info['mail'])) { $not['language'] = $tikilib->get_user_preference($not['user'], "language", $defaultLanguage); } else { $not['language'] = $defaultLanguage; } $nots[] = $not; } if ($prefs['feature_user_watches'] == 'y' && $prefs['feature_daily_report_watches'] == 'y') { $reportsManager = Reports_Factory::build('Reports_Manager'); $reportsManager->addToCache($nots, array("event" => $event, "forumId" => $forum_info['forumId'], "forumName" => $forum_info['name'], "topicId" => $threadId, "threadId" => $postId, "threadName" => $topicName, "user" => $author)); } if (count($nots)) { include_once 'lib/webmail/tikimaillib.php'; $smarty->assign('mail_forum', $forum_info["name"]); $smarty->assign('mail_title', $title); $smarty->assign('mail_date', $tikilib->now); $smarty->assign('mail_message', $data); $smarty->assign('mail_author', $author); if ($prefs['feature_contribution'] == 'y' && !empty($contributions)) { global $contributionlib; include_once 'lib/contribution/contributionlib.php'; $smarty->assign('mail_contributions', $contributionlib->print_contributions($contributions)); } $foo = parse_url($_SERVER["REQUEST_URI"]); $machine = $tikilib->httpPrefix(true) . dirname($foo["path"]); $machine = preg_replace("!/\$!", "", $machine); // just incase $smarty->assign('mail_machine', $machine); $smarty->assign('forumId', $forum_info["forumId"]); if ($event == "forum_post_topic") { $smarty->assign('new_topic', 'y'); } else { $smarty->assign('threadId', $object); } $smarty->assign('topicId', $threadId); $smarty->assign('mail_topic', $topicName); foreach ($nots as $not) { $mail = new TikiMail(); $mail->setUser($not['user']); $mail_data = $smarty->fetchLang($not['language'], "mail/user_watch_forum_subject.tpl"); $mail->setSubject($mail_data); $mail_data = $smarty->fetchLang($not['language'], "mail/forum_post_notification.tpl"); $mail->setText($mail_data); $mail->send(array($not['email'])); } } }
function wikiplugin_tracker($data, $params) { global $tikilib, $userlib, $user, $group, $page, $smarty, $prefs, $trklib, $captchalib; $parserlib = TikiLib::lib('parser'); static $iTRACKER = 0; ++$iTRACKER; if (isset($params['itemId']) && empty($params['itemId'])) return; include_once('lib/trackers/trackerlib.php'); $default = array('overwrite' => 'n', 'embedded' => 'n', 'showtitle' => 'n', 'showdesc' => 'n', 'sort' => 'n', 'showmandatory'=>'y', 'status' => '', 'registration' => 'n', 'emailformat' => 'text'); $params = array_merge($default, $params); $item = array(); extract($params, EXTR_SKIP); if ($prefs['feature_trackers'] != 'y') { return $smarty->fetch("wiki-plugins/error_tracker.tpl"); } if (empty($trackerId) || !($tracker = $trklib->get_tracker($trackerId))) { return $smarty->fetch("wiki-plugins/error_tracker.tpl"); } if ($t = $trklib->get_tracker_options($trackerId)) { $tracker = array_merge($tracker, $t); } if (empty($trackerId) && !empty($view) && $view == 'user' && $prefs['userTracker'] == 'y') { // the user tracker item $utid = $userlib->get_tracker_usergroup($user); if (!empty($utid) && !empty($utid['usersTrackerId'])) { $itemId = $trklib->get_item_id($utid['usersTrackerId'], $utid['usersFieldId'], $user); $trackerId = $utid['usersTrackerId']; $usertracker = true; } } elseif (!empty($trackerId) && !empty($view) && $view == 'user') {// the user item of a tracker $itemId = $trklib->get_user_item($trackerId, $tracker, null, null, strlen($status) == 1 ? $status : ''); $usertracker = true; } elseif (!empty($trackerId) && !empty($view) && $view == 'page' && !empty($_REQUEST['page']) && (($f = $trklib->get_field_id_from_type($trackerId, 'k', '1%')) || ($f = $trklib->get_field_id_from_type($trackerId, 'k', '%,1%')) || ($f = $trklib->get_field_id_from_type($trackerId, 'k')))) {// the page item $itemId = $trklib->get_item_id($trackerId, $f, $_REQUEST['page']); } elseif (!empty($trackerId) && !empty($_REQUEST['view_user'])) { $itemId = $trklib->get_user_item($trackerId, $tracker, $_REQUEST['view_user']); } elseif (!empty($_REQUEST['itemId']) && (empty($ignoreRequestItemId) || $ignoreRequestItemId != 'y')) { $itemId = $_REQUEST['itemId']; $item = $trklib->get_tracker_item($itemId); $trackerId = $item['trackerId']; } elseif (!empty($view) && $view == 'group') { $gtid = $userlib->get_grouptrackerid($group); if (isset($gtid['groupTrackerId'])) { $trackerId = $gtid['groupTrackerId']; $itemId = $trklib->get_item_id($trackerId, $gtid['groupFieldId'], $group); $grouptracker = true; } } if (!isset($trackerId)) { return $smarty->fetch("wiki-plugins/error_tracker.tpl"); } if (!isset($action)) { $action = array('Save'); } if (!is_array($action)) { $action = array( $action ); } if (isset($preview)) { if (empty($preview)) { $preview = 'Preview'; } } else { unset($_REQUEST['tr_preview']); } if (isset($reset)) { if (empty($reset)) { $reset = 'reset'; } } else { unset($_REQUEST['tr_reset']); } $smarty->assign('showmandatory', empty($wiki) && empty($tpl)? 'n': $showmandatory); if (!empty($wiki)) { if (preg_match('/^wiki:(.+)$/', $wiki, $wiki_matches)) { $wiki = $wiki_matches[1]; } $wiki = trim($wiki); } if (!isset($params['formtag'])) { $params['formtag'] = 'y'; } $fields_prefix = 'ins_'; if (isset($values)) { if (!is_array($values)) { $values = $parserlib->quotesplit(':', $values); foreach ($values as $i=>$v) { $values[$i] = preg_replace('/^"(.*)"$/', '$1', $v); } } } if (isset($_REQUEST['values'])) { if (is_array($_REQUEST['values'])) { foreach ($_REQUEST['values'] as $i=>$k) { $_REQUEST['values'][$i] = urldecode($k); } } else { $_REQUEST['values'] = urldecode($_REQUEST['values']); } } $perms = $tikilib->get_perm_object($trackerId, 'tracker', $tracker, false); if (empty($_SERVER['SCRIPT_NAME']) || strpos($_SERVER['SCRIPT_NAME'], 'tiki-register.php') === false) { if ($perms['tiki_p_create_tracker_items'] == 'n' && empty($itemId)) { return '<b>'.tra("You do not have permission to insert an item").'</b>'; } elseif (!empty($itemId)) { $item_info = $trklib->get_tracker_item($itemId); if (empty($item_info)) { return '<b>'.tra("Incorrect item").'</b>'; } $itemObject = Tracker_Item::fromInfo($item_info); if (! $itemObject->canModify()) { return '<b>'.tra("You do not have permission to modify an item").'</b>'; } } } if (!empty($itemId)) { global $logslib; include_once('lib/logs/logslib.php'); $logslib->add_action('Viewed', $itemId, 'trackeritem', $_SERVER['REQUEST_URI']); } if (isset($_REQUEST['removeattach']) && $tracker['useAttachments'] == 'y') { $owner = $trklib->get_item_attachment_owner($_REQUEST['removeattach']); if ($perms['tiki_p_admin_trackers'] == 'y' || ($user && $user == $owner)) { $trklib->remove_item_attachment($_REQUEST["removeattach"]); unset($_REQUEST['removeattach']); } } if (isset($_REQUEST['removeImage']) && !empty($_REQUEST['trackerId']) && !empty($_REQUEST['itemId']) && !empty($_REQUEST['fieldId']) && !empty($_REQUEST['fieldName'])) { $img_field = array('data' => array()); $img_field['data'][] = array('fieldId' => $_REQUEST['fieldId'], 'type' => 'i', 'name' => $_REQUEST['fieldName'], 'value' => 'blank'); $trklib->replace_item($_REQUEST['trackerId'], $_REQUEST['itemId'], $img_field); } $back = ''; $thisIsThePlugin = isset($_REQUEST['iTRACKER']) && $_REQUEST['iTRACKER'] == $iTRACKER; if (!isset($_REQUEST["ok"]) || $_REQUEST["ok"] == "n" || !$thisIsThePlugin || isset($_REQUEST['tr_preview'])) { $field_errors = array('err_mandatory'=>array(), 'err_value'=>array()); global $notificationlib; include_once('lib/notifications/notificationlib.php'); $tracker = $trklib->get_tracker($trackerId); $tracker = array_merge($tracker, $trklib->get_tracker_options($trackerId)); if ((!empty($tracker['start']) && $tikilib->now < $tracker['start']) || (!empty($tracker['end']) && $tikilib->now > $tracker['end'])) return; $outf = array(); $auto_fieldId = array(); $hidden_fieldId = array(); if (!empty($fields) || !empty($wiki) || !empty($tpl)) { if ($registration == 'y' && $prefs["user_register_prettytracker"] == 'y' && !empty($prefs["user_register_prettytracker_tpl"])) { $smarty->assign('register_login', $smarty->fetch('register-login.tpl')); $smarty->assign('register_email', $smarty->fetch('register-email.tpl')); $smarty->assign('register_pass', $smarty->fetch('register-pass.tpl')); $smarty->assign('register_pass2', $smarty->fetch('register-pass2.tpl')); $smarty->assign('register_passcode', $smarty->fetch('register-passcode.tpl')); $smarty->assign('register_groupchoice', $smarty->fetch('register-groupchoice.tpl')); $smarty->assign('register_antibot', $smarty->fetch('antibot.tpl')); $wiki = $prefs["user_register_prettytracker_tpl"]; } if (!empty($wiki)) { $outf = $trklib->get_pretty_fieldIds($wiki, 'wiki', $outputPretty); } elseif (!empty($tpl)) { $outf = $trklib->get_pretty_fieldIds($tpl, 'tpl', $outputPretty); } elseif (!empty($fields)) { $outf = preg_split('/ *: */', $fields); } if (!empty($_REQUEST['autosavefields'])) { $autosavefields = explode(':', $_REQUEST['autosavefields']); $autosavevalues = explode(':', $_REQUEST['autosavevalues']); if (isset($params['autosavefields'])) { $autosavefields = array_merge($autosavefields, $params['autosavefields']); $autosavevalues = array_merge($autosavevalues, $params['autosavevalues']); } } if (!empty($autosavefields)) { $auto_fieldId = array_merge($auto_fieldId, $autosavefields); } if ($user) { $hidden_fieldId[] = $trklib->get_field_id_from_type($trackerId, 'u', '1%'); // user owner $hidden_fieldId[] = $trklib->get_field_id_from_type($trackerId, 'u', '2%'); // user modifier $hidden_fieldId[] = $trklib->get_field_id_from_type($trackerId, 'g', '1%'); // owner group $hidden_fieldId[] = $trklib->get_field_id_from_type($trackerId, 'g', '2%'); // owner modifier } $hidden_fieldId[] = $trklib->get_field_id_from_type($trackerId, 'I', '1%'); // IP auto-assign $hidden_fieldId[] = $trklib->get_field_id_from_type($trackerId, 'k', '1%'); // page creator $auto_fieldId[] = $trklib->get_field_id_from_type($trackerId, 'q'); // auto-increment foreach ($auto_fieldId as $k => $v) { if (empty($v) || in_array($v, $outf)) { unset($auto_fieldId[$k]); } else { $outf[] = $v; } } foreach ($hidden_fieldId as $k => $v) { if (empty($v) || in_array($v, $outf)) { unset($hidden_fieldId[$k]); } else { $outf[] = $v; } } } $definition = Tracker_Definition::get($trackerId); $item_info = isset($item_info) ? $item_info : array(); $factory = $definition->getFieldFactory(); if (empty($item_info)) { $itemObject = Tracker_Item::newItem($trackerId); } elseif (! isset($itemObject)) { $itemObject = Tracker_Item::fromInfo($item_info); } if (empty($outf)) { $unfiltered = array('data' => $definition->getFields()); } else { $unfiltered = array('data' => array()); foreach ($outf as $fieldId) { $unfiltered['data'][] = $definition->getField($fieldId); } } $flds = array('data' => array()); foreach ($unfiltered['data'] as $f) { if ($itemObject->canModifyField($f['fieldId']) || $registration == 'y' && empty($item_info)) { $flds['data'][] = $f; } } // If we create multiple items, get field Ids, default values and separator if (!empty($fieldsfill)) { $fill_fields = preg_split('/ *: */', $fieldsfill); // Allow for superfluous spaces and ignore them $fill_flds = array('data' => array()); $fill_defaults = array(); $fill_flds_defaults = array(); // May be different from fill_defaults if some fields are not editable $fieldsfillnames = array(); if (trim($fieldsfilldefaults) != '') { $fill_defaults = preg_split('/ *: */', $fieldsfilldefaults); } foreach ($fill_fields as $k=>$fieldId) { if ($itemObject->canModifyField($fieldId)) { $tmp = $definition->getField($fieldId); $fill_flds['data'][] = $tmp; if (isset($fill_defaults[$k])) { $fill_flds_defaults[] = $fill_defaults[$k]; } else { $fill_flds_defaults[] = ''; } $fieldsfillnames[] = $tmp['name']; } } $fill_line_cant = count($fill_flds['data']); if ($fieldsfillseparator == '') { $fieldsfillseparator = '|'; } } $bad = array(); $embeddedId = false; $onemandatory = false; $full_fields = array(); $mainfield = ''; if ($thisIsThePlugin) { /* ------------------------------------- Recup all values from REQUEST -------------- */ if (!empty($autosavefields)) { foreach ($autosavefields as $i=>$f) { if (!$ff = $trklib->get_field($f, $flds['data'])) { continue; } if (preg_match('/categories\(([0-9]+)\)/', $autosavevalues[$i], $matches)) { if (ctype_digit($matches[1]) && $matches[1] > 0) { $filter = array('identifier'=>$matches[1], 'type'=>'descendants'); } else { $filter = NULL; } global $categlib; include_once('lib/categories/categlib.php'); $categs = $categlib->getCategories($filter, true, false); $_REQUEST["ins_$f"][] = $categs[0]['categId']; } elseif (preg_match('/preference\((.*)\)/', $autosavevalues[$i], $matches)) { $_REQUEST["ins_$f"] = $prefs[$matches[1]]; } elseif ($ff['type'] == 'e') { $_REQUEST["ins_$f"][] = $autosavevalues[$i]; } else { if (isset($params['levelupfields']) && in_array($f, $params['levelupfields'])) { $current_levelup_val = $trklib->get_item_value($trackerId, $itemId, $f); if ($autosavevalues[$i] <= $current_levelup_val) { continue; } } $_REQUEST["ins_$f"] = $autosavevalues[$i]; } } } foreach ($flds['data'] as $k => $field) { $handler = $factory->getHandler($field, $item_info); if ($handler) { $ins_fields['data'][$k] = array_merge($field, $handler->getFieldData($_REQUEST)); if (isset($ins_fields['data'][$k]['value'])) { // add ins value into field if creating or editing item $flds['data'][$k] = $ins_fields['data'][$k]; // to keep user input in case of errors (not only value) } } } $cpt = 0; if (isset($fields)) { $fields_plugin = preg_split('/:/', $fields); } if (!isset($itemId) && $tracker['oneUserItem'] == 'y') { $itemId = $trklib->get_user_item($trackerId, $tracker); } if ($embedded == 'y' && isset($_REQUEST['page'])) { $ins_fields["data"][] = array('fieldId' => $embeddedId, 'value' => $_REQUEST['page']); } if ($registration == 'y' && isset($params['userField'])) { $userField = $definition->getField($params['userField']); $userField['value'] = $_REQUEST['name']; $ins_fields['data'][] = $userField; } $ins_categs = 0; // important: non-array ins_categs means categories should remain unchanged $parent_categs_only = array(); foreach ($ins_fields['data'] as $current_field) { if ($current_field['type'] == 'e' && isset($current_field['selected_categories'])) { if (!is_array($ins_categs)) { $ins_categs = array(); } $ins_categs = array_merge($ins_categs, $current_field['selected_categories']); $parent_categs_only[] = $current_field['options_array'][0]; } } $categorized_fields = $definition->getCategorizedFields(); /* ------------------------------------- End recup all values from REQUEST -------------- */ /* ------------------------------------- Check field values for each type and presence of mandatory ones ------------------- */ $field_errors = $trklib->check_field_values($ins_fields, $categorized_fields, $trackerId, empty($itemId)?'':$itemId); if (empty($user) && $prefs['feature_antibot'] == 'y' && $registration != 'y') { // in_tracker session var checking is for tiki-register.php if (!$captchalib->validate()) { $field_errors['err_antibot'] = 'y'; } } // check valid page name for wiki output if requested if (isset($outputtowiki) && !empty($outputwiki)) { $newpagename = ''; foreach ($ins_fields["data"] as $fl) { if ($fl["fieldId"] == $outputtowiki) { $newpagename = $fl["value"]; } if ($fl["type"] == 'F') { $newpagefreetags = $fl["value"]; } $newpagefields[] = $fl["fieldId"]; } if ($newpagename) { if ($tikilib->page_exists($newpagename)) { $field_errors['err_outputwiki'] = tra('The page to output the results to already exists. Try another name.'); } $page_badchars_display = ":/?#[]@!$&'()*+,;=<>"; $page_badchars = "/[:\/?#\[\]@!$&'()*+,;=<>]/"; $matches = preg_match($page_badchars, $newpagename); if ($matches) { $field_errors['err_outputwiki'] = tr("The page to output the results to contains the following prohibited characters: %0. Try another name.", $page_badchars_display); } } else { unset($outputtowiki); } } if ( count($field_errors['err_mandatory']) == 0 && count($field_errors['err_value']) == 0 && empty($field_errors['err_antibot']) && empty($field_errors['err_outputwiki']) && !isset($_REQUEST['tr_preview'])) { /* ------------------------------------- save the item ---------------------------------- */ if (isset($_REQUEST['status'])) { $status = $_REQUEST['status']; } elseif (isset($newstatus) && ($newstatus == 'o' || $newstatus == 'c'|| $newstatus == 'p')) { $status = $newstatus; } elseif (empty($itemId) && isset($tracker['newItemStatus'])) { $status = $tracker['newItemStatus']; } else { $status = ''; } if (!empty($fieldsfill) && !empty($_REQUEST['ins_fill']) ) { // We create multiple items $fill_lines = explode("\n", $_REQUEST['ins_fill']); foreach ($fill_lines as $fill_line) { if (trim($fill_line) == '') { // Ignore blank lines continue; } $fill_line_item = explode($fieldsfillseparator,$fill_line,$fill_line_cant); // Extra fields are merged with the last field. this avoids data loss and permits a last text field with commas $rid = $trklib->replace_item($trackerId, $itemId, $ins_fields, $status, $ins_categs); for ($i=0;$i<$fill_line_cant;$i++) { if ($fill_line_item[$i] != '') { $fill_item = trim($fill_line_item[$i]); } else { $fill_item = $fill_flds_defaults[$i]; } $fill_rid = $trklib->modify_field($rid, $fill_flds['data'][$i]['fieldId'], $fill_item); } if (is_array($ins_categs)) { if ($registration == 'y' && empty($item_info)) { $override_perms = true; } else { $override_perms = false; } $trklib->categorized_item($trackerId, $rid, $mainfield, $ins_categs, $parent_categs_only, $override_perms); } if (isset($newItemRate)) { $trklib->replace_rating($trackerId, $rid, $newItemRateField, $user, $newItemRate); } } } else { if ($registration == 'y' && $_SERVER['REQUEST_METHOD'] != 'POST') { return false; } $rid = $trklib->replace_item($trackerId, $itemId, $ins_fields, $status, $ins_categs); if (is_array($ins_categs)) { if ($registration == 'y' && empty($item_info)) { $override_perms = true; } else { $override_perms = false; } $trklib->categorized_item($trackerId, $rid, $mainfield, $ins_categs, $parent_categs_only, $override_perms); } if (isset($newItemRate)) { $trklib->replace_rating($trackerId, $rid, $newItemRateField, $user, $newItemRate); } } // now for wiki output if desired if (isset($outputtowiki) && !empty($outputwiki)) { // note that values will be raw - that is the limit of the capability of this feature for now $newpageinfo = $tikilib->get_page_info($outputwiki); $wikioutput = $newpageinfo["data"]; $newpagefields = $trklib->get_pretty_fieldIds($outputwiki, 'wiki', $outputPretty); foreach ($newpagefields as $lf) { $wikioutput = str_replace('{$f_' . $lf . '}', $trklib->get_item_value($trackerId, $rid, $lf), $wikioutput); } if (isset($registration)) { $wikioutput = str_replace('{$register_login}', $user, $wikioutput); $wikioutput = str_replace('{$register_email}', $_REQUEST['email'], $wikioutput); } $tikilib->create_page($newpagename, 0, $wikioutput, $tikilib->now, '', $user, $tikilib->get_ip_address()); $cat_desc = ''; $cat_type = 'wiki page'; $cat_name = $newpagename; $cat_objid = $newpagename; $cat_href = "tiki-index.php?page=".urlencode($newpagename); if (count($ins_categs)) { $_REQUEST['cat_categories'] = $ins_categs; $_REQUEST['cat_categorize'] = 'on'; include_once("categorize.php"); } if (isset($newpagefreetags) && $newpagefreetags) { $_REQUEST['freetag_string'] = $newpagefreetags; include_once("freetag_apply.php"); } if ($discarditem == 'y') { $trklib->remove_tracker_item($rid); } if (empty($url)) { global $wikilib; $url[0] = $wikilib->sefurl($newpagename); } } // end wiki output if (!empty($email)) { $emailOptions = preg_split("#\|#", $email); if (is_numeric($emailOptions[0])) { $emailOptions[0] = $trklib->get_item_value($trackerId, $rid, $emailOptions[0]); } if (empty($emailOptions[0])) { // from $emailOptions[0] = $prefs['sender_email']; } if (empty($emailOptions[1])) { // to $emailOptions[1][0] = $prefs['sender_email']; } else { $emailOptions[1] = preg_split('/ *, */', $emailOptions[1]); foreach ($emailOptions[1] as $key=>$email) { if (is_numeric($email)) $emailOptions[1][$key] = $trklib->get_item_value($trackerId, $rid, $email); } } include_once('lib/webmail/tikimaillib.php'); $mail = new TikiMail(); $mail->setHeader('From', $emailOptions[0]); if (!empty($emailOptions[2])) { //tpl $emailOptions[2] = preg_split('/ *, */', $emailOptions[2]); foreach ($emailOptions[2] as $ieo=>$eo) { if (!preg_match('/\.tpl$/', $eo)) $emailOptions[2][$ieo] = $eo.'.tpl'; $tplSubject[$ieo] = str_replace('.tpl', '_subject.tpl', $emailOptions[2][$ieo]); } } else { $emailOptions[2] = array('tracker_changed_notification.tpl'); } if (empty($tplSubject)) { $tplSubject = array('tracker_changed_notification_subject.tpl'); } $itpl = 0; $smarty->assign('mail_date', $tikilib->now); $smarty->assign('mail_itemId', $rid); foreach ($emailOptions[1] as $ieo=>$ueo) { @$mail_data = $smarty->fetch('mail/'.$tplSubject[$itpl]); if (empty($mail_data)) $mail_data = tra('Tracker was modified at '). $_SERVER["SERVER_NAME"]; $mail->setSubject($mail_data); $mail_data = $smarty->fetch('mail/'.$emailOptions[2][$itpl]); if ($emailformat == 'html') { $mail->setHtml($mail_data); } else { $mail->setText($mail_data); } $mail->buildMessage(array('text_encoding' => '8bit')); $mail->send($ueo); if (isset($tplSubject[$itpl+1])) ++$itpl; } } if (empty($url)) { if (!empty($_REQUEST['ajax_add'])) { // called by tracker ItemLink fields when adding new list items global $access; while ( ob_get_level() ) { ob_end_clean(); } if ( $prefs['feature_obzip'] == 'y' ) { ob_start('ob_gzhandler'); } else { ob_start(); } // Need to add newly created itemId for item link selector $ins_fields['itemId'] = $rid; $access->output_serialized($ins_fields); ob_end_flush(); die; } else if (!empty($page)) { $url = "tiki-index.php?page=".urlencode($page); if (!empty($itemId)) { $url .= "&itemId=".$itemId; } $url .= "&ok=y&iTRACKER=$iTRACKER"; $url .= "#wikiplugin_tracker$iTRACKER"; header("Location: $url"); exit; } else { return ''; } } else { $key = 0; foreach ($action as $key=>$act) { if (!empty($_REQUEST["action$key"])) { break; } } $itemIdPos = strpos($url[$key], 'itemId'); if ($itemIdPos !== false) { if (strstr($url[$key], '#itemId')) { $url[$key] = str_replace('#itemId', $rid, $url[$key]); } else if (($itemIdPos+strlen('itemId') >= strlen($url[$key])-1) || (substr($url[$key], $itemIdPos+strlen('itemId'), 1) == "&")) { // replace by the itemId if in the end (or -1: for backward compatibility so that "&itemId=" also works) or if it is followed by an '&' $url[$key] = str_replace('itemId', 'itemId='.$rid, $url[$key]); } } header('Location: '.$url[$key]); exit; } /* ------------------------------------- end save the item ---------------------------------- */ } elseif (isset($_REQUEST['trackit']) and $_REQUEST['trackit'] == $trackerId) { $smarty->assign('wikiplugin_tracker', $trackerId);//used in vote plugin } } else if ((empty($itemId) || $overwrite == 'y') && !empty($values) || (!empty($_REQUEST['values']) and empty($_REQUEST['prefills']))) { // assign default values for each filedId specify if (empty($values)) { // url with values[]=x&values[] witouth the list of fields $values = $_REQUEST['values']; } if (!is_array($values)) { $values = array($values); } if (isset($fields)) { $fl = preg_split('/:/', $fields); for ($j = 0, $count_fl = count($fl); $j < $count_fl; $j++) { for ($i = 0, $count_flds = count($flds['data']); $i < $count_flds; $i++) { if ($flds['data'][$i]['fieldId'] == $fl[$j]) { $flds['data'][$i]['value'] = $values[$j]; } } } } else { // values contains all the fields value in the default order $i = 0; foreach ($values as $value) { $flds['data'][$i++]['value'] = $value; } } } elseif (!empty($itemId)) { if (isset($fields)) { $fl = preg_split('/:/', $fields); $filter = ''; foreach ($flds['data'] as $f) { if (in_array($f['fieldId'], $fl)) $filter[] = $f; } } else { $filter = &$flds['data']; } if (!empty($filter)) { foreach ($filter as $f) { $filter2[$f['fieldId']] = $f; } $flds['data'] = $trklib->get_item_fields($trackerId, $itemId, $filter2, $itemUser, true); } // todo: apply the values for fields with no values } else { if (isset($_REQUEST['values']) && isset($_REQUEST['prefills'])) { //url:prefields=1:2&values[]=x&values[]=y if (!is_array($_REQUEST['values'])) $_REQUEST['values'] = array($_REQUEST['values']); $fl = preg_split('/:/', $_REQUEST['prefills']); } else { unset($fl); } for ($i = 0, $count_flds2 = count($flds['data']); $i < $count_flds2; $i++) { if (isset($fl) && ($j = array_search($flds['data'][$i]['fieldId'], $fl)) !== false) { $flds['data'][$i]['value'] = $_REQUEST['values'][$j]; } else { $flds['data'][$i]['value'] = ''; // initialize fields with blank values } } } // Check that individual fields are in the tracker if (!empty($fields)) { $fl = preg_split('/:/', $fields); if ($sort == 'y') { $flds = $trklib->sort_fields($flds, $fl); } foreach ($fl as $l) { $ok = false; foreach ($flds['data'] as $f) { if ($f['fieldId'] == $l) { $ok = true; break; } } if (!$ok) { $back .= '<div class="error">' . tra('Incorrect fieldId:').' '.$l . '</div>'; } } } elseif (empty($fields) && empty($wiki) && empty($tpl)) { // in this case outf still be blank and needs to be filled foreach ($flds['data'] as $f) { $outf[] = $f['fieldId']; } } // Check that multiple fill fields are in the tracker if (!empty($fieldsfill)) { foreach ($fill_fields as $l) { $ok = false; foreach ($fill_flds['data'] as $f) { if ($f['fieldId'] == $l) { $ok = true; break; } } if (!$ok) { $back .= '<div class="error">' . tra('Incorrect fieldId:').' '.$l . '</div>'; } } } // Display warnings when needed if (count($field_errors['err_mandatory']) > 0) { $smarty->assign_by_ref('err_mandatory', $field_errors['err_mandatory']); } if (count($field_errors['err_value']) > 0) { $smarty->assign_by_ref('err_value', $field_errors['err_value']); } if (count($field_errors['err_mandatory']) > 0 || count($field_errors['err_value']) > 0) { $back .= $smarty->fetch('tracker_error.tpl'); $_REQUEST['error'] = 'y'; } if (isset($field_errors['err_antibot'])) { $back.= '<div class="simplebox highlight"><img src="img/icons/exclamation.png" alt=" '.tra('Error').'" style="vertical-align:middle" /> '; $back .= $captchalib->getErrors(); $back.= '</div><br />'; $_REQUEST['error'] = 'y'; } if (isset($field_errors['err_outputwiki'])) { $back.= '<div class="simplebox highlight"><img src="img/icons/exclamation.png" alt=" '.tra('Error').'" style="vertical-align:middle" /> '; $back .= $field_errors['err_outputwiki']; $back.= '</div><br />'; $_REQUEST['error'] = 'y'; } if (count($field_errors['err_mandatory']) > 0 || count($field_errors['err_value']) > 0 || isset($field_errors['err_antibot']) || isset($field_errors['err_outputwiki'])) { $smarty->assign('input_err', 'y'); } if (!empty($page)) $back .= '~np~'; $smarty->assign_by_ref('tiki_p_admin_trackers', $perms['tiki_p_admin_trackers']); $smarty->assign('trackerEditFormId', $iTRACKER); if (!empty($params['_ajax_form_ins_id'])) { global $headerlib; // when called via AJAX take a copy of the JS so far to allow collection $old_js['js'] = $headerlib->js; // of tracker form JS into a function to initialise it when the dialog is created $old_js['jq_onready'] = $headerlib->jq_onready; $headerlib->clear_js(); // so store existing js for later and clear } if ($prefs['feature_jquery'] == 'y' && $prefs['feature_jquery_validation'] == 'y') { global $validatorslib; include_once('lib/validatorslib.php'); $customvalidation = ''; $customvalidation_m = ''; if ($registration == 'y') { // email validation $customvalidation .= 'email: { '; $customvalidation .= 'required: true, '; $customvalidation .= 'email: true }, '; $customvalidation_m .= 'email: { email: "'. tra("Invalid email") . '", required: "' . tra("This field is required") . '"}, '; // password validation $customvalidation .= 'pass: { '; $customvalidation .= 'required: true, '; $customvalidation .= 'remote: { '; $customvalidation .= 'url: "validate-ajax.php", '; $customvalidation .= 'type: "post", '; $customvalidation .= 'data: { '; $customvalidation .= 'validator: "password", '; $customvalidation .= 'input: function() { '; $customvalidation .= 'return $("#pass1").val(); '; $customvalidation .= '} } } '; $customvalidation .= '}, '; $customvalidation_m .= 'pass: { required: "' . tra("This field is required") . '"}, '; // password repeat validation $customvalidation .= 'passAgain: { equalTo: "#pass1" }, '; $customvalidation_m .= 'passAgain: { equalTo: "'. tra("Passwords do not match") . '"}, '; // username validation $customvalidation .= 'name: { '; $customvalidation .= 'required: true, '; $customvalidation .= 'remote: { '; $customvalidation .= 'url: "validate-ajax.php", '; $customvalidation .= 'type: "post", '; $customvalidation .= 'data: { '; $customvalidation .= 'validator: "username", '; $customvalidation .= 'input: function() { '; $customvalidation .= 'return $("#name").val(); '; $customvalidation .= '} } } '; $customvalidation .= '}, '; $customvalidation_m .= 'name: { required: "' . tra("This field is required") . '"}, '; if (extension_loaded('gd') && function_exists('imagepng') && function_exists('imageftbbox') && $prefs['feature_antibot'] == 'y' && empty($user) && $prefs['recaptcha_enabled'] != 'y') { // antibot validation $customvalidation .= '"captcha[input]": { '; $customvalidation .= 'required: true, '; $customvalidation .= 'remote: { '; $customvalidation .= 'url: "validate-ajax.php", '; $customvalidation .= 'type: "post", '; $customvalidation .= 'data: { '; $customvalidation .= 'validator: "captcha", '; $customvalidation .= 'parameter: function() { '; $customvalidation .= 'return $jq("#captchaId").val(); '; $customvalidation .= '}, '; $customvalidation .= 'input: function() { '; $customvalidation .= 'return $jq("#antibotcode").val(); '; $customvalidation .= '} } } '; $customvalidation .= '}, '; $customvalidation_m .= '"captcha[input]": { required: "' . tra("This field is required") . '"}, '; } if ($prefs['useRegisterPasscode'] == 'y') { $customvalidation .= 'passcode: { required: true, remote: { url: "validate-ajax.php", type: "post", data: { validator: "passcode", input: function() { return $("#passcode").val(); } } } }, '; $customvalidation_m .= 'passcode: { required: "' . tra("This field is required") . '"}, '; } } $validationjs = $validatorslib->generateTrackerValidateJS($flds['data'], $fields_prefix, $customvalidation, $customvalidation_m); $smarty->assign('validationjs', $validationjs); $back .= $smarty->fetch('tracker_validator.tpl'); } if ($params['formtag'] == 'y') { $back .= '<form name="editItemForm' . $iTRACKER . '" id="editItemForm' . $iTRACKER . '" enctype="multipart/form-data" method="post"'.(isset($target)?' target="'.$target.'"':'').' action="'. $_SERVER['REQUEST_URI'] .'"><input type="hidden" name="trackit" value="'.$trackerId.'" />'; $back .= '<input type="hidden" name="refresh" value="1" />'; } $back .= '<input type="hidden" name="iTRACKER" value="'.$iTRACKER.'" />'; if (isset($_REQUEST['page'])) $back.= '<input type="hidden" name="page" value="'.$_REQUEST["page"].'" />'; // for registration if (isset($_REQUEST['name'])) $back.= '<input type="hidden" name="name" value="'.$_REQUEST["name"].'" />'; if (isset($_REQUEST['pass'])) { $back.= '<input type="hidden" name="pass" value="'.$_REQUEST["pass"].'" />'; $back.= '<input type="hidden" name="passAgain" value="'.$_REQUEST["pass"].'" />'; } if (isset($_REQUEST['email'])) $back.= '<input type="hidden" name="email" value="'.$_REQUEST["email"].'" />'; if (isset($_REQUEST['antibotcode'])) $back.= '<input type="hidden" name="antibotcode" value="'.$_REQUEST["antibotcode"].'" />'; if (isset($_REQUEST['chosenGroup'])) // for registration $back.= '<input type="hidden" name="chosenGroup" value="'.$_REQUEST["chosenGroup"].'" />'; if (isset($_REQUEST['register'])) $back.= '<input type="hidden" name="register" value="'.$_REQUEST["register"].'" />'; if ($showtitle == 'y') { $back.= '<div class="titlebar">'.$tracker["name"].'</div>'; } if ($showdesc == 'y' && $tracker['description']) { if ($tracker['descriptionIsParsed'] == 'y') { $back .= '<div class="wikitext">'.$tikilib->parse_data($tracker['description']).'</div><br />'; } else { $back.= '<div class="wikitext">'.tra($tracker["description"]).'</div><br />'; } } if (isset($_REQUEST['tr_preview'])) { // use for the computed and join fields $assocValues = array(); $assocNumerics = array(); foreach ($flds['data'] as $f) { if (empty($f['value']) && ($f['type'] == 'u' || $f['type'] == 'g' || $f['type'] == 'I') && ($f['options_array'][0] == '1' || $f['options_array'][0] == '2')) { //need to fill the selector fields for the join $f['value'] = ($f['type'] == 'I')? $tikilib->get_ip_address(): (($f['type'] == 'g')? $group: $user); } $assocValues[$f['fieldId']] = $f['value']; $assocNumerics[$f['fieldId']] = preg_replace('/[^0-9\.\+]/', '', $f['value']); // get rid off the $ and such unit } } if (!empty($itemId)) { $item = array('itemId'=>$itemId, 'trackerId'=>$trackerId); } else { $item = array('itemId'=>''); } foreach ($flds['data'] as $i=>$f) { // collect additional infos if (in_array($f['fieldId'], $outf)) { $flds['data'][$i]['ins_id'] = ($f['type'] == 'e')?'ins_'.$f['fieldId']: $fields_prefix.$f['fieldId']; if (($f['isHidden'] == 'c' || $f['isHidden'] == 'p') && !empty($itemId) && !isset($item['creator'])) { $item['creator'] = $trklib->get_item_creator($trackerId, $itemId); } } } if (!empty($showstatus) && $showstatus == 'y') { $status_types = $trklib->status_types(); $smarty->assign_by_ref('status_types', $status_types); $smarty->assign('form_status', 'status'); $smarty->assign_by_ref('tracker', $tracker); if (!empty($item_info)) { $smarty->assign_by_ref('item', $item_info); } $status_input = $smarty->fetch('tracker_status_input.tpl'); } if ($registration == "y") { $back .= '<input type="hidden" name="register" value="Register" />'; } // Loop on tracker fields and display form if (empty($tpl) && empty($wiki)) { $back.= '<table class="wikiplugin_tracker">'; if (!empty($showstatus) && $showstatus == 'y') { $back .= '<tr><td>'.tra('Status').'</td><td>'.$status_input.'</td></tr>'; } if ($registration == 'y' && $prefs["user_register_prettytracker"] != 'y') { $back .= $smarty->fetch('register-form.tpl'); } } else { $back .= '<div class="wikiplugin_tracker">'; if (!empty($showstatus) && $showstatus == 'y') { $smarty->assign_by_ref('f_status_input', $status_input); } } $backLength0 = strlen($back); foreach ($flds['data'] as $f) { if (!in_array($f['fieldId'], $auto_fieldId) && in_array($f['fieldId'], $hidden_fieldId)) { // Show in hidden form $back.= '<span style="display:none;">' . wikiplugin_tracker_render_input($f, $item) . '</span>'; } elseif (!in_array($f['fieldId'], $auto_fieldId) && in_array($f['fieldId'], $outf)) { if ($showmandatory == 'y' and $f['isMandatory'] == 'y') { $onemandatory = true; } if ($f['type'] == 'A') { $smarty->assign_by_ref('tiki_p_attach_trackers', $perms['tiki_p_attach_trackers']); } if (!empty($tpl) || !empty($wiki)) { if (!empty($outputPretty) && in_array($f['fieldId'], $outputPretty)) { $smarty->assign('f_'.$f['fieldId'], '<span class="outputPretty" id="track_'.$f['fieldId'].'" name="track_'.$f['fieldId'].'">'. wikiplugin_tracker_render_value($f, $item) . '</span>'); } else { $mand = ($showmandatory == 'y' and $f['isMandatory'] == 'y')? " <strong class='mandatory_star'>*</strong> ":''; $smarty->assign('f_'.$f['fieldId'], wikiplugin_tracker_render_input($f, $item).$mand); } } else { $back.= "<tr><td"; if (!empty($colwidth)) { $back .= " width='".$colwidth."'"; } $back .= '><label for="' . $f['ins_id'] . '">' . wikiplugin_tracker_name($f['fieldId'], tra($f['name']), $field_errors) . '</label>'; if ($showmandatory == 'y' and $f['isMandatory'] == 'y') { $back.= " <strong class='mandatory_star'>*</strong> "; } $back.= '</td><td>'; $back .= wikiplugin_tracker_render_input($f, $item); } if ($f['type'] != 'S') { $back .= '<div class="trackerplugindesc">'; } if ($f['type'] != 'S') { if ($f['descriptionIsParsed'] == 'y') { $back .= $tikilib->parse_data($f['description']); } else { $back .= tra($f['description']); } } if ($f['type'] != 'S') { $back .= '</div>'; } } } if ( isset($params['fieldsfill']) && !empty($params['fieldsfill']) && empty($itemId) ) { // $back.= '<tr><td><label for="ins_fill">' . tra("Create multiple items (one per line).") . '</label>'; $back.= '<tr><td><label for="ins_fill">' . tra("Insert one item per line:") . '<br />' . '<br />' . '<br />' . '</label>'; $back.= <<<FILL </td><td> <input type="hidden" value="" name="mode_wysiwyg"/> <input type="hidden" value="" name="mode_normal"/> <div class="edit-zone"> <textarea id="ins_fill" class="wikiedit" style="width: 99%;" data-syntax="" data-codemirror="" onkeyup="" rows="15" cols="50" name="ins_fill" > </textarea > </div> <input type="hidden" value="n" name="wysiwyg"/> <div name="ins_fill_desc" class="trackerplugindesc" > FILL; $back.= sprintf(tra('Each line is a list of %d field values separated with: %s'),$fill_line_cant,htmlspecialchars($fieldsfillseparator)); $back .= '</div><div name="ins_fill_desc2" class="trackerplugindesc" >' . htmlspecialchars(implode($fieldsfillseparator,$fieldsfillnames)) ; $back .= '</div></td></tr>'; } if (!empty($tpl)) { $smarty->security = true; $back .= $smarty->fetch($tpl); } elseif (!empty($wiki)) { $smarty->security = true; if ($tikilib->page_exists($wiki)) { $back .= $smarty->fetch('wiki:'.$wiki); } else { $back .= '<span class="error">' . tr('Missing wiki template page "%0"', htmlspecialchars($wiki)) . '</span>'; } } include_once('lib/smarty_tiki/function.trackerheader.php'); $back .= smarty_function_trackerheader(array('level'=>-1, 'title'=>'', 'inTable' =>(empty($tpl) && empty($wiki))?'wikiplugin_tracker':'' ), $smarty); if ($prefs['feature_antibot'] == 'y' && empty($user) && $formtag != 'n' && ($registration != 'y' || $prefs["user_register_prettytracker"] != 'y') ) { // in_tracker session var checking is for tiki-register.php $smarty->assign('showmandatory', $showmandatory); $smarty->assign('antibot_table', empty($wiki) && empty($tpl)?'n': 'y'); $back .= $smarty->fetch('antibot.tpl'); } if (empty($tpl) && empty($wiki)) { $back.= "</table>"; } else { $back .= '</div>'; } if ($params['formtag'] == 'y') { $back .= '<div class="input_submit_container">'; if (!empty($reset)) { $back .= '<input class="button submit preview" type="reset" name="tr_reset" value="'.tra($reset).'" />'; } if (!empty($preview)) { $back .= '<input class="button submit preview" type="submit" name="tr_preview" value="'.tra($preview).'" />'; } foreach ($action as $key=>$act) { $back .= '<input class="button submit" type="submit" name="action'.$key.'" value="'.tra($act).'" onclick="needToConfirm=false" />'; } $back .= '</div>'; } if ($showmandatory == 'y' and $onemandatory) { $back.= "<em class='mandatory_note'>".tra("Fields marked with a * are mandatory.")."</em>"; } if ($params['formtag'] == 'y') { $back.= '</form>'; } if (!empty($params['_ajax_form_ins_id'])) { // save new js in a function for the form init fn $headerlib->add_js(' var ajaxTrackerFormInit_' . $params['_ajax_form_ins_id'] . ' = function() {' . $headerlib->output_js(false) . '}', 10); // put back the pre-existing js $headerlib->js = array_merge( $headerlib->js, $old_js['js']); $headerlib->jq_onready = array_merge( $headerlib->jq_onready, $old_js['jq_onready']); } if (!empty($page)) $back .= '~/np~'; $smarty->assign_by_ref('tiki_p_admin_trackers', $perms['tiki_p_admin_trackers']); return $back; } else { if (isset($_REQUEST['trackit']) and $_REQUEST['trackit'] == $trackerId) $smarty->assign('wikiplugin_tracker', $trackerId);//used in vote plugin $id = ' id="wikiplugin_tracker'.$iTRACKER.'"'; if ($showtitle == 'y') { $back.= '<div class="titlebar"'.$id.'>'.$tracker["name"].'</div>'; $id = ''; } if ($showdesc == 'y') { $back.= '<div class="wikitext"'.$id.'>'.$tracker["description"].'</div><br />'; $id = ''; } $back.= "<div$id>".$data.'</div>'; return $back; } }
/** \brief send the email notifications dealing with the forum changes to * \brief outbound address + admin notification addresses / forum admin email + watching users addresses * \param $event = 'forum_post_topic' or 'forum_post_thread' * \param $object = forumId watch if forum_post_topic or topicId watch if forum_post_thread * \param $threadId = topicId if forum_post_thread * \param $title of the message * \param $topicName name of the parent topic */ function sendForumEmailNotification($event, $object, $forum_info, $title, $data, $author, $topicName, $messageId = '', $inReplyTo = '', $threadId, $parentId = '') { global $tikilib, $feature_user_watches, $smarty, $userlib, $sender_email; // Per-forum From address overrides global default. if ($forum_info['outbound_from']) { $my_sender = '"' . "{$author}" . '" <' . $forum_info['outbound_from'] . '>'; } else { $my_sender = $sender_email; } //outbound email -> will be sent in utf8 - from sender_email if ($forum_info['outbound_address']) { include_once 'lib/webmail/tikimaillib.php'; $mail = new TikiMail(); $mail->setSubject($title); $foo = parse_url($_SERVER["REQUEST_URI"]); $machine = $tikilib->httpPrefix() . dirname($foo["path"]); $reply_link = "\n\n----\n\nReply Link: <" . $machine . "tiki-view_forum_thread.php?forumId=" . $forum_info['forumId'] . "&comments_reply_threadId={$object}&comments_parentId={$threadId}&post_reply=1#form>\n"; if (array_key_exists('outbound_mails_reply_link', $forum_info) && $forum_info['outbound_mails_reply_link']) { $mail->setText($title . "\n" . $data . $reply_link); } else { $mail->setText($title . "\n" . $data); } $mail->setHeader("Reply-To", $my_sender); $mail->setHeader("From", $my_sender); $mail->setSubject($topicName); if ($inReplyTo) { $mail->setHeader("In-Reply-To", "<" . $inReplyTo . ">"); } global $commentslib; $attachments = $commentslib->get_thread_attachments($object, 0); if (count($attachments) > 0) { foreach ($attachments as $att) { $att_data = $commentslib->get_thread_attachment($att['attId']); $file = $mail->getFile($att_data['dir'] . $att_data['path']); $mail->addAttachment($file, $att_data['filename'], $att_data['filetype']); } } $mail->buildMessage(); // Message-ID is set below buildMessage because otherwise lib/webmail/htmlMimeMail.php will over-write it. $mail->setHeader("Message-ID", "<" . $messageId . ">"); $mail->send(array($forum_info['outbound_address'])); } $nots = array(); $defaultLanguage = $tikilib->get_preference("language", "en"); // Users watching this forum or this post if ($feature_user_watches == 'y') { $nots = $tikilib->get_event_watches($event, $object); for ($i = count($nots) - 1; $i >= 0; --$i) { $nots[$i]['language'] = $tikilib->get_user_preference($nots[$i]['user'], "language", $defaultLanguage); } } // Special forward address //TODO: merge or use the admin notification feature if ($forum_info["useMail"] == 'y') { $not['email'] = $forum_info['mail']; if ($not['user'] = $userlib->get_user_by_email($forum_info['mail'])) { $not['language'] = $tikilib->get_user_preference($not['user'], "language", $defaultLanguage); } else { $not['language'] = $defaultLanguage; } $nots[] = $not; } if (count($nots)) { include_once 'lib/webmail/tikimaillib.php'; $mail = new TikiMail(); $smarty->assign('mail_forum', $forum_info["name"]); $smarty->assign('mail_title', $title); $smarty->assign('mail_date', date("U")); $smarty->assign('mail_message', $data); $smarty->assign('mail_author', $author); $foo = parse_url($_SERVER["REQUEST_URI"]); $machine = $tikilib->httpPrefix() . dirname($foo["path"]); $machine = preg_replace("!/\$!", "", $machine); // just incase $smarty->assign('mail_machine', $machine); $smarty->assign('forumId', $forum_info["forumId"]); if ($event == "forum_post_topic") { $smarty->assign('new_topic', 'y'); $smarty->assign('topicId', $threadId); } else { $smarty->assign('topicId', $object); } $smarty->assign('mail_topic', $topicName); foreach ($nots as $not) { $mail->setUser($not['user']); $mail_data = $smarty->fetchLang($not['language'], "mail/notification_subject.tpl"); $mail->setSubject($mail_data); $mail_data = $smarty->fetchLang($not['language'], "mail/forum_post_notification.tpl"); $mail->setText($mail_data); $mail->buildMessage(); $mail->send(array($not['email'])); } } }
function send_replace_item_notifications($args) { global $prefs, $user; // Don't send a notification if this operation is part of a bulk import if ($args['bulk_import']) { return; } $trackerId = $args['trackerId']; $itemId = $args['object']; $new_values = $args['values']; $old_values = $args['old_values']; $the_data = $this->generate_watch_data($old_values, $new_values, $trackerId, $itemId, $args['version']); $tracker_definition = Tracker_Definition::get($trackerId); $tracker_info = $tracker_definition->getInformation(); $watchers = $this->get_notification_emails($trackerId, $itemId, $tracker_info, $new_values['status'], $old_values['status']); if (count($watchers) > 0) { $simpleEmail = isset($tracker_info['simpleEmail']) ? $tracker_info['simpleEmail'] : "n"; $trackerName = $tracker_info['name']; if (!isset($_SERVER["SERVER_NAME"])) { $_SERVER["SERVER_NAME"] = $_SERVER["HTTP_HOST"]; } include_once('lib/webmail/tikimaillib.php'); if ( $simpleEmail == "n" ) { $desc = $this->get_isMain_value($trackerId, $itemId); if ($tracker_info['doNotShowEmptyField'] === 'y') { // remove empty fields if tracker says so $the_data = preg_replace('/\[-\[.*?\]-\] -\[\(.*?\)\]-:\n\n----------\n/', '', $the_data); } $smarty = TikiLib::lib('smarty'); $smarty->assign('mail_date', $this->now); $smarty->assign('mail_user', $user); $smarty->assign('mail_itemId', $itemId); $smarty->assign('mail_item_desc', $desc); $smarty->assign('mail_trackerId', $trackerId); $smarty->assign('mail_trackerName', $trackerName); $smarty->assign('server_name', $_SERVER['SERVER_NAME']); $foo = parse_url($_SERVER["REQUEST_URI"]); $machine = $this->httpPrefix(true). $foo["path"]; $smarty->assign('mail_machine', $machine); $parts = explode('/', $foo['path']); if (count($parts) > 1) unset ($parts[count($parts) - 1]); $smarty->assign('mail_machine_raw', $this->httpPrefix(true). implode('/', $parts)); $smarty->assign_by_ref('status', $new_values['status']); foreach ($watchers as $watcher) { $label = $itemId ? tra('Item Modification', $watcher['language']) : tra('Item creation', $watcher['language']); $mail_action = "\r\n$label\r\n\r\n"; $mail_action.= tra('Tracker', $watcher['language']).":\n $trackerName\r\n"; $mail_action.= tra('Item', $watcher['language']).":\n $itemId $desc"; $smarty->assign('mail_action', $mail_action); $smarty->assign('mail_data', $the_data); if (isset($watcher['action'])) $smarty->assign('mail_action', $watcher['action']); $smarty->assign('mail_to_user', $watcher['user']); $mail_data = $smarty->fetchLang($watcher['language'], 'mail/tracker_changed_notification.tpl'); $mail = new TikiMail($watcher['user']); $mail->setSubject($smarty->fetchLang($watcher['language'], 'mail/tracker_changed_notification_subject.tpl')); $mail->setText($mail_data); $mail->setHeader("From", $prefs['sender_email']); $mail->send(array($watcher['email'])); } } else { // Use simple email $foo = parse_url($_SERVER["REQUEST_URI"]); $machine = $this->httpPrefix(true). $foo["path"]; $parts = explode('/', $foo['path']); if (count($parts) > 1) { unset ($parts[count($parts) - 1]); } $machine = $this->httpPrefix(true). implode('/', $parts); $userlib = TikiLib::lib('user'); if (!empty($user)) { $my_sender = $userlib->get_user_email($user); } else { // look if a email field exists $fieldId = $this->get_field_id_from_type($trackerId, 'm'); if (!empty($fieldId)) { $my_sender = $this->get_item_value($trackerId, $itemId, $fieldId); } } // Try to find a Subject in $the_data looking for strings marked "-[Subject]-" TODO: remove the tra (language translation by submitter) $the_string = '/^\[-\['.tra('Subject').'\]-\] -\[[^\]]*\]-:\n(.*)/m'; $subject_test_unchanged = preg_match($the_string, $the_data, $unchanged_matches); $the_string = '/^\[-\['.tra('Subject').'\]-\]:\n(.*)\n(.*)\n\n(.*)\n(.*)/m'; $subject_test_changed = preg_match($the_string, $the_data, $matches); $subject = ''; if ( $subject_test_unchanged == 1 ) { $subject = $unchanged_matches[1]; } if ( $subject_test_changed == 1 ) { $subject = $matches[1].' '.$matches[2].' '.$matches[3].' '.$matches[4]; } $i = 0; foreach ($watchers as $watcher) { $mail = new TikiMail($watcher['user']); // first we look for strings marked "-[...]-" to translate by watcher language $translate_strings[$i] = preg_match_all('/-\[([^\]]*)\]-/', $the_data, $tra_matches); $watcher_subject = $subject; $watcher_data = $the_data; if ($translate_strings[$i] > 0) { foreach ($tra_matches[1] as $match) { // now we replace the marked strings with correct translations $tra_replace = tra($match, $watcher['language']); $tra_match = "/-\[".preg_quote($match)."\]-/m"; $watcher_subject = preg_replace($tra_match, $tra_replace, $watcher_subject); $watcher_data = preg_replace($tra_match, $tra_replace, $watcher_data); } } $mail->setSubject('['.$trackerName.'] '.str_replace('> ', '', $watcher_subject).' (' . tra('Tracker was modified at %0 by %1', $watcher['language'], false, array($_SERVER["SERVER_NAME"], $user)) . ')'); $mail->setText(tra('View the tracker item at:', $watcher['language'])." $machine/tiki-view_tracker_item.php?itemId=$itemId\n\n" . $watcher_data); if ( ! empty( $my_sender ) ) { $mail->setHeader("Reply-To", $my_sender); } $mail->send(array($watcher['email'])); $i++; } } } }
function payment_behavior_cart_gift_certificate_purchase($productId = 0, $giftcertemail = '', $quantity = 1, $orderId = 0, $orderItemId = 0) { global $trklib; require_once "lib/trackers/trackerlib.php"; global $prefs; $params['trackerId'] = $prefs['payment_cart_giftcert_tracker']; $redeemCodeFieldId = $trklib->get_field_id($params['trackerId'], 'Redeem Code'); $nameFieldId = $trklib->get_field_id($params['trackerId'], 'Name'); $modeFieldId = $trklib->get_field_id($params['trackerId'], 'Mode'); $onelineDescriptionFieldId = $trklib->get_field_id($params['trackerId'], 'One line description'); $longDescriptionFieldId = $trklib->get_field_id($params['trackerId'], 'Long Description'); $origbalanceFieldId = $trklib->get_field_id($params['trackerId'], 'Original Balance or Percentage'); $curbalanceFieldId = $trklib->get_field_id($params['trackerId'], 'Current Balance or Percentage'); $params['copyFieldIds'][] = $nameFieldId; $params['copyFieldIds'][] = $trklib->get_field_id($params['trackerId'], 'Type'); $params['copyFieldIds'][] = $trklib->get_field_id($params['trackerId'], 'Type Reference'); $params['copyFieldIds'][] = $origbalanceFieldId; $params['copyFieldIds'][] = $modeFieldId; $params['copyFieldIds'][] = $onelineDescriptionFieldId; $params['updateFieldIds'][] = $trklib->get_field_id($params['trackerId'], 'Gift Certificate ID'); $params['updateFieldIds'][] = $trklib->get_field_id($params['trackerId'], 'Origination'); $params['updateFieldIds'][] = $redeemCodeFieldId; $params['updateFieldIds'][] = $curbalanceFieldId; $params['updateFieldIds'][] = $trklib->get_field_id($params['trackerId'], 'Admin notes'); $params['updateFieldIds'][] = $trklib->get_field_id($params['trackerId'], 'Order ID'); $params['updateFieldIds'][] = $trklib->get_field_id($params['trackerId'], 'Order Item ID'); $balancefield = 'f_' . $origbalanceFieldId; $params['updateFieldValues'] = array('', 'Order', '-randomstring-', $balancefield, "Purchased by {$giftcertemail}", $orderId, $orderItemId); // Product tracker info $productsTrackerId = $prefs['payment_cart_product_tracker']; $giftcertTemplateFieldId = $trklib->get_field_id($productsTrackerId, $prefs['payment_cart_giftcerttemplate_fieldname']); if (!$productId) { return false; } $giftcertId = $trklib->get_item_value($productsTrackerId, $productId, $giftcertTemplateFieldId); $params['itemId'] = $giftcertId; $params['copies_on_load'] = $quantity; $params['return_array'] = 'y'; include_once 'lib/wiki-plugins/wikiplugin_trackeritemcopy.php'; $return_array = wikiplugin_trackeritemcopy('', $params); $giftcerts = array(); // Get additional information foreach ($return_array['items'] as $newItemId) { $newItem = $trklib->get_tracker_item($newItemId); $newGiftcert['name'] = $newItem[$nameFieldId]; $newGiftcert['redeemCode'] = $newItem[$redeemCodeFieldId]; $newGiftcert['onelineDescription'] = $newItem[$onelineDescriptionFieldId]; $newGiftcert['longDescription'] = $newItem[$longDescriptionFieldId]; $newGiftcert['value'] = $newItem[$curbalanceFieldId]; if (strpos($newItem[$modeFieldId], 'Percentage') !== false) { $newGiftcert['isPercentage'] = true; } else { $newGiftcert['isPercentage'] = false; } $giftcerts[] = $newGiftcert; } // Send email to user with gift cert require_once 'lib/webmail/tikimaillib.php'; global $smarty, $prefs; $smarty->assign('giftcerts', $giftcerts); $smarty->assign('numberCodes', count($return_array['items'])); $mail_subject = $smarty->fetch('mail/cart_gift_cert_subject.tpl'); $mail_data = $smarty->fetch('mail/cart_gift_cert.tpl'); $mail = new TikiMail(); $mail->setSubject($mail_subject); $mail->setText($mail_data); $mail->setHeader("From", $prefs['sender_email']); $mail->send($giftcertemail); return true; }
} if (!empty($_REQUEST['addresses'])) { $smarty->assign('addresses', $_REQUEST['addresses']); } if (!empty($_REQUEST['name'])) { $smarty->assign('name', $_REQUEST['name']); } if (!empty($_REQUEST['comment'])) { $smarty->assign('comment', $_REQUEST['comment']); } if (empty($errors)) { include_once 'lib/webmail/tikimaillib.php'; $mail = new TikiMail(); $smarty->assign_by_ref('mail_site', $_SERVER['SERVER_NAME']); $mail->setFrom($from); $mail->setHeader("Return-Path", "<{$from}>"); $mail->setHeader("Reply-To", "<{$from}>"); if (isset($_REQUEST['report']) && $_REQUEST['report'] == 'y') { $subject = tra('Report to the webmaster', $prefs['site_language']); } else { $subject = $smarty->fetch('mail/tellAFriend_subject.tpl'); } $txt = $smarty->fetch('mail/tellAFriend.tpl'); $mail->setSubject($subject); $mail->setText($txt); $mail->buildMessage(); $ok = true; foreach ($emails as $email) { $ok = $ok && $mail->send(array($email)); } if ($ok) {
*/ if (isset($_GET['fileId']) && $detailtoken['parameters'] == '{"fileId":"' . $_GET['fileId'] . '"}') { $_SESSION['allowed'][$_GET['fileId']] = true; } // If notification then alert if ($prefs['share_token_notification'] == 'y') { $nots = $tikilib->get_event_watches('auth_token_called', $detailtoken['tokenId']); $smarty->assign('prefix_url', $base_host); // Select in db the tokenId $notificationPage = ''; $smarty->assign_by_ref('page_token', $notificationPage); if (is_array($nots)) { include_once 'lib/webmail/tikimaillib.php'; $mail = new TikiMail(); $mail->setFrom($prefs['sender_email']); $mail->setHeader('Return-Path', '<' . $prefs['sender_email'] . '>'); $mail->setHeader('Reply-To', '<' . $prefs['sender_email'] . '>'); $mail->setSubject($detailtoken['email'] . ' ' . tra(' has accessed your temporary shared content')); foreach ($nots as $i => $not) { $notificationPage = $not['url']; // Delete token from url $notificationPage = preg_replace('/[\\?&]TOKEN=' . $detailtoken['token'] . '/', '', $notificationPage); // If file Gallery $smarty->assign('filegallery', 'n'); if (preg_match("/\\btiki-download_file.php\\b/i", $notificationPage)) { include_once 'lib/filegals/filegallib.php'; $smarty->assign('filegallery', 'y'); $aParams = (array) json_decode($detailtoken['parameters']); $smarty->assign('fileId', $aParams['fileId']); $aFileInfos = $filegallib->get_file_info($aParams['fileId']); $smarty->assign('filegalleryId', $aFileInfos['galleryId']);
/** *\brief send the email notifications dealing with wiki page changes to * admin notification addresses + watching users addresses (except editor is configured) * \$event: 'wiki_page_created'|'wiki_page_changed'|wiki_page_deleted |wiki_file_attached * */ function sendWikiEmailNotification($wikiEvent, $pageName, $edit_user, $edit_comment, $oldver, $edit_data, $machine = '', $diff = '', $minor = false, $contributions = '', $structure_parent_id = 0, $attId = 0, $lang = '') { global $tikilib, $prefs, $smarty, $userlib; global $notificationlib; include_once 'lib/notifications/notificationlib.php'; $nots = array(); $defaultLanguage = $prefs['site_language']; if ($wikiEvent == 'wiki_file_attached') { $event = 'wiki_page_changed'; } else { $event = $wikiEvent; } if ($prefs['feature_user_watches'] == 'y') { $nots = $tikilib->get_event_watches($event, $pageName); } if ($prefs['feature_user_watches'] == 'y' && $event == 'wiki_page_changed') { global $structlib; include_once 'lib/structures/structlib.php'; $nots2 = $structlib->get_watches($pageName); if (!empty($nots2)) { $nots = array_merge($nots, $nots2); } if ($prefs['wiki_watch_editor'] != "y") { for ($i = count($nots) - 1; $i >= 0; --$i) { if ($nots[$i]['user'] == $edit_user) { unset($nots[$i]); break; } } } foreach (array_keys($nots) as $i) { $nots[$i]['language'] = $tikilib->get_user_preference($nots[$i]['user'], "language", $defaultLanguage); } } if ($prefs['feature_user_watches'] == 'y' && $event == 'wiki_page_created' && $structure_parent_id) { global $structlib; include_once 'lib/structures/structlib.php'; $nots = array_merge($nots, $structlib->get_watches('', $structure_parent_id)); } // admin notifications // If it's a minor change, get only the minor change watches. if ($minor) { $emails = $notificationlib->get_mail_events('wiki_page_changes_incl_minor', $pageName); // look for pageName and any page } else { // else if it's not minor change, get both watch types. $emails1 = $notificationlib->get_mail_events('wiki_page_changes', $pageName); // look for pageName and any page $emails2 = $notificationlib->get_mail_events('wiki_page_changes_incl_minor', $pageName); // look for pageName and any page $emails = array_merge($emails1, $emails2); } foreach ($emails as $email) { if ($prefs['wiki_watch_editor'] != "y" && $email == $edit_user) { continue; } if (!testEmailInList($nots, $email)) { $not = array('email' => $email); if ($not['user'] = $userlib->get_user_by_email($email)) { $not['language'] = $tikilib->get_user_preference($not['user'], "language", $defaultLanguage); } else { $not['language'] = $defaultLanguage; } $nots[] = $not; } } if ($edit_user == '') { $edit_user = tra('Anonymous'); } if ($prefs['feature_user_watches'] == 'y' && $prefs['feature_daily_report_watches'] == 'y') { if ($wikiEvent == 'wiki_file_attached') { $reportsManager = Reports_Factory::build('Reports_Manager'); $reportsManager->addToCache($nots, array("event" => $wikiEvent, "pageName" => $pageName, 'attId' => $attId, "editUser" => $edit_user, "editComment" => $edit_comment, 'filename' => $edit_data)); } else { $reportsManager = Reports_Factory::build('Reports_Manager'); $reportsManager->addToCache($nots, array("event" => $wikiEvent, "pageName" => $pageName, "object" => $pageName, "editUser" => $edit_user, "editComment" => $edit_comment, "oldVer" => $oldver)); } } if (count($nots)) { $edit_data = TikiLib::htmldecode($edit_data); include_once 'lib/mail/maillib.php'; $smarty->assign('mail_site', $_SERVER["SERVER_NAME"]); $smarty->assign('mail_page', $pageName); $smarty->assign('mail_date', $tikilib->now); $smarty->assign('mail_user', $edit_user); $smarty->assign('mail_comment', $edit_comment); $newver = $oldver + 1; $smarty->assign('mail_oldver', $oldver); $smarty->assign('mail_newver', $newver); $smarty->assign('mail_data', $edit_data); $smarty->assign('mail_attId', $attId); $foo = parse_url($_SERVER["REQUEST_URI"]); $machine = $tikilib->httpPrefix(true) . dirname($foo["path"]); $smarty->assign('mail_machine', $machine); if ($prefs['feature_contribution'] == 'y' && !empty($contributions)) { global $contributionlib; include_once 'lib/contribution/contributionlib.php'; $smarty->assign('mail_contributions', $contributionlib->print_contributions($contributions)); } $parts = explode('/', $foo['path']); if (count($parts) > 1) { unset($parts[count($parts) - 1]); } $smarty->assign('mail_machine_raw', $tikilib->httpPrefix(true) . implode('/', $parts)); $smarty->assign_by_ref('mail_pagedata', $edit_data); $smarty->assign_by_ref('mail_diffdata', $diff); if ($event == 'wiki_page_created') { $smarty->assign('mail_action', 'new'); } elseif ($event == 'wiki_page_deleted') { $smarty->assign('mail_action', 'delete'); } elseif ($wikiEvent == 'wiki_file_attached') { $smarty->assign('mail_action', 'attach'); } else { $smarty->assign('mail_action', 'edit'); } include_once 'lib/webmail/tikimaillib.php'; foreach ($nots as $not) { if (empty($not['email'])) { continue; } $smarty->assign('watchId', $not['watchId']); $mail_subject = $smarty->fetchLang($not['language'], "mail/user_watch_wiki_page_changed_subject.tpl"); $mail_data = $smarty->fetchLang($not['language'], "mail/user_watch_wiki_page_changed.tpl"); $mail = new TikiMail($not['user']); $mail->setSubject(sprintf($mail_subject, $pageName)); $mail->setText($mail_data); $mail->setHeader("From", $prefs['sender_email']); $mail->send(array($not['email'])); } } }
function replace_item($trackerId, $itemId, $ins_fields, $status = '', $ins_categs = array(), $bulk_import = false) { global $user; global $smarty; global $notificationlib; global $sender_email; global $cachelib; global $categlib; global $feature_categories; global $tiki_p_admin_trackers; $now = date("U"); if ($itemId) { if ($status) { $oldStatus = $this->getOne("select `status` from `tiki_tracker_items` where `itemId`=?", array($itemId)); $query = "update `tiki_tracker_items` set `status`=?,`lastModif`=? where `itemId`=?"; $result = $this->query($query, array($status, (int) $now, (int) $itemId)); } else { $query = "update `tiki_tracker_items` set `lastModif`=? where `itemId`=?"; $result = $this->query($query, array((int) $now, (int) $itemId)); } } else { if (!$status) { $status = $this->getOne("select `value` from `tiki_tracker_options` where `trackerId`=? and `name`=?", array((int) $trackerId, 'newItemStatus')); } if (empty($status)) { $status = 'o'; } $query = "insert into `tiki_tracker_items`(`trackerId`,`created`,`lastModif`,`status`) values(?,?,?,?)"; $result = $this->query($query, array((int) $trackerId, (int) $now, (int) $now, $status)); $new_itemId = $this->getOne("select max(`itemId`) from `tiki_tracker_items` where `created`=? and `trackerId`=?", array((int) $now, (int) $trackerId)); } if ($feature_categories == 'y') { global $categlib; include_once 'lib/categories/categlib.php'; $old_categs = $categlib->get_object_categories("tracker {$trackerId}", $itemId ? $itemId : $new_itemId); $new_categs = array_diff($ins_categs, $old_categs); $del_categs = array_diff($old_categs, $ins_categs); $remain_categs = array_diff($old_categs, $new_categs, $del_categs); } $the_data = tra('Status:') . ' '; $statusTypes = $this->status_types(); if (isset($oldStatus) && $oldStatus != $status) { $the_data .= $statusTypes[$oldStatus]['label'] . ' -> '; } $the_data .= $statusTypes[$status]['label'] . "\n\n"; foreach ($ins_fields["data"] as $i => $array) { if (!isset($ins_fields["data"][$i]["type"]) or $ins_fields["data"][$i]["type"] == 's' or ($ins_fields["data"][$i]["isHidden"] == 'p' or $ins_fields["data"][$i]["isHidden"] == 'y') and $tiki_p_admin_trackers != 'y') { // system type, do nothing // hidden field type require tracker amdin perm } else { // ----------------------------- // save image on disk if ($ins_fields["data"][$i]["type"] == 'i' && isset($ins_fields["data"][$i]['value'])) { $itId = $itemId ? $itemId : $new_itemId; $old_file = $this->get_item_value($trackerId, $itemId, $ins_fields["data"][$i]['fieldId']); if ($ins_fields["data"][$i]["value"] == 'blank') { if (file_exists($old_file)) { unlink($old_file); } $ins_fields["data"][$i]["value"] = ''; } else { if ($ins_fields["data"][$i]['value'] != '' && $this->check_image_type($ins_fields["data"][$i]['file_type'])) { $opts = split(',', $ins_fields['data'][$i]["options"]); if (!empty($opts[4])) { global $imagegallib; include_once 'lib/imagegals/imagegallib.php'; $imagegallib->image = $ins_fields["data"][$i]['value']; $imagegallib->rescaleImage($opts[4], $opts[4]); $ins_fields["data"][$i]['value'] = $imagegallib->image; } if ($ins_fields["data"][$i]['file_size'] <= $this->imgMaxSize) { $file_name = $this->get_image_filename($ins_fields["data"][$i]['file_name'], $itemId, $ins_fields["data"][$i]['fieldId']); $fw = fopen($file_name, "wb"); fwrite($fw, $ins_fields["data"][$i]['value']); fflush($fw); fclose($fw); $ins_fields['data'][$i]['value'] = $file_name; if (file_exists($old_file) && $old_file != $file_name) { unlink($old_file); } } } else { continue; } } } // --------------------------- $fieldId = $ins_fields["data"][$i]["fieldId"]; if (isset($ins_fields["data"][$i]["name"])) { $name = $ins_fields["data"][$i]["name"]; } else { $name = $this->getOne("select `name` from `tiki_tracker_fields` where `fieldId`=?", array((int) $fieldId)); } $value = @$ins_fields["data"][$i]["value"]; if ($ins_fields["data"][$i]["type"] == 'e' && $feature_categories == 'y') { // category type $my_categs = $categlib->get_child_categories($ins_fields['data'][$i]["options"]); $aux = array(); foreach ($my_categs as $cat) { $aux[] = $cat['categId']; } $my_categs = $aux; $my_new_categs = array_intersect($new_categs, $my_categs); $my_del_categs = array_intersect($del_categs, $my_categs); $my_remain_categs = array_intersect($remain_categs, $my_categs); if (sizeof($my_new_categs) + sizeof($my_del_categs) == 0) { $the_data .= "{$name} " . tra('(unchanged)') . ":\n"; } else { $the_data .= "{$name} :\n"; } if (sizeof($my_new_categs) > 0) { $the_data .= " " . tra("Added:") . "\n"; $the_data .= $this->_describe_category_list($my_new_categs); } if (sizeof($my_del_categs) > 0) { $the_data .= " " . tra("Removed:") . "\n"; $the_data .= $this->_describe_category_list($my_del_categs); } if (sizeof($my_remain_categs) > 0) { $the_data .= " " . tra("Remaining:") . "\n"; $the_data .= $this->_describe_category_list($my_remain_categs); } $the_data .= "\n"; if ($itemId) { $query = "select `itemId` from `tiki_tracker_item_fields` where `itemId`=?"; if ($this->getOne($query, (int) $itemId)) { $query = "update `tiki_tracker_item_fields` set `value`=? where `itemId`=? and `fieldId`=?"; $this->query($query, array('', (int) $itemId, (int) $fieldId)); } else { $query = "insert into `tiki_tracker_item_fields`(`itemId`,`fieldId`,`value`) values(?,?,?)"; $this->query($query, array((int) $itemId, (int) $fieldId, '')); } } else { $query = "insert into `tiki_tracker_item_fields`(`itemId`,`fieldId`,`value`) values(?,?,?)"; $this->query($query, array((int) $new_itemId, (int) $fieldId, '')); } } else { $is_date = (isset($ins_fields["data"][$i]["type"]) and ($ins_fields["data"][$i]["type"] == 'f' or $ins_fields["data"][$i]["type"] == 'j')); $is_visible = !isset($ins_fields["data"][$i]["isHidden"]) || $ins_fields["data"][$i]["isHidden"] == 'n'; if ($itemId) { $result = $this->query('select `value` from `tiki_tracker_item_fields` where `itemId`=? and `fieldId`=?', array((int) $itemId, (int) $fieldId)); if ($row = $result->fetchRow()) { if ($is_visible) { $old_value = $row['value']; if ($is_date) { $old_value = date('r', (int) $old_value); $new_value = date('r', (int) $value); } else { $new_value = $value; } if ($old_value != $new_value) { $the_data .= "{$name}" . ":\n " . tra("Old:") . " {$old_value}\n " . tra("New:") . " {$new_value}\n\n"; } else { $the_data .= "{$name} " . tra('(unchanged)') . ":\n {$value}\n\n"; } } $query = "update `tiki_tracker_item_fields` set `value`=? where `itemId`=? and `fieldId`=?"; $this->query($query, array($value, (int) $itemId, (int) $fieldId)); } else { if ($is_visible) { if ($is_date) { $new_value = date('r', (int) $value); } else { $new_value = $value; } $the_data .= "{$name}" . ":\n {$value}\n\n"; } $query = "insert into `tiki_tracker_item_fields`(`itemId`,`fieldId`,`value`) values(?,?,?)"; $this->query($query, array((int) $itemId, (int) $fieldId, (string) $value)); } } else { if ($is_visible) { if ($is_date) { $new_value = date('r', (int) $value); } else { $new_value = $value; } $the_data .= "{$name}" . ":\n {$value}\n\n"; } $query = "insert into `tiki_tracker_item_fields`(`itemId`,`fieldId`,`value`) values(?,?,?)"; $this->query($query, array((int) $new_itemId, (int) $fieldId, (string) $value)); } $cachelib->invalidate(md5('trackerfield' . $fieldId . 'o')); $cachelib->invalidate(md5('trackerfield' . $fieldId . 'c')); $cachelib->invalidate(md5('trackerfield' . $fieldId . 'p')); $cachelib->invalidate(md5('trackerfield' . $fieldId . 'op')); $cachelib->invalidate(md5('trackerfield' . $fieldId . 'oc')); $cachelib->invalidate(md5('trackerfield' . $fieldId . 'pc')); $cachelib->invalidate(md5('trackerfield' . $fieldId . 'opc')); } } } // Don't send a notification if this operation is part of a bulk import if (!$bulk_import) { $options = $this->get_tracker_options($trackerId); include_once 'lib/notifications/notificationlib.php'; $emails = $notificationlib->get_mail_events('tracker_modified', $trackerId); $emails2 = $notificationlib->get_mail_events('tracker_item_modified', $itemId); if (array_key_exists("outboundEmail", $options) && $options["outboundEmail"]) { $emails3 = array($options["outboundEmail"]); } else { $emails3 = array(); } $emails = array_merge($emails, $emails2, $emails3); if (!isset($_SERVER["SERVER_NAME"])) { $_SERVER["SERVER_NAME"] = $_SERVER["HTTP_HOST"]; } if (array_key_exists("simpleEmail", $options)) { $simpleEmail = $options["simpleEmail"]; } else { $simpleEmail = "n"; } $trackerName = $this->getOne("select `name` from `tiki_trackers` where `trackerId`=?", array((int) $trackerId)); if (count($emails) > 0) { if ($simpleEmail == "n") { $smarty->assign('mail_date', $now); $smarty->assign('mail_user', $user); if ($itemId) { $mail_action = "\r\n" . tra('Item Modification') . "\r\n\r\n"; $mail_action .= tra('Tracker') . ":\n " . $trackerName . "\r\n"; $mail_action .= tra('Item') . ":\n " . $itemId; } else { $mail_action = "\r\n" . tra('Item creation') . "\r\n\r\n"; $mail_action .= tra('Tracker') . ': ' . $trackerName; } $smarty->assign('mail_action', $mail_action); $smarty->assign('mail_data', $the_data); if ($itemId) { $smarty->assign('mail_itemId', $itemId); } else { $smarty->assign('mail_itemId', $new_itemId); } $smarty->assign('mail_trackerId', $trackerId); $smarty->assign('mail_trackerName', $trackerName); $foo = parse_url($_SERVER["REQUEST_URI"]); $machine = $this->httpPrefix() . $foo["path"]; $smarty->assign('mail_machine', $machine); $parts = explode('/', $foo['path']); if (count($parts) > 1) { unset($parts[count($parts) - 1]); } $smarty->assign('mail_machine_raw', $this->httpPrefix() . implode('/', $parts)); $mail_data = $smarty->fetch('mail/tracker_changed_notification.tpl'); include_once 'lib/webmail/tikimaillib.php'; $mail = new TikiMail(); $mail->setSubject(tra('Tracker was modified at ') . $_SERVER["SERVER_NAME"]); $mail->setText($mail_data); $mail->setHeader("From", $sender_email); $mail->send($emails); } else { // Use simple email global $userlib; $user_email = $userlib->get_user_email($user); $my_sender = $user_email; // Default subject $subject = '[' . $trackerName . '] ' . tra('Tracker was modified at ') . $_SERVER["SERVER_NAME"]; // Try to find a Subject in $the_data $subject_test = preg_match('/^Subject:\\n .*$/m', $the_data, $matches); if ($subject_test == 1) { $subject = preg_replace('/^Subject:\\n /m', '', $matches[0]); // Remove the subject from $the_data $the_data = preg_replace('/^Subject:\\n .*$/m', '', $the_data); } $the_data = preg_replace('/^.+:\\n /m', '', $the_data); //outbound email -> will be sent in utf8 - from sender_email include_once 'lib/webmail/tikimaillib.php'; $mail = new TikiMail(); $mail->setSubject($subject); $mail->setText($the_data); if (!empty($my_sender)) { $mail->setHeader("From", $my_sender); } $mail->send($emails); } } } $cant_items = $this->getOne("select count(*) from `tiki_tracker_items` where `trackerId`=?", array((int) $trackerId)); $query = "update `tiki_trackers` set `items`=?,`lastModif`=? where `trackerId`=?"; $result = $this->query($query, array((int) $cant_items, (int) $now, (int) $trackerId)); if (!$itemId) { $itemId = $new_itemId; } global $cachelib; require_once 'lib/cache/cachelib.php'; $cachelib->invalidate('trackerItemLabel' . $itemId); return $itemId; }
/** * Send a message to a user */ function post_message($user, $from, $to, $cc, $subject, $body, $priority, $replyto_hash = '', $replyto_email = '', $bcc_sender = '') { global $smarty, $userlib, $prefs; $subject = strip_tags($subject); $body = strip_tags($body, '<a><b><img><i>'); // Prevent duplicates $hash = md5($subject . $body); if ($this->getOne('select count(*) from `messu_messages` where `user`=? and `user_from`=? and `hash`=?', array($user, $from, $hash))) { return false; } $query = 'insert into `messu_messages`' . ' (`user`, `user_from`, `user_to`, `user_cc`, `subject`, `body`, `date`' . ', `isRead`, `isReplied`, `isFlagged`, `priority`, `hash`, `replyto_hash`)' . ' values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; $this->query($query, array($user, $from, $to, $cc, $subject, $body, (int) $this->now, 'n', 'n', 'n', (int) $priority, $hash, $replyto_hash)); // Now check if the user should be notified by email $foo = parse_url($_SERVER['REQUEST_URI']); $machine = $this->httpPrefix(true) . $foo['path']; $machine = str_replace('messu-compose', 'messu-mailbox', $machine); $machine = str_replace('messu-broadcast', 'messu-mailbox', $machine); if ($this->get_user_preference($user, 'minPrio', 6) <= $priority) { if (!isset($_SERVER['SERVER_NAME'])) { $_SERVER['SERVER_NAME'] = $_SERVER['HTTP_HOST']; } $email = $userlib->get_user_email($user); if ($email) { include_once 'lib/webmail/tikimaillib.php'; $smarty->assign('mail_site', $_SERVER['SERVER_NAME']); $smarty->assign('mail_machine', $machine); $smarty->assign('mail_date', $this->now); $smarty->assign('mail_user', stripslashes($user)); $smarty->assign('mail_from', stripslashes($from)); $smarty->assign('mail_subject', stripslashes($subject)); $smarty->assign('mail_body', stripslashes($body)); $mail = new TikiMail($user); $lg = $this->get_user_preference($user, 'language', $prefs['site_language']); if (empty($subject)) { $s = $smarty->fetchLang($lg, 'mail/messu_message_notification_subject.tpl'); $mail->setSubject(sprintf($s, $_SERVER['SERVER_NAME'])); } else { $mail->setSubject($subject); } $mail_data = $smarty->fetchLang($lg, 'mail/messu_message_notification.tpl'); $mail->setText($mail_data); if ($userlib->user_exists($from)) { $from_email = $userlib->get_user_email($from); if ($bcc_sender === 'y' && !empty($from_email)) { $mail->setHeader('Bcc', $from_email); } if ($replyto_email !== 'y' && $userlib->get_user_preference($from, 'email is public', 'n') == 'n') { $from_email = ''; // empty $from_email if not to be used - saves getting it twice } if (!empty($from_email)) { $mail->setHeader('Reply-To', $from_email); } } if (!empty($prefs['sender_email'])) { $mail->setHeader('From', $prefs['sender_email']); } else { if (!empty($from_email)) { $mail->setHeader('From', $from_email); } } if (!$mail->send(array($email), 'mail')) { return false; //TODO echo $mail->errors; } } } return true; }
function replace_item($trackerId, $itemId, $ins_fields, $status = '') { if (!$trackerId) { return; } global $user, $smarty, $notificationlib, $prefs, $cachelib; // update if ($itemId) { if ($status) { $query = "update `tiki_tracker_items` set `status`=?,`lastModif`=? where `itemId`=?"; $result = $this->query($query, array($status, (int) $this->now, (int) $itemId)); } else { $query = "update `tiki_tracker_items` set `lastModif`=? where `itemId`=?"; $result = $this->query($query, array((int) $this->now, (int) $itemId)); } // insert } else { if (!$status) { $status = $this->getOne("select `value` from `tiki_tracker_options` where `trackerId`=? and `name`=?", array((int) $trackerId, 'newItemStatus')); } if (empty($status)) { $status = 'o'; } $query = "insert into `tiki_tracker_items`(`trackerId`,`created`,`lastModif`,`status`) values(?,?,?,?)"; $result = $this->query($query, array((int) $trackerId, (int) $this->now, (int) $this->now, $status)); $new_itemId = $this->getOne("select max(`itemId`) from `tiki_tracker_items` where `created`=? and `trackerId`=?", array((int) $this->now, (int) $trackerId)); } $the_data = ''; // -- // inserts an empty item // if necessary $this->get_tracker_values_specs($trackerId, $explicit, $dsn); $tableId = $this->get_table_id($trackerId, $explicit); if ($itemId == false) { $query = "insert into {$tableId}(`itemId`)values(?)"; $this->query($query, array((int) $new_itemId)); } // -- for ($i = 0; $i < count($ins_fields["data"]); $i++) { if (isset($ins_fields["data"][$i]["type"]) and $ins_fields["data"][$i]["type"] == 'e') { } elseif (isset($ins_fields["data"][$i]["fieldId"])) { $fieldId = $ins_fields["data"][$i]["fieldId"]; if (isset($ins_fields["data"][$i]["name"])) { $name = $ins_fields["data"][$i]["name"]; } else { $name = $this->getOne("select `name` from `tiki_tracker_fields` where `fieldId`=?", array((int) $fieldId)); } if (isset($ins_fields["data"][$i]["value"])) { $value = $ins_fields["data"][$i]["value"]; } else { $value = ''; } if (isset($ins_fields["data"][$i]["type"]) and $ins_fields["data"][$i]["type"] == 'q' and $itemId == false) { $value = $this->getOne("select max(cast(field_{$fieldId} as UNSIGNED)) from {$tableId}") + 1; } if (isset($ins_fields["data"][$i]["type"]) and ($ins_fields["data"][$i]["type"] == 'f' or $ins_fields["data"][$i]["type"] == 'j')) { $human_value = $this->date_format("%a, %e %b %Y %H:%M:%S %O", $ins_fields["data"][$i]["value"]); $the_data .= " {$name} = {$human_value}\n"; } else { $the_data .= " {$name} = {$value}\n"; } $colId = $this->get_col_id($fieldId, $explicit); $itId = $itemId ? $itemId : $new_itemId; $query = "update {$tableId} set {$colId}=? where `itemId`=?"; //echo "UPDATE : $colId -> $value<br>\n"; $this->query($query, array($value, $itId)); $cachelib->invalidate(md5('trackerfield' . $fieldId . 'o')); $cachelib->invalidate(md5('trackerfield' . $fieldId . 'c')); $cachelib->invalidate(md5('trackerfield' . $fieldId . 'p')); $cachelib->invalidate(md5('trackerfield' . $fieldId . 'op')); $cachelib->invalidate(md5('trackerfield' . $fieldId . 'oc')); $cachelib->invalidate(md5('trackerfield' . $fieldId . 'pc')); $cachelib->invalidate(md5('trackerfield' . $fieldId . 'opc')); } } //------------------------------------------------------------------------- $options = $this->get_tracker_options($trackerId); include_once 'lib/notifications/notificationlib.php'; $emails = $notificationlib->get_mail_events('tracker_modified', $trackerId); $emails2 = $notificationlib->get_mail_events('tracker_item_modified', $itemId, array('trackerId' => $trackerId)); if (array_key_exists("outboundEmail", $options)) { $emails3 = array($options["outboundEmail"]); } else { $emails3 = array(); } $emails = array_merge($emails, $emails2, $emails3); if (!isset($_SERVER["SERVER_NAME"])) { $_SERVER["SERVER_NAME"] = $_SERVER["HTTP_HOST"]; } if (array_key_exists("simpleEmail", $options)) { $simpleEmail = $options["simpleEmail"]; } else { $simpleEmail = "n"; } $trackerName = $this->getOne("select `name` from `tiki_trackers` where `trackerId`=?", array((int) $trackerId)); if (count($emails) > 0) { if ($simpleEmail == "n") { $smarty->assign('mail_date', $this->now); $smarty->assign('mail_user', $user); if ($itemId) { $mail_action = "\r\n" . tra('Item Modification') . "\r\n\r\n"; $mail_action .= tra('Tracker') . ': ' . $trackerName . "\r\n"; $mail_action .= tra('Item') . ': ' . $itemId; } else { $mail_action = "\r\n" . tra('Item creation') . "\r\n\r\n"; $mail_action .= tra('Tracker') . ': ' . $trackerName; } $smarty->assign('mail_action', $mail_action); $smarty->assign('mail_data', $the_data); if ($itemId) { $smarty->assign('mail_itemId', $itemId); } else { $smarty->assign('mail_itemId', $new_itemId); } $smarty->assign('mail_trackerId', $trackerId); $smarty->assign('mail_trackerName', $trackerName); $foo = parse_url($_SERVER["REQUEST_URI"]); $machine = $this->httpPrefix() . $foo["path"]; $smarty->assign('mail_machine', $machine); $parts = explode('/', $foo['path']); if (count($parts) > 1) { unset($parts[count($parts) - 1]); } $smarty->assign('mail_machine_raw', $this->httpPrefix() . implode('/', $parts)); $mail_data = $smarty->fetch('mail/tracker_changed_notification.tpl'); $mail_subject = $smarty->fetch('mail/tracker_changed_notification_subject.tpl'); include_once 'lib/mail/maillib.php'; foreach ($emails as $email) { if ($email != '') { mail($email, encode_headers('[' . $trackerName . '] ' . $mail_subject, 'utf-8'), $mail_data, 'From: ' . $prefs['sender_email'] . "\r\nContent-type: text/plain;charset=utf-8"); } } } else { // Use simple email global $userlib; $user_email = $userlib->get_user_email($user); $my_sender = $user_email; $smarty->assign('mail_data', $the_data); $mail_subject = $smarty->fetch('mail/tracker_changed_notification_subject.tpl'); // Default subject $subject = '[' . $trackerName . '] ' . $mail_subject . $_SERVER["SERVER_NAME"]; // Try to find a Subject in $the_data $subject_test = preg_match('/^ Subject = .*$/m', $the_data, $matches); if ($subject_test == 1) { $subject = preg_replace('/^ Subject = /m', '', $matches[0]); // Remove the subject from $the_data $the_data = preg_replace('/^ Subject = .*$/m', '', $the_data); } $the_data = preg_replace('/^ [A-Za-z]+ = /m', '', $the_data); //outbound email -> will be sent in utf8 - from sender_email include_once 'lib/webmail/tikimaillib.php'; $mail = new TikiMail(); $mail->setSubject($subject); $mail->setText($the_data); if (!empty($my_sender)) { $mail->setHeader("From", $my_sender); } $mail->send($emails); } } $cant_items = $this->getOne("select count(*) from `tiki_tracker_items` where `trackerId`=?", array((int) $trackerId)); $query = "update `tiki_trackers` set `items`=?,`lastModif`=? where `trackerId`=?"; $result = $this->query($query, array((int) $cant_items, (int) $this->now, (int) $trackerId)); if (!$itemId) { $itemId = $new_itemId; } if ($prefs['feature_search'] == 'y' && $prefs['feature_search_fulltext'] != 'y' && $prefs['search_refresh_index_mode'] == 'normal') { require_once 'lib/search/refresh-functions.php'; refresh_index('tracker_items', $itemId); } return $itemId; }
/** * * Sends a promotional email to the given recipients * @param string $sender Sender e-Mail address * @param string|array $recipients List of recipients either as array or comma/semi colon separated string * @param string $subject E-Mail subject * @param string $url_for_friend URL to share * @param array $tokenlist * @return bool true on success / false if the supplied parameters were incorrect/missing or an error occurred sending the mail */ function sendMail($sender, $recipients, $subject, $tokenlist = array()) { global $errors, $prefs, $smarty, $user, $userlib, $logslib; global $registrationlib; include_once ('lib/registration/registrationlib.php'); if (empty($sender)) { $errors[] = tra('Your email is mandatory'); return false; } if (function_exists('validate_email')) { $ok = validate_email($sender, $prefs['validateEmail']); } else { $ret = $registrationlib->SnowCheckMail($sender, '', 'mini'); $ok = $ret[0]; } if ($ok) { $from = str_replace(array("\r", "\n"), '', $sender); } else { $errors[] = tra('Invalid email') . ': ' . $_REQUEST['email']; return false; } $recipients=checkAddresses($recipients); if ($recipients === false) { return false; } include_once ('lib/webmail/tikimaillib.php'); $mail = new TikiMail(); $smarty->assign_by_ref('mail_site', $_SERVER['SERVER_NAME']); if (!empty($user) && $from == $userlib->get_user_email($user)) { $mail->setFrom($from); $mail->setHeader('Return-Path', "<$from>"); $mail->setHeader('Reply-To', "<$from>"); } $mail->setSubject($subject); $ok = true; foreach ($recipients as $i=>$recipient) { $url_for_friend = $tokenlist[$i]['url']; $smarty->assign('url_for_friend', $url_for_friend); $txt = $smarty->fetch('mail/share.tpl'); // Rebuild email message texte $mail->is_built = false; $mail->setText($txt); $mailsent = $mail->send(array($recipient)); if (!$mailsent) { $errors[] = tra('Error sending mail to'). " $recipient"; } else { $logslib->add_log('share', tra('Share page').': '.$url_for_friend.' '.tra('to').' '.$recipient.' '.tra('by').' '.$user); } $ok = $ok && $mailsent; } return $ok; }
$machine = $tikilib->httpPrefix(true) . dirname($foo["path"]); $machine = preg_replace("!/\$!", "", $machine); // just incase $smarty->assign('mail_machine', $machine); $smarty->assign('mail_site', $_SERVER["SERVER_NAME"]); $smarty->assign('mail_user', $name); $smarty->assign('mail_same', $prefs['feature_clear_passwords']); $smarty->assign('mail_pass', $pass); $smarty->assign('mail_apass', md5($pass)); $smarty->assign('mail_ip', $tikilib->get_ip_address()); $mail_data = sprintf($smarty->fetchLang($languageEmail, 'mail/password_reminder_subject.tpl'), $_SERVER["SERVER_NAME"]); $mail = new TikiMail($name); $mail->setSubject($mail_data); $mail->setText(stripslashes($smarty->fetchLang($languageEmail, 'mail/password_reminder.tpl'))); // grab remote IP through forwarded-for header when served by cache $mail->setHeader('X-Password-Reset-From', $tikilib->get_ip_address()); if (!$mail->send(array($_REQUEST['email']))) { $smarty->assign('msg', tra("The mail can't be sent. Contact the administrator")); $smarty->display("error.tpl"); die; } // Just show "success" message and no form $smarty->assign('showmsg', 'y'); $smarty->assign('showfrm', 'n'); if ($prefs['feature_clear_passwords'] == 'y') { $tmp = tra("A password reminder email has been sent "); } else { $tmp = tra("An email with a link to reset your password has been sent "); } if ($prefs['login_is_email'] == 'y') { $tmp .= tra("to the email");
function request_payment() { global $prefs, $user, $tikilib; global $paymentlib; require_once 'lib/payment/paymentlib.php'; // if (!$user && $prefs['payment_cart_anonymous'] != 'y') { // $access = TikiLib::lib('access'); // $access->redirect( $_SERVER['REQUEST_URI'], tra('Anonymous shopping feature is not enabled. Please log in to shop.') ); // } $total = $this->get_total(); if ($total > 0 || $this->total_no_discount) { // if anonymous shopping to set pref as to which shopperinfo to show in description if (empty($user) && $prefs['payment_cart_anonymous'] === 'y') { $shopperinfo_descvar = 'email'; // TODO: make this a pref if (!empty($_SESSION['shopperinfo'][$shopperinfo_descvar])) { $shopperinfo_desc = $_SESSION['shopperinfo'][$shopperinfo_descvar]; $description = tra('Registration Check-Out') . " ({$shopperinfo_desc})"; } else { $description = tra('Registration Check-Out'); } } else { $description = tra('Registration Check-Out') . " ({$user})"; } $invoice = $paymentlib->request_payment($description, $total, $prefs['payment_default_delay'], $this->get_description()); foreach ($this->get_behaviors() as $behavior) { $paymentlib->register_behavior($invoice, $behavior['event'], $behavior['behavior'], $behavior['arguments']); } } else { $invoice = 0; foreach ($this->get_behaviors() as $behavior) { if ($behavior['event'] == 'complete') { $name = $behavior['behavior']; $file = dirname(__FILE__) . "/behavior/{$name}.php"; $function = 'payment_behavior_' . $name; require_once $file; call_user_func_array($function, $behavior['arguments']); } } } require_once 'lib/profilelib/installlib.php'; require_once 'lib/profilelib/profilelib.php'; // Handle anonymous user (not logged in) shopping that require only email if (!$user || isset($_SESSION['forceanon']) && $_SESSION['forceanon'] == 'y') { if (!empty($_SESSION['shopperinfo'])) { // should also check for pref that this anonymous shopping feature is on // First create shopper info in shopper tracker global $record_profile_items_created; $record_profile_items_created = array(); if (!empty($_SESSION['shopperinfoprofile'])) { $shopper_profile_name = $_SESSION['shopperinfoprofile']; } else { $shopper_profile_name = $prefs['payment_cart_anonshopper_profile']; } $shopperprofile = Tiki_Profile::fromDb($shopper_profile_name); $profileinstaller = new Tiki_Profile_Installer(); $profileinstaller->forget($shopperprofile); // profile can be installed multiple times $profileinstaller->setUserData($_SESSION['shopperinfo']); $profileinstaller->install($shopperprofile); // Then set user to shopper ID $cartuser = $record_profile_items_created[0]; $record_profile_items_created = array(); } else { $this->empty_cart(); return $invoice; } } else { $cartuser = $user; } $userInput = array('user' => $cartuser, 'time' => $tikilib->now, 'total' => $total, 'invoice' => $invoice); if (!$user || isset($_SESSION['forceanon']) && $_SESSION['forceanon'] == 'y') { $orderprofile = Tiki_Profile::fromDb($prefs['payment_cart_anonorders_profile']); $orderitemprofile = Tiki_Profile::fromDb($prefs['payment_cart_anonorderitems_profile']); } else { $orderprofile = Tiki_Profile::fromDb($prefs['payment_cart_orders_profile']); $orderitemprofile = Tiki_Profile::fromDb($prefs['payment_cart_orderitems_profile']); } if ($user && $prefs['payment_cart_orders'] == 'y' || !$user && $prefs['payment_cart_anonymous'] == 'y') { $profileinstaller = new Tiki_Profile_Installer(); $profileinstaller->forget($orderprofile); // profile can be installed multiple times $profileinstaller->setUserData($userInput); } else { $profileinstaller = ''; } global $record_profile_items_created; $record_profile_items_created = array(); if ($user && $prefs['payment_cart_orders'] == 'y' || !$user && $prefs['payment_cart_anonymous'] == 'y') { $profileinstaller->install($orderprofile); } $content = $this->get_content(); foreach ($content as $info) { if (!isset($info['is_gift_certificate']) || !$info['is_gift_certificate']) { $process_info = $this->process_item($invoice, $total, $info, $userInput, $cartuser, $profileinstaller, $orderitemprofile); } } $email_template_ids = array(); if (isset($process_info['product_classes']) && is_array($process_info['product_classes'])) { $product_classes = array_unique($process_info['product_classes']); } else { $product_classes = array(); } foreach ($product_classes as $pc) { if ($email_template_id = $this->get_tracker_value_custom($prefs['payment_cart_productclasses_tracker_name'], 'Email Template ID', $pc)) { $email_template_ids[] = $email_template_id; } } if (!empty($record_profile_items_created)) { if ($total > 0) { $paymentlib->register_behavior($invoice, 'complete', 'record_cart_order', array($record_profile_items_created)); $paymentlib->register_behavior($invoice, 'cancel', 'cancel_cart_order', array($record_profile_items_created)); if ($user) { $paymentlib->register_behavior($invoice, 'complete', 'cart_send_confirm_email', array($user, $email_template_ids)); } } else { require_once 'lib/payment/behavior/record_cart_order.php'; payment_behavior_record_cart_order($record_profile_items_created); if ($user) { require_once 'lib/payment/behavior/cart_send_confirm_email.php'; payment_behavior_cart_send_confirm_email($user, $email_template_ids); } } } if (!$user || isset($_SESSION['forceanon']) && $_SESSION['forceanon'] == 'y') { $shopperurl = 'tiki-index.php?page=' . $prefs['payment_cart_anon_reviewpage'] . '&shopper=' . intval($cartuser); global $tikiroot, $prefs; $shopperurl = $tikilib->httpPrefix(true) . $tikiroot . $shopperurl; require_once 'lib/auth/tokens.php'; $tokenlib = AuthTokens::build($prefs); $shopperurl = $tokenlib->includeToken($shopperurl, array($prefs['payment_cart_anon_group'], 'Anonymous')); if (!empty($_SESSION['shopperinfo']['email'])) { require_once 'lib/webmail/tikimaillib.php'; global $smarty; $smarty->assign('shopperurl', $shopperurl); $smarty->assign('email_template_ids', $email_template_ids); $mail_subject = $smarty->fetch('mail/cart_order_received_anon_subject.tpl'); $mail_data = $smarty->fetch('mail/cart_order_received_anon.tpl'); $mail = new TikiMail(); $mail->setSubject($mail_subject); if ($mail_data == strip_tags($mail_data)) { $mail->setText($mail_data); } else { $mail->setHtml($mail_data); } $mail->setHeader("From", $prefs['sender_email']); $mail->send($_SESSION['shopperinfo']['email']); // the field to use probably needs to be configurable as well } } $this->update_gift_certificate($invoice); $this->update_group_discount($invoice); $this->empty_cart(); return $invoice; }