function doBulkUpdate($filter, $do, $ids = array()) { @set_time_limit(0); $change_fields = array(); $deleted = false; // Make sure we have actions if (empty($do)) { return; } // Make sure we have checked items if we want a checked list if (0 == strcasecmp($filter, "checks") && empty($ids)) { return; } if (is_array($do)) { foreach ($do as $k => $v) { switch ($k) { case 'deleted': $deleted = true; break; default: break; } } } $pg = 0; if (empty($ids)) { do { list($objects, $null) = DAO_Attachment::search($this->params, 100, $pg++, SearchFields_Attachment::ID, true, false); $ids = array_merge($ids, array_keys($objects)); } while (!empty($objects)); } $batch_total = count($ids); for ($x = 0; $x <= $batch_total; $x += 100) { $batch_ids = array_slice($ids, $x, 100); if (!$deleted) { DAO_Attachment::update($batch_ids, $change_fields); } else { DAO_Attachment::delete($batch_ids); } unset($batch_ids); } unset($ids); }
function downloadFileAction(DevblocksHttpRequest $request) { $umsession = UmPortalHelper::getSession(); $stack = $request->path; if (null == ($active_user = $umsession->getProperty('sc_login', null))) { return; } // Attachment ID + display name @($ticket_mask = array_shift($stack)); @($hash = array_shift($stack)); @($display_name = array_shift($stack)); if (empty($ticket_mask) || empty($hash) || empty($display_name)) { return; } if (null == ($ticket_id = DAO_Ticket::getTicketIdByMask($ticket_mask))) { return; } // Load attachments by ticket mask list($attachments) = DAO_Attachment::search(array(SearchFields_Attachment::TICKET_MASK => new DevblocksSearchCriteria(SearchFields_Attachment::TICKET_MASK, '=', $ticket_mask)), -1, 0, null, null, false); $attachment = null; if (is_array($attachments)) { foreach ($attachments as $possible_file) { // Compare the hash $fingerprint = md5($possible_file[SearchFields_Attachment::ID] . $possible_file[SearchFields_Attachment::MESSAGE_ID] . $possible_file[SearchFields_Attachment::DISPLAY_NAME]); if (0 == strcmp($fingerprint, $hash)) { if (null == ($attachment = DAO_Attachment::get($possible_file[SearchFields_Attachment::ID]))) { return; } break; } } } // No hit (bad hash) if (null == $attachment) { return; } // Load requesters if (null == ($requesters = DAO_Ticket::getRequestersByTicket($ticket_id))) { return; } // Security: Make sure the active user is a requester on the proper ticket if (!isset($requesters[$active_user->id])) { return; } // Set headers header("Expires: Mon, 26 Nov 1962 00:00:00 GMT\n"); header("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT\n"); header("Cache-control: private\n"); header("Pragma: no-cache\n"); header("Content-Type: " . $attachment->mime_type . "\n"); header("Content-transfer-encoding: binary\n"); header("Content-Length: " . $attachment->getFileSize() . "\n"); // Dump contents echo $attachment->getFileContents(); exit; }
function writeResponse(DevblocksHttpResponse $response) { $tpl = DevblocksPlatform::getTemplateService(); $tpl_path = dirname(dirname(dirname(dirname(__FILE__)))) . '/templates/'; $umsession = UmPortalHelper::getSession(); $active_user = $umsession->getProperty('sc_login', null); $stack = $response->path; array_shift($stack); // history $mask = array_shift($stack); if (empty($mask)) { // Open Tickets if (null == ($open_view = UmScAbstractViewLoader::getView('', 'sc_history_open'))) { $open_view = new UmSc_TicketHistoryView(); $open_view->id = 'sc_history_open'; } // Lock to current visitor and open tickets $open_view->params = array(new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_FIRST_WROTE_ID, '=', $active_user->id), new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_CLOSED, '=', 0), new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_DELETED, '=', 0)); $open_view->name = ""; $open_view->renderSortBy = SearchFields_Ticket::TICKET_UPDATED_DATE; $open_view->renderSortAsc = false; $open_view->renderLimit = 10; UmScAbstractViewLoader::setView($open_view->id, $open_view); $tpl->assign('open_view', $open_view); // Closed Tickets if (null == ($closed_view = UmScAbstractViewLoader::getView('', 'sc_history_closed'))) { $closed_view = new UmSc_TicketHistoryView(); $closed_view->id = 'sc_history_closed'; } // Lock to current visitor and closed tickets $closed_view->params = array(new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_FIRST_WROTE_ID, '=', $active_user->id), new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_CLOSED, '=', 1), new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_DELETED, '=', 0)); $closed_view->name = ""; $closed_view->renderSortBy = SearchFields_Ticket::TICKET_UPDATED_DATE; $closed_view->renderSortAsc = false; $closed_view->renderLimit = 10; UmScAbstractViewLoader::setView($closed_view->id, $closed_view); $tpl->assign('closed_view', $closed_view); $tpl->display("devblocks:usermeet.core:support_center/history/index.tpl:portal_" . UmPortalHelper::getCode()); } elseif ('search' == $mask) { @($q = DevblocksPlatform::importGPC($_REQUEST['q'], 'string', '')); $tpl->assign('q', $q); if (null == ($view = UmScAbstractViewLoader::getView('', 'sc_history_search'))) { $view = new UmSc_TicketHistoryView(); $view->id = 'sc_history_search'; } $view->name = ""; $view->view_columns = array(SearchFields_Ticket::TICKET_MASK, SearchFields_Ticket::TICKET_SUBJECT, SearchFields_Ticket::TICKET_UPDATED_DATE, SearchFields_Ticket::TICKET_CLOSED); $view->params = array(array(DevblocksSearchCriteria::GROUP_OR, new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_MESSAGE_CONTENT, DevblocksSearchCriteria::OPER_FULLTEXT, $q), new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_MASK, DevblocksSearchCriteria::OPER_LIKE, $q . '%')), new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_FIRST_WROTE_ID, '=', $active_user->id), new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_DELETED, '=', 0)); UmScAbstractViewLoader::setView($view->id, $view); $tpl->assign('view', $view); $tpl->display("devblocks:usermeet.core:support_center/history/search_results.tpl:portal_" . UmPortalHelper::getCode()); } else { // Secure retrieval (address + mask) list($tickets) = DAO_Ticket::search(array(), array(new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_MASK, '=', $mask), new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_FIRST_WROTE_ID, '=', $active_user->id)), 1, 0, null, null, false); $ticket = array_shift($tickets); // Security check (mask compare) if (0 == strcasecmp($ticket[SearchFields_Ticket::TICKET_MASK], $mask)) { $messages = DAO_Ticket::getMessagesByTicket($ticket[SearchFields_Ticket::TICKET_ID]); $messages = array_reverse($messages, true); $attachments = array(); // Attachments if (is_array($messages) && !empty($messages)) { list($msg_attachments) = DAO_Attachment::search(array(SearchFields_Attachment::MESSAGE_ID => new DevblocksSearchCriteria(SearchFields_Attachment::MESSAGE_ID, 'in', array_keys($messages))), -1, 0, null, null, false); if (is_array($msg_attachments)) { foreach ($msg_attachments as $attach_id => $attach) { if (null == ($msg_id = intval($attach[SearchFields_Attachment::MESSAGE_ID]))) { continue; } if (0 == strcasecmp('original_message.html', $attach[SearchFields_Attachment::DISPLAY_NAME])) { continue; } if (!isset($attachments[$msg_id])) { $attachments[$msg_id] = array(); } $attachments[$msg_id][$attach_id] = $attach; unset($attach); } } } $tpl->assign('ticket', $ticket); $tpl->assign('messages', $messages); $tpl->assign('attachments', $attachments); $tpl->display("devblocks:usermeet.core:support_center/history/display.tpl:portal_" . UmPortalHelper::getCode()); } } }