public function onSolrQuery(&$p) { $result =& $p['result']; $data =& $result['data']; $actionLogIds = array(); $comments = new Objects\Plugins\Comments(); //format ago date and collect log action ids foreach ($data as &$doc) { $la = Objects::getCachedObject($doc['id'])->getLastActionData(); $la['agoText'] = Util\formatAgoTime($la['time']); $la['uids'] = array_reverse(array_keys($la['users'])); $doc['lastAction'] = $la; $actionLogId = $la['users'][$la['uids'][0]]; $doc['comments'] = $comments->getData($doc['id']); $actionLogIds[$actionLogId] =& $doc; } $logRecs = DM\Log::getRecords(array_keys($actionLogIds)); foreach ($logRecs as $r) { $d = Util\jsonDecode($r['data']); $obj = Objects::getCachedObject($actionLogIds[$r['id']]['id']); $diff = $obj->getDiff($d); if (!empty($diff)) { $html = ''; foreach ($diff as $fn => $fv) { $html .= "<tr><th>{$fn}</th><td>{$fv}</td></tr>"; } $actionLogIds[$r['id']]['diff'] = "<table class=\"as-diff\">{$html}</table>"; } } }
/** * add an action to log * @param array $p action params * array( * @varchar "type" - action type * ,object "old" - old object * ,object "new" - new object * ) * @return int logged action id */ public static function add(&$p) { $userId = User::getId(); //check if log not disabled if (Config::getFlag('disableActivityLog') || empty($userId)) { return; } $data = empty($p['new']) ? empty($p['old']) ? $p['data'] : $p['old']->getData() : $p['new']->getData(); fireEvent('beforelogadd', $p); $p['logData'] = static::getLogData($p); $p['activityData'] = static::getActivityData($data); $params = array('object_id' => $data['id'], 'object_pid' => @$data['pid'], 'user_id' => $userId, 'action_type' => $p['type'], 'data' => Util\jsonEncode($p['logData']), 'activity_data_db' => Util\jsonEncode($p['activityData'])); $p['action_id'] = DM\Log::create($params); $params['id'] = $p['action_id']; static::addSolrRecord($p); static::addNotificationRecords($params); fireEvent('logadd', $p); return $p['action_id']; }
/** * placeholder * @return [type] [description] */ public function testRecordCreate() { DM\Log::update(null); }
/** * split notification into number of actions it consist of * @param array $notification * @return array */ function getNotificationActions($notification) { $rez = array(); $actionIds = Util\toNumericArray($notification['action_ids']); $rez[sizeof($actionIds) - 1] = $notification; //remove last action id (already loaded) array_shift($actionIds); //add all actions if multiple if (!empty($actionIds)) { $actionIds = array_reverse($actionIds); $recs = DM\Log::getRecords($actionIds); $actionIds = array_flip($actionIds); foreach ($recs as $r) { $notification['object_pid'] = $r['object_pid']; $notification['action_time'] = $r['action_time']; $notification['data'] = Util\jsonDecode($r['data']); $notification['activity_data_db'] = Util\jsonDecode($r['activity_data_db']); $rez[$actionIds[$r['id']]] = $notification; } } return $rez; }