public function file_history($attachment) { if ($this->is_back()) { $x = ModuleManager::get_instance('/Base_Box|0'); if (!$x) { trigger_error('There is no base box module instance', E_USER_ERROR); } return $x->pop_main(); } Base_ActionBarCommon::add('back', __('Back'), $this->create_back_href()); $id = $attachment['id']; $tb =& $this->init_module(Utils_TabbedBrowser::module_name()); $tb->start_tab('File history'); $gb = $this->init_module(Utils_GenericBrowser::module_name(), null, 'hua' . $id); $gb->set_inline_display(); $gb->set_table_columns(array(array('name' => __('Deleted'), 'order' => 'deleted', 'width' => 10), array('name' => __('Date'), 'order' => 'upload_on', 'width' => 25), array('name' => __('Who'), 'order' => 'upload_by', 'width' => 25), array('name' => __('Attachment'), 'order' => 'uaf.original'))); $gb->set_default_order(array(__('Date') => 'DESC')); $ret = $gb->query_order_limit('SELECT uaf.id,uaf.deleted,uaf.filestorage_id,uaf.created_on as upload_on,uaf.created_by as upload_by,uaf.original FROM utils_attachment_file uaf WHERE uaf.attach_id=' . $id, 'SELECT count(*) FROM utils_attachment_file uaf WHERE uaf.attach_id=' . $id); while ($row = $ret->FetchRow()) { $r = $gb->get_new_row(); if ($row['deleted']) { $r->add_action($this->create_confirm_callback_href(__('Are you sure you want to restore attached file?'), array($this, 'restore_file'), array($row['id'])), 'restore', __('Restore')); } $view_link = ''; $lb = array(); $lb['aid'] = $id; $lb['crypted'] = $attachment['crypted']; $lb['original'] = $row['original']; $lb['id'] = $row['id']; $lb['filestorage_id'] = $row['filestorage_id']; $file = '<a ' . Utils_AttachmentCommon::get_file_leightbox($lb, $view_link) . '>' . $row['original'] . '</a>'; $r->add_data($row['deleted'] ? __('Yes') : __('No'), Base_RegionalSettingsCommon::time2reg($row['upload_on']), Base_UserCommon::get_user_label($row['upload_by']), $file); } $this->display_module($gb); $tb->end_tab(); $tb->start_tab('File access history'); $gb = $this->init_module(Utils_GenericBrowser::module_name(), null, 'hda' . $id); $gb->set_inline_display(); $gb->set_table_columns(array(array('name' => __('Create date'), 'order' => 'created_on', 'width' => 15), array('name' => __('Download date'), 'order' => 'download_on', 'width' => 15), array('name' => __('Who'), 'order' => 'created_by', 'width' => 15), array('name' => __('IP Address'), 'order' => 'ip_address', 'width' => 15), array('name' => __('Host Name'), 'order' => 'host_name', 'width' => 15), array('name' => __('Method description'), 'order' => 'description', 'width' => 20), array('name' => __('Remote'), 'order' => 'remote', 'width' => 10))); $gb->set_default_order(array(__('Create date') => 'DESC')); $query = 'SELECT uad.created_on,uad.download_on,(SELECT l.login FROM user_login l WHERE uad.created_by=l.id) as created_by,uad.remote,uad.ip_address,uad.host_name,uad.description FROM utils_attachment_download uad INNER JOIN utils_attachment_file uaf ON uaf.id=uad.attach_file_id WHERE uaf.attach_id=' . $id; $query_qty = 'SELECT count(*) FROM utils_attachment_download uad INNER JOIN utils_attachment_file uaf ON uaf.id=uad.attach_file_id WHERE uaf.attach_id=' . $id; if (Base_AclCommon::check_permission('Attachments - view full download history')) { $ret = $gb->query_order_limit($query, $query_qty); } else { print 'You are allowed to see your own downloads only'; $who = ' AND uad.created_by=' . Acl::get_user(); $ret = $gb->query_order_limit($query . $who, $query_qty . $who); } while ($row = $ret->FetchRow()) { $r = $gb->get_new_row(); $r->add_data(Base_RegionalSettingsCommon::time2reg($row['created_on']), $row['remote'] != 1 ? Base_RegionalSettingsCommon::time2reg($row['download_on']) : '', $row['created_by'], $row['ip_address'], $row['host_name'], $row['description'], $row['remote'] == 0 ? 'no' : 'yes'); } $this->display_module($gb); $tb->end_tab(); $this->display_module($tb); $this->caption = 'Note history'; return true; }
public function view_edit_history($id){ load_js('modules/Utils/RecordBrowser/edit_history.js'); if ($this->is_back()) return $this->back(); $this->init(); $tb = $this->init_module('Utils_TabbedBrowser'); $gb_cha = $this->init_module('Utils/GenericBrowser', null, $this->tab.'__changes'); $form = $this->init_module('Libs_QuickForm'); $table_columns_changes = array( array('name'=>__('Date'), 'width'=>10, 'wrapmode'=>'nowrap'), array('name'=>__('Username'), 'width'=>10, 'wrapmode'=>'nowrap'), array('name'=>__('Field'), 'width'=>10, 'wrapmode'=>'nowrap'), array('name'=>__('Old value'), 'width'=>10, 'wrapmode'=>'nowrap'), array('name'=>__('New value'), 'width'=>10, 'wrapmode'=>'nowrap')); $gb_cha->set_table_columns( $table_columns_changes ); $gb_cha->set_inline_display(); $created = Utils_RecordBrowserCommon::get_record($this->tab, $id, true); $access = $this->get_access('view', $created); $field_hash = array(); $edited = DB::GetRow('SELECT ul.login, c.edited_on FROM '.$this->tab.'_edit_history AS c LEFT JOIN user_login AS ul ON ul.id=c.edited_by WHERE c.'.$this->tab.'_id=%d ORDER BY edited_on DESC',array($id)); foreach($this->table_rows as $field => $args) $field_hash[$args['id']] = $field; $ret = DB::Execute('SELECT ul.login, c.id, c.edited_on, c.edited_by FROM '.$this->tab.'_edit_history AS c LEFT JOIN user_login AS ul ON ul.id=c.edited_by WHERE c.'.$this->tab.'_id=%d ORDER BY edited_on DESC, id DESC',array($id)); $dates_select = array(); $tb_path = escapeJS($tb->get_path()); while ($row = $ret->FetchRow()) { $user = Base_UserCommon::get_user_label($row['edited_by']); $date_and_time = Base_RegionalSettingsCommon::time2reg($row['edited_on']); $changed = array(); $ret2 = DB::Execute('SELECT * FROM '.$this->tab.'_edit_history_data WHERE edit_id=%d',array($row['id'])); while($row2 = $ret2->FetchRow()) { if ($row2['field']!='id' && (!isset($access[$row2['field']]) || !$access[$row2['field']])) continue; $changed[$row2['field']] = $row2['old_value']; $last_row = $row2; $dates_select[$row['edited_on']] = $date_and_time; } foreach($changed as $k=>$v) { if ($k=='id') { $gb_cha->add_row( $date_and_time, $user, array('value'=>_V($last_row['old_value']), 'attrs'=>'colspan="3" style="text-align:center;font-weight:bold;"'), array('value'=>'', 'dummy'=>true), array('value'=>'', 'dummy'=>true) ); } else { if (!isset($field_hash[$k])) continue; $new = $this->get_val($field_hash[$k], $created, false, $this->table_rows[$field_hash[$k]]); if ($this->table_rows[$field_hash[$k]]['type']=='multiselect') $v = Utils_RecordBrowserCommon::decode_multi($v); $created[$k] = $v; $old = $this->get_val($field_hash[$k], $created, false, $this->table_rows[$field_hash[$k]]); $gb_row = $gb_cha->get_new_row(); $gb_row->add_action('href="javascript:void(0);" onclick="recordbrowser_edit_history_jump(\''.$row['edited_on'].'\',\''.$this->tab.'\','.$created['id'].',\''.$form->get_name().'\');tabbed_browser_switch(1,2,null,\''.$tb_path.'\')"','View'); $gb_row->add_data( $date_and_time, $row['edited_by']!==null?$user:'', _V($this->table_rows[$field_hash[$k]]['name']), // TRSL $old, $new ); } } } $gb_row = $gb_cha->get_new_row(); $gb_row->add_data( Base_RegionalSettingsCommon::time2reg($created['created_on']), $created['created_by']!==null?Base_UserCommon::get_user_label($created['created_by']):'', array('value'=>__('RECORD CREATED'), 'attrs'=>'colspan="3" style="text-align:center;font-weight:bold;"'), array('value'=>'', 'dummy'=>true), array('value'=>'', 'dummy'=>true) ); // $tb->set_tab(__('Record historical view'), array($this, 'record_historical_view'), array($created, $access, $form, $dates_select), true); $tb->start_tab(__('Changes History')); $this->display_module($gb_cha); $tb->end_tab(); $tb->start_tab(__('Record historical view')); $dates_select[$created['created_on']] = Base_RegionalSettingsCommon::time2reg($created['created_on']); foreach($this->table_rows as $field => $args) { if (!$access[$args['id']]) continue; $val = $this->get_val($field, $created, false, $args); } $form->addElement('select', 'historical_view_pick_date', __('View the record as of'), $dates_select, array('onChange'=>'recordbrowser_edit_history("'.$this->tab.'",'.$created['id'].',"'.$form->get_name().'");', 'id'=>'historical_view_pick_date')); $form->setDefaults(array('historical_view_pick_date'=>$created['created_on'])); $form->display(); $this->view_entry('history', $created); $tb->end_tab(); $this->display_module($tb); Base_ActionBarCommon::add('back',__('Back'),$this->create_back_href()); return true; }
public static function watchdog_label($tab, $cat, $rid, $events = array(), $label = null, $details = true) { $ret = array('category' => $cat); if ($rid !== null) { $r = self::get_record($tab, $rid); if ($r === null) { return null; } if (!self::get_access($tab, 'view', $r)) { return null; } if (is_array($label)) { $label = Utils_RecordBrowserCommon::record_link_open_tag_r($tab, $r) . call_user_func($label, $r, true) . Utils_RecordBrowserCommon::record_link_close_tag(); $label = self::create_default_record_tooltip_ajax($label, $tab, $rid); } elseif ($label) { $label = Utils_RecordBrowserCommon::create_linked_label_r($tab, $label, $r); $label = self::create_default_record_tooltip_ajax($label, $tab, $rid); } else { $label = Utils_RecordBrowserCommon::create_default_linked_label($tab, $rid, false, false); } $ret['title'] = $label; $ret['view_href'] = Utils_RecordBrowserCommon::create_record_href($tab, $rid); $events_display = array(); $events = array_reverse($events); $other_events = array(); $header = false; foreach ($events as $v) { if (count($events_display) > 20) { $other_events[__('And more...')] = 1; break; } $param = explode('_', $v); switch ($param[0]) { case 'C': $what = 'Created'; $event_display = array('who' => Base_UserCommon::get_user_label($r['created_by'], true), 'when' => Base_RegionalSettingsCommon::time2reg($r['created_on']), 'what' => _V($what)); break; case 'D': if (!isset($what)) { $what = 'Deleted'; } case 'R': if (!isset($what)) { $what = 'Restored'; } if (!isset($param[1])) { $event_display = array('who' => '', 'when' => '', 'what' => _V($what)); break; } case 'E': $event_display = self::get_edit_details_modify_record($tab, $r['id'], $param[1], $details); if (isset($event_display['what']) && !empty($event_display['what'])) { $header = true; } break; case 'N': $event_display = false; switch ($param[1]) { case '+': $action = __('Note linked'); break; case '-': $action = __('Note unlinked'); break; default: if (!isset($other_events[$param[1]])) { $other_events[$param[1]] = 0; } $other_events[$param[1]]++; $event_display = null; break; } if ($event_display === false) { $date = isset($param[3]) ? Base_RegionalSettingsCommon::time2reg($param[3]) : ''; $who = isset($param[4]) ? Base_UserCommon::get_user_label($param[4], true) : ''; $action .= ' - ' . self::create_default_linked_label('utils_attachment', $param[2]); $event_display = array('what' => $action, 'who' => $who, 'when' => $date); } break; default: $event_display = array('what' => _V($v)); } if ($event_display) { $events_display[] = $event_display; } } foreach ($other_events as $k => $v) { $events_display[] = array('what' => _V($k) . ($v > 1 ? ' [' . $v . ']' : '')); } if ($events_display) { $theme = Base_ThemeCommon::init_smarty(); if ($header) { $theme->assign('header', array(__('Field'), __('Old value'), __('New value'))); } $theme->assign('events', $events_display); $tpl = 'changes_list'; if (Utils_WatchdogCommon::email_mode()) { $record_data = self::get_record_tooltip_data($tab, $rid); $theme->assign('record', $record_data); $tpl = 'changes_list_email'; } ob_start(); Base_ThemeCommon::display_smarty($theme, 'Utils_RecordBrowser', $tpl); $output = ob_get_clean(); $ret['events'] = $output; } else { // if we've generated empty events for certain record, then // it's possible that some of the fields, that have changed, // are hidden so we have to check if there are any other events // If all events are the same and output is empty we can safely // mark all as notified. $all_events = Utils_WatchdogCommon::check_if_notified($tab, $rid); if (count($all_events) == count($events)) { Utils_WatchdogCommon::notified($tab, $rid); } $ret = null; } } return $ret; }
} $v = str_replace($currency_thou_signs[$symbol], '', $v); $v = str_replace($currency_decimal_signs[$symbol], '.', $v); return $v; } foreach ($records as $r) { $has_access = Utils_RecordBrowserCommon::get_access($tab, 'view', $r); if (!$has_access) { continue; } $rec = array($r['id']); $details = Utils_RecordBrowserCommon::get_record_info($tab, $r['id']); $rec[] = $details['created_on']; $rec[] = Base_UserCommon::get_user_label($details['created_by'], true); $rec[] = $details['edited_on']; $rec[] = $details['edited_by'] ? Base_UserCommon::get_user_label($details['edited_by'], true) : ''; foreach ($tab_info as $field_name => $v) { if (!$v['export']) { continue; } ob_start(); if (!isset($has_access[$v['id']]) || !$has_access[$v['id']]) { $val = ''; } else { $val = Utils_RecordBrowserCommon::get_val($tab, $field_name, $r, true, $v); } ob_end_clean(); $val = str_replace(' ', ' ', htmlspecialchars_decode(strip_tags(preg_replace('/\\<[Bb][Rr]\\/?\\>/', "\n", $val)))); if ($v['style'] == 'currency') { $val = str_replace(' ', '_', $val); $val = explode(';', $val);
public function history($uid = null) { $th = $this->init_module(Base_Theme::module_name()); $th->assign('header', __('Shoutbox History')); $qf = $this->init_module(Libs_QuickForm::module_name()); if (ModuleManager::is_installed('CRM_Contacts') >= 0) { $emps = DB::GetAssoc('SELECT l.id,' . DB::ifelse('cd.f_last_name!=\'\'', DB::concat('cd.f_last_name', DB::qstr(' '), 'cd.f_first_name'), 'l.login') . ' as name FROM user_login l LEFT JOIN contact_data_1 cd ON (cd.f_login=l.id AND cd.active=1) WHERE l.active=1 ORDER BY name'); } else { $emps = DB::GetAssoc('SELECT id,login FROM user_login WHERE active=1 ORDER BY login'); } $qf->addElement('select', 'user', __('User'), array('all' => '[' . __('All') . ']') + $emps); $qf->addElement('datepicker', 'from_date', __('From')); $qf->addElement('datepicker', 'to_date', __('To')); $qf->addElement('text', 'search', __('Search for')); $qf->addElement('submit', 'submit_button', __('Filter')); $to_date =& $this->get_module_variable('to_date'); $from_date =& $this->get_module_variable('from_date'); $user =& $this->get_module_variable('to', "all"); $qf->setDefaults(array('from_date' => $from_date, 'to_date' => $to_date, 'user' => $uid)); //if submited if ($qf->validate()) { $from_date = $qf->exportValue('from_date'); $to_date = $qf->exportValue('to_date'); $user = $qf->exportValue('user'); $search_word = $qf->exportValue('search'); } $qf->assign_theme('form', $th); $uid = is_numeric($user) ? $user : null; $date_where = ''; if ($from_date) { $date_where .= 'AND posted_on>=' . DB::DBDate($from_date); } if ($to_date) { $date_where .= 'AND posted_on<=' . DB::DBDate($to_date); } if (isset($search_word) && $search_word) { $search_word = explode(' ', $search_word); foreach ($search_word as $word) { if ($word) { $date_where .= ' AND message ' . DB::like() . ' ' . DB::Concat(DB::qstr('%'), DB::qstr(htmlspecialchars($word, ENT_QUOTES, 'UTF-8')), DB::qstr('%')); } } } $gb = $this->init_module(Utils_GenericBrowser::module_name(), null, 'shoutbox_history'); $gb->set_table_columns(array(array('name' => __('From'), 'width' => 10), array('name' => __('To'), 'width' => 10), array('name' => __('Message'), 'width' => 64), array('name' => __('Date'), 'width' => 16))); // $gb->set_default_order(array(__('Date')=>'DESC')); $myid = Base_AclCommon::get_user(); $where = '(' . ($uid ? '(base_user_login_id=' . $myid . ' AND to_user_login_id=' . $uid . ') OR (base_user_login_id=' . $uid . ' AND to_user_login_id=' . $myid . ') OR (to_user_login_id is null AND base_user_login_id=' . $uid . ')' : 'to_user_login_id is null OR to_user_login_id=' . $myid . ' OR base_user_login_id=' . $myid) . ')' . $date_where; $query = 'SELECT base_user_login_id, to_user_login_id, message, posted_on FROM apps_shoutbox_messages WHERE ' . $where . ' ORDER BY posted_on DESC'; $query_qty = 'SELECT count(id) FROM apps_shoutbox_messages WHERE ' . $where; $ret = $gb->query_order_limit($query, $query_qty); if ($ret) { while ($row = $ret->FetchRow()) { $ulogin = Base_UserCommon::get_user_label($row['base_user_login_id']); if ($row['to_user_login_id'] !== null) { $tologin = Base_UserCommon::get_user_label($row['to_user_login_id']); } else { $tologin = '******' . __('All') . ']'; } $gb->add_row('<span class="author">' . $ulogin . '</span>', '<span class="author">' . $tologin . '</span>', array('value' => Utils_BBCodeCommon::parse($row['message']), 'overflow_box' => false), Base_RegionalSettingsCommon::time2reg($row['posted_on'])); } } $gb->set_inline_display(true); $th->assign('messages', $this->get_html_of_module($gb)); $th->display(); return true; }
public static function display_note($row, $nolink = false, $a=null,$view=false) { $inline_img = ''; $link_href = ''; $link_img = ''; $icon = ''; $crypted = Utils_RecordBrowserCommon::get_value('utils_attachment',$row['id'],'crypted'); if(!$crypted || isset($_SESSION['client']['cp'.$row['id']])) { $files = DB::GetAll('SELECT id, created_by, created_on, original, (SELECT count(*) FROM utils_attachment_download uad WHERE uaf.id=uad.attach_file_id) as downloads FROM utils_attachment_file uaf WHERE uaf.attach_id=%d AND uaf.deleted=0', array($row['id'])); foreach ($files as $f) { $f_filename = DATA_DIR.'/Utils_Attachment/'.$row['id'].'/'.$f['id']; if(file_exists($f_filename)) { $filename = $f['original']; $filetooltip = __('Filename: %s',array($filename)).'<br>'.__('File size: %s',array(filesize_hr($f_filename))).'<hr>'. __('Last uploaded by %s', array(Base_UserCommon::get_user_label($f['created_by'], true))).'<br/>'. __('On: %s',array(Base_RegionalSettingsCommon::time2reg($f['created_on']))).'<br/>'. __('Number of downloads: %d',array($f['downloads'])); $view_link = ''; $lb = array(); $lb['aid'] = $row['id']; $lb['crypted'] = $crypted; $lb['original'] = $f['original']; $lb['id'] = $f['id']; $link_href = Utils_TooltipCommon::open_tag_attrs($filetooltip).' '.self::get_file_leightbox($lb,$view_link); $link_img = Base_ThemeCommon::get_template_file('Utils_Attachment','z-attach.png'); if(Utils_AttachmentCommon::is_image($filename) && $view_link) $inline_img .= '<hr><a href="'.$view_link.'" target="_blank"><img src="'.$view_link.'" style="max-width:700px" /></a><br>'; } else { $filename = __('Missing file: %s',array($f_filename)); $link_href = Utils_TooltipCommon::open_tag_attrs($filename); $link_img = Base_ThemeCommon::get_template_file('Utils_Attachment','z-attach-off.png'); } if ($link_href) $icon .= '<div class="file_link"><a '.$link_href.'><img src="'.$link_img.'"><span class="file_name">'.$filename.'</span></a></div>'; } } if($crypted) { $text = false; if(isset($_SESSION['client']['cp'.$row['id']])) { $note_pass = $_SESSION['client']['cp'.$row['id']]; $decoded = Utils_AttachmentCommon::decrypt($row['note'],$note_pass); if($decoded!==false) { $text = $decoded; Utils_WatchdogCommon::notified('utils_attachment', $row['id']); // notified only when decrypted } } if($text===false) { $text = '<div id="note_value_'.$row['id'].'"><a href="javascript:void(0);" onclick="utils_attachment_password(\''.Epesi::escapeJS(__('Password').':').'\',\''.Epesi::escapeJS(__('OK')).'\','.$row['id'].')" style="color:red">'.__('Note encrypted').'</a></div>'; $icon = ''; $files = array(); } else { $text = Utils_BBCodeCommon::parse($text); } } else { $text = $row['note']; $text = Utils_BBCodeCommon::parse($text); // mark as read all 'browsed' records foreach (self::$mark_as_read as $note_id) { Utils_WatchdogCommon::notified('utils_attachment', $note_id); } self::$mark_as_read = array(); } $text = (!$view?'<b style="float:left;margin-right:30px;">'.$row['title'].'</b> ':'').$text.$icon.$inline_img; if($row['sticky']) $text = '<img src="'.Base_ThemeCommon::get_template_file('Utils_Attachment','sticky.png').'" hspace=3 align="left"> '.$text; return $text; }
public static function create_write_to_link($uid) { $ret = Base_UserCommon::get_user_label($uid, true); if (Acl::get_user() != $uid) { $ret = "<a href=\"javascript:void(0);\" onclick=\"autoselect_add_value('shoutbox_to', " . $uid . ", '" . Epesi::escapeJS($ret) . "');autoselect_stop_searching('shoutbox_to');\$('shoutbox_to').onchange();\">" . $ret . '</a>'; } return $ret; }
public function body() { if (!Base_AclCommon::check_permission('View Activity Report')) { return; } $rb_tabs = DB::GetAssoc('SELECT tab, caption FROM recordbrowser_table_properties ORDER BY caption'); foreach ($rb_tabs as $k => $v) { $rb_tabs[$k] = Utils_RecordBrowserCommon::get_caption($k); } $form = $this->init_module('Libs/QuickForm'); $users_count = DB::GetOne('SELECT COUNT(id) FROM user_login') > Base_User_SettingsCommon::get('Utils_RecordBrowser', 'enable_autocomplete'); if ($users_count) { $crits = array('!login' => ''); $fcallback = array('CRM_ContactsCommon', 'contact_format_no_company'); $form->addElement('autoselect', 'user', __('User'), array(), array(array('CRM_ContactsCommon', 'autoselect_contact_suggestbox'), array($crits, $fcallback)), $fcallback); } else { $users = DB::GetAssoc('SELECT id, id FROM user_login'); foreach ($users as $k => $u) { $users[$k] = Base_UserCommon::get_user_label($u, true); } asort($users); $users = array('' => '[' . __('All') . ']') + $users; $form->addElement('select', 'user', __('User'), $users); } $form->addElement('multiselect', 'recordsets', __('Record Type'), $rb_tabs); $form->addElement('checkbox', 'new', __('New record')); $form->addElement('checkbox', 'edit', __('Record edit')); $form->addElement('checkbox', 'delete_restore', __('Record Delete/restore')); $form->addElement('checkbox', 'file', __('Files')); $form->addElement('datepicker', 'start_date', __('Start Date')); $form->addElement('datepicker', 'end_date', __('End Date')); //$form->addElement('submit', 'submit', __('Show')); Base_ActionBarCommon::add('search', __('Show'), $form->get_submit_form_href()); $filters = $this->get_module_variable('filters', array('user' => '', 'new' => 1, 'edit' => 1, 'delete_restore' => 1, 'recordsets' => array_keys($rb_tabs), 'start_date' => date('Y-m-01'), 'end_date' => date('Y-m-d'))); if ($form->validate()) { $filters = $form->exportValues(); $this->set_module_variable('filters', $filters); } $form->setDefaults($filters); $theme = $this->init_module('Base/Theme'); $form->assign_theme('form', $theme); $theme->display(); $filters['recordsets'] = array_flip($filters['recordsets']); foreach ($rb_tabs as $k => $v) { if (!isset($filters['recordsets'][$k])) { unset($rb_tabs[$k]); } } $gb = $this->init_module('Utils/GenericBrowser', null, 'activity_report'); $gb->set_table_columns(array(array('name' => __('Date'), 'width' => 40), array('name' => __('User'), 'width' => 40), array('name' => __('Type'), 'width' => 40), array('name' => __('Label')), array('name' => __('Actions taken'), 'width' => 40))); $tables = array(); if ($users_count) { $filters['user'] = CRM_ContactsCommon::get_contact($filters['user']); $filters['user'] = $filters['user']['login']; } $af_where = array(); foreach ($rb_tabs as $k => $t) { $af_where[] = 'ual.local ' . DB::like() . ' ' . DB::Concat(DB::qstr($k . '/'), DB::qstr('%')); } $af_where = count($af_where) ? ' (' . implode(' OR ', $af_where) . ')' : 'TRUE '; $e_where = array(); $c_where = ''; if ($filters['user']) { $e_where[] = ' edited_by = ' . $filters['user']; $c_where = ' created_by = ' . $filters['user']; $af_where .= ' AND uaf.created_by = ' . $filters['user']; } if (isset($filters['edit'])) { if (!isset($filters['delete_restore'])) { $e_where[] = ' ehd.field!=' . DB::qstr('id'); } } else { if (isset($filters['delete_restore'])) { $e_where[] = ' ehd.field=' . DB::qstr('id'); } } if ($filters['start_date']) { $date = DB::qstr(date('Y-m-d', strtotime($filters['start_date']))); $af_where .= ' AND uaf.created_on >= ' . $date; $c_where .= ($c_where ? ' AND' : '') . ' created_on >= ' . $date; $e_where[] = ' edited_on >= ' . $date; } if ($filters['end_date']) { $date = DB::qstr(date('Y-m-d 23:59:59', strtotime($filters['end_date']))); $af_where .= ' AND uaf.created_on <= ' . $date; $c_where .= ($c_where ? ' AND' : '') . ' created_on <= ' . $date; $e_where[] = ' edited_on <= ' . $date; } if (!empty($e_where)) { $e_where = ' WHERE' . implode(' AND', $e_where); } else { $e_where = ''; } if ($c_where) { $c_where = ' WHERE' . $c_where; } $postgre_cast_type = DB::is_postgresql() ? '::varchar' : ''; // **** files **** if (isset($filters['file'])) { $tables[] = 'SELECT uaf.id AS id,uaf.created_on AS edited_on,uaf.created_by AS edited_by, ual.local AS r_id, ' . DB::qstr('') . ' AS tab, ' . DB::qstr('file') . ' AS action FROM utils_attachment_file uaf INNER JOIN utils_attachment_data_1 ua ON uaf.attach_id=ua.id INNER JOIN utils_attachment_local ual ON ua.id=ual.attachment WHERE original!=' . DB::qstr('') . ' AND ' . $af_where; } // **** edit **** if (isset($filters['edit']) || isset($filters['delete_restore'])) { foreach ($rb_tabs as $k => $t) { $tables[] = 'SELECT id, edited_on, edited_by, ' . $k . '_id' . $postgre_cast_type . ' as r_id, ' . DB::qstr($k) . ' as tab, ' . DB::qstr('edit') . ' as action FROM ' . $k . '_edit_history eh LEFT JOIN ' . $k . '_edit_history_data ehd ON ehd.edit_id=eh.id' . $e_where; } } // **** create **** if (isset($filters['new'])) { foreach ($rb_tabs as $k => $t) { $tables[] = 'SELECT 0 AS id, created_on AS edited_on, created_by AS edited_by, id' . $postgre_cast_type . ' as r_id, ' . DB::qstr($k) . ' as tab, ' . DB::qstr('create') . ' as action FROM ' . $k . '_data_1' . $c_where; } } if (!empty($tables)) { $tables = implode(' UNION ', $tables); $limit = DB::GetOne('SELECT COUNT(*) FROM (' . $tables . ') AS tmp'); $limit = $gb->get_limit($limit); $ret = DB::SelectLimit('SELECT * FROM (' . $tables . ') AS tmp ORDER BY edited_on DESC', $limit['numrows'], $limit['offset']); while ($row = $ret->FetchRow()) { $user = Base_UserCommon::get_user_label($row['edited_by']); $action = ''; $link = ''; switch ($row['action']) { case 'edit': $details = DB::GetAssoc('SELECT field, old_value FROM ' . $row['tab'] . '_edit_history_data WHERE edit_id=%d', array($row['id'])); if (isset($details['id'])) { $action = $details['id'] == 'DELETED' ? __('Deleted') : __('Restored'); } else { $action = __('Edited'); $action = '<a ' . Utils_TooltipCommon::tooltip_leightbox_mode() . ' ' . Utils_TooltipCommon::ajax_open_tag_attrs(array('Utils_RecordBrowserCommon', 'get_edit_details_label'), array($row['tab'], $row['r_id'], $row['id']), 500) . '>' . $action . '</a>'; } $r_id = $row['r_id']; break; case 'create': $action = __('Created'); $r_id = $row['r_id']; break; case 'file': $action = __('Attachment') . ': '; $action .= $row['id'] == 0 ? __('New') : __('Updated'); $id = explode('/', $row['r_id']); $row['tab'] = $id[0]; $r_id = $id[1]; break; case 'note': $action = __('Note') . ': '; $action .= $row['id'] == 0 ? __('New') : __('Updated'); $id = explode('/', $row['r_id']); $row['tab'] = $id[0]; $r_id = $id[1]; break; } if (!Utils_RecordBrowserCommon::get_access($row['tab'], 'view', Utils_RecordBrowserCommon::get_record($row['tab'], $r_id))) { $link = __('Access restricted'); $action = strip_tags($action); } else { $link = Utils_TooltipCommon::create('<img src="' . Base_ThemeCommon::get_template_file('Utils_RecordBrowser', 'info.png') . '">', Utils_RecordBrowserCommon::get_html_record_info($row['tab'], $r_id), false); $link .= ' '; $link .= Utils_RecordBrowserCommon::create_default_linked_label($row['tab'], $r_id, false, false); } $gb->add_row(Base_RegionalSettingsCommon::time2reg($row['edited_on']), $user, $rb_tabs[$row['tab']], $link, $action); } } Base_ThemeCommon::load_css('Utils_RecordBrowser', 'changes_list'); $this->display_module($gb); }