. */ if (!defined('LACONICA')) { exit(1); } class Action { // lawsuit var $args; function Action() { } # For initializing members of the class function prepare($argarray) { $this->args =& common_copy_args($argarray); return true; } # For comparison with If-Last-Modified # If not applicable, return NULL function last_modified() { return NULL; } function etag() { return NULL; } function is_readonly() { return false; } function arg($key, $def=NULL) { if (array_key_exists($key, $this->args)) { return $this->args[$key]; } else { return $def; } } function trimmed($key, $def=NULL) { $arg = $this->arg($key, $def); return (is_string($arg)) ? trim($arg) : $arg; } # Note: argarray ignored, since it's now passed in in prepare() function handle($argarray=NULL) { $lm = $this->last_modified(); $etag = $this->etag(); if ($etag) { header('ETag: ' . $etag); } if ($lm) { header('Last-Modified: ' . date(DATE_RFC1123, $lm)); $if_modified_since = $_SERVER['HTTP_IF_MODIFIED_SINCE']; if ($if_modified_since) { $ims = strtotime($if_modified_since); if ($lm <= $ims) { if (!$etag || $this->_has_etag($etag, $_SERVER['HTTP_IF_NONE_MATCH'])) { header('HTTP/1.1 304 Not Modified'); # Better way to do this? exit(0); } } } } } function _has_etag($etag, $if_none_match) { return ($if_none_match) && in_array($etag, explode(',', $if_none_match)); } function boolean($key, $def=false) { $arg = strtolower($this->trimmed($key)); if (is_null($arg)) { return $def; } else if (in_array($arg, array('true', 'yes', '1'))) { return true; } else if (in_array($arg, array('false', 'no', '0'))) { return false; } else { return $def; } } function server_error($msg, $code=500) { $action = $this->trimmed('action'); common_debug("Server error '$code' on '$action': $msg", __FILE__); common_server_error($msg, $code); } function client_error($msg, $code=400) { $action = $this->trimmed('action'); common_debug("User error '$code' on '$action': $msg", __FILE__); common_user_error($msg, $code); } function self_url() { $action = $this->trimmed('action'); $args = $this->args; unset($args['action']); foreach (array_keys($_COOKIE) as $cookie) { unset($args[$cookie]); } return common_local_url($action, $args); } function nav_menu($menu) { $action = $this->trimmed('action'); common_element_start('ul', array('id' => 'nav_views')); foreach ($menu as $menuaction => $menudesc) { common_menu_item(common_local_url($menuaction, isset($menudesc[2]) ? $menudesc[2] : NULL), $menudesc[0], $menudesc[1], $action == $menuaction); } common_element_end('ul'); } }