def make_sendlog_record(self, **kw): """Create a new sendlog record """ user = get_user() actor = get_user_id() userprops = api.get_user_properties(user) actor_fullname = userprops.get("fullname", actor) email_send_date = DateTime() email_recipients = self.email_recipients email_responsibles = self.email_responsibles email_subject = self.email_subject email_body = self.render_email_template(self.email_body) email_attachments = map(api.get_uid, self.attachments) record = { "actor": actor, "actor_fullname": actor_fullname, "email_send_date": email_send_date, "email_recipients": email_recipients, "email_responsibles": email_responsibles, "email_subject": email_subject, "email_body": email_body, "email_attachments": email_attachments, } # keywords take precedence record.update(kw) return record
def folderitem(self, obj, item, index): """Augment folder listing item """ url = item.get("url") title = item.get("Title") calibrator = obj.getCalibrator() item["getDownFrom"] = self.localize_date(obj.getDownFrom()) item["getDownTo"] = self.localize_date(obj.getDownTo()) item["getCalibrator"] = "" if calibrator: props = api.get_user_properties(calibrator) name = props.get("fullname", calibrator) item["getCalibrator"] = name item["replace"]["Title"] = get_link(url, value=title) # calibration with the most remaining days if obj == self.latest_calibration: item["state_class"] = "state-published" # running calibrations elif obj in self.active_calibrations: item["state_class"] = "state-active" # inactive calibrations else: item["state_class"] = "state-inactive" return item
def _get_fullname_from_user_id(self, userid, default=""): """Try the fullname of the user """ fullname = default user = api.get_user(userid) if user: props = api.get_user_properties(user) fullname = props.get("fullname", fullname) contact = api.get_user_contact(user) fullname = contact and contact.getFullname() or fullname return fullname
def current_user(self): user = api.get_current_user() # XXX: we're missing here LDAP properties! # needs to be fixed in the API. properties = api.get_user_properties(user) properties.update({ "userid": user.getId(), "username": user.getUserName(), "roles": user.getRoles(), "email": user.getProperty("email"), "fullname": user.getProperty("fullname"), }) return properties
def to_history_record(self, value): """Transforms the value to an history record """ user = api.get_current_user() contact = api.get_user_contact(user) fullname = contact and contact.getFullname() or "" if not contact: # get the fullname from the user properties props = api.get_user_properties(user) fullname = props.get("fullname", "") return RemarksHistoryRecord(user_id=user.id, user_name=fullname, content=value.strip())
def folderitem(self, obj, item, index): """Augment folder listing item """ url = item.get("url") title = item.get("Title") creator = obj.Creator() item["replace"]["Title"] = get_link(url, value=title) item["created"] = self.localize_date(obj.created()) item["getType"] = _(obj.getType()[0]) item["creator"] = "" if creator: props = api.get_user_properties(creator) name = props.get("fullname", creator) item["creator"] = name return item
def get_entry_actor(self, entry): """Return the fullname of the actor """ actor = None if self.is_versioning_entry(entry): # revision entries have an actor dict actor_dict = entry.get("actor") actor = actor_dict.get("fullname") or actor_dict.get("actorid") else: # review history items have only an actor id actor = entry.get("actor") # try to get the fullname props = api.get_user_properties(actor) actor = props.get("fullname") or actor # automatic transitions have no actor if actor is None: return "" return actor
def get_fullname(snapshot): """Get the actor's fullname of the snapshot """ actor = get_actor(snapshot) properties = api.get_user_properties(actor) return properties.get("fullname", actor)
def folderitem(self, obj, item, index): """Service triggered each time an item is iterated in folderitems. The use of this service prevents the extra-loops in child objects. :obj: the instance of the class to be foldered :item: dict containing the properties of the object to be used by the template :index: current index of the item """ obj = api.get_object(obj) # We are using the existing logic from the auditview logview = api.get_view("auditlog", context=obj, request=self.request) # get the last snapshot snapshot = get_last_snapshot(obj) # get the metadata of the last snapshot metadata = get_snapshot_metadata(snapshot) title = obj.Title() url = obj.absolute_url() auditlog_url = "{}/@@auditlog".format(url) # Title item["title"] = title # Link the title to the auditlog of the object item["replace"]["title"] = get_link(auditlog_url, value=title) # Version version = get_snapshot_version(obj, snapshot) item["version"] = version # Modification Date m_date = metadata.get("modified") item["modified"] = logview.to_localized_time(m_date) # Actor actor = metadata.get("actor") item["actor"] = actor # Fullname properties = api.get_user_properties(actor) item["fullname"] = properties.get("fullname", actor) # Roles roles = metadata.get("roles", []) item["roles"] = ", ".join(roles) # Remote Address remote_address = metadata.get("remote_address") item["remote_address"] = remote_address # Action action = metadata.get("action") item["action"] = logview.translate_state(action) # Review State review_state = metadata.get("review_state") item["review_state"] = logview.translate_state(review_state) # get the previous snapshot prev_snapshot = get_snapshot_by_version(obj, version - 1) if prev_snapshot: prev_metadata = get_snapshot_metadata(prev_snapshot) prev_review_state = prev_metadata.get("review_state") if prev_review_state != review_state: item["replace"]["review_state"] = "{} → {}".format( logview.translate_state(prev_review_state), logview.translate_state(review_state)) # Rendered Diff diff = compare_snapshots(snapshot, prev_snapshot) item["diff"] = logview.render_diff(diff) return item
def folderitems(self): """Generate folderitems for each version """ items = [] # get the snapshots snapshots = get_snapshots(self.context) # reverse the order to get the most recent change first snapshots = list(reversed(snapshots)) # set the total number of items self.total = len(snapshots) # slice a batch batch = snapshots[self.limit_from:self.limit_from + self.pagesize] for snapshot in batch: item = self.make_empty_item(**snapshot) # get the version of the snapshot version = get_snapshot_version(self.context, snapshot) # Version item["version"] = version # get the metadata of the diff metadata = get_snapshot_metadata(snapshot) # Modification Date m_date = metadata.get("modified") item["modified"] = self.to_localized_time(m_date) # Actor actor = metadata.get("actor") item["actor"] = actor # Fullname properties = api.get_user_properties(actor) item["fullname"] = properties.get("fullname", actor) # Roles roles = metadata.get("roles", []) item["roles"] = ", ".join(roles) # Remote Address remote_address = metadata.get("remote_address") item["remote_address"] = remote_address # Action action = metadata.get("action") item["action"] = self.translate_state(action) # Review State review_state = metadata.get("review_state") item["review_state"] = self.translate_state(review_state) # get the previous snapshot prev_snapshot = get_snapshot_by_version(self.context, version - 1) if prev_snapshot: prev_metadata = get_snapshot_metadata(prev_snapshot) prev_review_state = prev_metadata.get("review_state") if prev_review_state != review_state: item["replace"]["review_state"] = "{} → {}".format( self.translate_state(prev_review_state), self.translate_state(review_state)) # Rendered Diff diff = compare_snapshots(snapshot, prev_snapshot) item["diff"] = self.render_diff(diff) # append the item items.append(item) return items