(in-package :kira) (defclass node (odb::node) ((creator :initarg :creator :initform nil) (creation-time :initarg :creation-time :initform nil) (canonical-uri :initarg :canonical-uri :initform nil) %canonical-uri ; cached result of MAKE-URI (external-uri :initarg :link :initarg :feed-uri :initarg :calendar-uri :initarg :external-uri :initform nil) (guid :accessor guid :initarg :guid :initform nil) (next-in-uri :accessor next-in-uri :initarg :next-in-uri :initform nil) (title :accessor title :initarg :subject :initarg :title :initform nil) (image :accessor image :initarg :photo :initarg :logo :initarg :thumbnail-url :initarg :image :initform nil) (body :accessor body :initarg :summary :initarg :description :initarg :body :initform nil))) (defclass people-mixin () ((people :initarg :people :initform '()))) (defclass blog-mixin () ((blog :initarg :blog :initform nil) (categories :accessor categories :initarg :categories :initform nil))) (defclass events-mixin () ((events :initarg :events :initform '()))) (defclass files-mixin () ((files :initarg :files :initform '()))) (defclass quotes-mixin () ((quotes :initarg :quotes :initform '()))) (defclass videos-mixin () ((videos :initarg :videos :initform '()))) (defclass books-mixin () ((books :initarg :books :initform '()) (books-by-title :initarg :books-by-title :initform '()))) (defclass groups-mixin () ((groups :accessor groups :initarg :groups :initform '()))) (defclass root (node people-mixin groups-mixin blog-mixin events-mixin files-mixin quotes-mixin videos-mixin books-mixin) ((pages :accessor pages :initarg :pages :initform '()) (default-image :accessor default-image :initarg :default-image :initform nil) (possible-spam :accessor possible-spam :initarg :possible-spam :initform '()) (geocode-cache :accessor geocode-cache :initarg :geocode-cache :initform '()) (forum :accessor forum :initarg :forum :initform nil) (featured :initarg :featured :initform nil))) (defclass posts-mixin () ((posts :initarg :posts :initform '()))) (defclass viewpoint (node blog-mixin events-mixin) ((subscriptions :accessor subscriptions :initarg :subscriptions :initform nil) (subscribers :accessor subscribers :initarg :subscribers :initform nil) (author :accessor author :initarg :author :initform nil) (contributors :accessor contributors :initarg :contributors :initform nil))) (defclass directory (node) ()) (defclass geo-mixin () ((location :accessor location :initarg :location :initform nil))) (defclass recipient-mixin () ((email :accessor email :initarg :e-mail :initarg :email :initform nil))) (defclass breadcrumb-mixin () ()) (defclass reader (viewpoint breadcrumb-mixin) ()) (defclass person (node blog-mixin files-mixin geo-mixin recipient-mixin groups-mixin) ((login-name :accessor login-name :initarg :login-name :initform nil) (password :accessor password :initarg :password :initform nil) (real-name :accessor real-name :initarg :real-name :initform nil) (birthday :accessor birthday :initarg :birthday :initform nil) (sidebar :accessor sidebar :initarg :sidebar :initform nil) (bio :accessor bio :initarg :bio :initform nil) (preferred-editor :accessor preferred-editor :initarg :preferred-editor :initform nil) (nodes :accessor nodes :initarg :nodes :initform '()) (drafts :accessor drafts :initarg :drafts :initform '()) (deleted-items :accessor deleted-items :initarg :deleted-items :initform '()) (inbox :accessor inbox :initarg :inbox :initform '()) (sent-items :accessor sent-items :initarg :sent-items :initform '()) (send-notifications-p :accessor send-notifications-p :initarg :send-notifications-p :initform t) (alerts :initarg :alerts :initform '()))) (defclass section () ()) (defclass group (node people-mixin section) ()) (defvar *root* (class-prototype 'root)) (defvar *person* nil) (defvar *section* nil) (defvar *now* nil) (defvar *node* nil) (defvar *view* nil) (defvar *n* 20) (defvar *link-list-n* 60) (defgeneric initialize-instance-from-query (object) (:method-combination progn :most-specific-last)) (defmethod initialize-instance-from-query progn ((object t)) ()) (defgeneric update-instance-from-query (object) (:method-combination progn :most-specific-last)) (defmethod update-instance-from-query progn ((object t)) ()) (defgeneric unrealize (object) (:method-combination progn :most-specific-first)) (defmethod unrealize progn ((object t)) ()) (defgeneric realize (object) (:method-combination progn :most-specific-last)) (defmethod realize progn ((object t)) ()) (defgeneric remove-from-instance (instance object) (:method-combination progn :most-specific-first)) (defmethod remove-from-instance progn ((instance t) (object t)) ()) (defgeneric add-to-instance (instance object) (:method-combination progn :most-specific-last)) (defmethod add-to-instance progn ((instance t) (object t)) ()) (defgeneric watched-slots (object) (:method-combination append)) (defmethod watched-slots append ((object t)) '()) (defmethod section ((object t)) object) (defgeneric node-access-p (node action) (:method-combination or)) (defmethod node-access-p or ((node node) (action t)) nil) (defmacro alert (&body body) `(add-alert (html-output ,@body))) (defun uri::print-query-string (query stream) (if (eq stream *html-output*) (escape query "&") (write-string query stream))) (defmethod text ((object t) (symbol (eql 'class))) (let ((name (string (class-name (class-of object))))) (nstring-capitalize (remove-extra-spaces name :predicate (complement #'alpha-char-p)))))