Commit Graph
181 Commits
Author SHA1 Message Date
Bharat Mediratta fdc0f83024 Big round of normalization of the way that our controllers
communicate.  Almost all controllers now use JSON to speak to the
theme when we're dealing with form processing.  This means tht we only
send the form back and forth, but we use a JSON protocol to tell the
browser success/error status as well as the location of any newly
created resources, or where the browser should redirect the user.

Lots of small changes:
1) Admin -> Edit Profile is gone.  Instead I fixed the "Modify Profile" link
   in the top right corner to be a modal dialog

2) We use json_encode everywhere.  No more Atom/XML for now.  We can bring those
   back later, though.  For now there's a lot of code duplication but that'll be
   easy to clean up.

3) REST_Controller is no longer abstract.   All methods its subclasses should create
   throw exceptions, which means that subclasses don't have to implement stubs for
   those methods.

4) New pattern: helper method get_add_form calls take an Item_Model,
   not an id since we have to load the Item_Model in the controller
   anyway to check permissions.

5) User/Groups REST resources are separate from User/Group in the site
   admin.  They do different things, we should avoid confusing overlap.
2008-12-25 05:12:46 +00:00
Bharat Mediratta 672eca5337 Lots of deltas rolled up into a bigger change. Sorry for the mess.
1) Deleted in-place-editing.  We'll be replacing this with a real edit
   system that groups settings together and is more coherent.

2) Tweaked the way that dialog boxes work to get the ajax stuff working
   again.  It's imperfect and does not work properly for uploading images.
   This is going to get redone also, but this is a good resting point.

3) Created edit forms for albums and photos.  Moved _update and _create out
   of Items_Controller and into the individual subclasses.

4) Created access::required which is a shorthand for:
    if (!access::can(...)) {
      access::forbidden();
    }

5) Added validation rules to Items_Model

6) Converted login to use the regular modal dialog approach in the theme.
2008-12-24 00:20:26 +00:00
Bharat Mediratta 76b1500209 Clean up the way that we upload via dialogs:
1) If the create request is Ajax, then return a 201 Created response code
2) If we receive back a 201 response, then switch to the new page.
3) Display a status message when we do an upload.
2008-12-23 07:30:14 +00:00
Bharat Mediratta 360fbda04c Only clear the dirty bit if we updated the specific target. 2008-12-23 04:46:13 +00:00
Bharat Mediratta 5713e3c66e Change photo::create() and album::create() to take ORM instances
instead of ids.
2008-12-23 04:36:09 +00:00
Bharat Mediratta 2502240ce4 Add very simple graphics toolkits.
Track a set of rules in Graphics_Rule_Model which specify how we turn
original images into thumbnails and resizes.  There's one set of rules
that applies to every image in the Gallery.

Track the state of thumbs and resizes with a "dirty" bit.  The new
graphics helper manages the rules and can rebuild the thumbs and
resizes for any images that are considered "dirty".

Introduce the concept of an "album cover" which is an item that an
album points to.  We'll use that item as the source for the album's
thumbnail/resize.

Conflated with this change (sorry!) I also changed the Var table to
use module_name instead of module_id.  This may be marginally less
efficient, but it's much easier to follow in the database.
2008-12-23 04:14:07 +00:00
Bharat Mediratta 608d099669 Update comment. 2008-12-23 01:49:26 +00:00
Bharat Mediratta ddcf10dfce Allow the site admin to upload watermark images. Can't do much with them yet. 2008-12-23 01:29:17 +00:00
Bharat Mediratta f476e2169e Change photo::img_dimensions to take the dimensions, not a photo. This lets us use it in the watermark module too 2008-12-23 01:27:50 +00:00
Bharat Mediratta 27a3fc9230 Fix a typo 2008-12-22 20:42:00 +00:00
Bharat Mediratta 3a71a9d5c1 Add message severity CSS classes to status messages. Create
message::severity_class() to do the conversion and convert the log
entry code to use that.
2008-12-22 20:23:28 +00:00
Bharat Mediratta 03042850ad Fix admin/modules url. 2008-12-22 10:32:32 +00:00
Bharat Mediratta bdc0876fa8 Add messaging system for reporting actions back to the user. Make
module install/uninstall work and tie it into the messaging system.
2008-12-22 06:50:20 +00:00
Bharat Mediratta f6381c534e Reinstate the dummy error handler to ensure that we work in a clean install w/ no database 2008-12-22 04:54:51 +00:00
Bharat Mediratta 9cf2c57921 Normalize CSRF handling into the access helper. Probably not the best
place for it, but it'll do for now.

Do CSRF checking in the Admin controller so that we're safe across the
board on the admin side.
2008-12-22 04:33:18 +00:00
Bharat Mediratta 74c417cab9 Lock a couple of modules 2008-12-22 04:31:04 +00:00
Bharat Mediratta b526cc8c0b Add some admin theme callbacks and make them explicitly admin_xxx for consistency
with the callbacks in the xxx_block helpers.  So in the theme we have:

admin.html.php:
  $theme->admin_page_bottom()

then in the helpers:

core_block.php:
  function admin_page_bottom() { }
2008-12-22 03:53:36 +00:00
Bharat Mediratta fe27bd1eb3 Change the way that we track modules.
Each module now has a "module.info" file that has information about
the module, including the core.  We can display the installed version,
and the version in the code.

Also take a first shot at a modules admin page.
2008-12-22 03:41:33 +00:00
Bharat Mediratta 7934076a3b Add phpdoc comments. 2008-12-21 21:52:49 +00:00
Bharat Mediratta 1432ab9aca Swap "Content" and "Modules" 2008-12-21 20:44:02 +00:00
Bharat Mediratta 4c2ddfb868 INFO -> log::INFO 2008-12-21 04:42:25 +00:00
Bharat Mediratta 3ce32dab55 Report actual log entries in the "log entries" admin block. 2008-12-21 03:56:53 +00:00
Bharat Mediratta f0b6333344 Add a logging facility, and instrument login/logout to use it. 2008-12-21 03:50:11 +00:00
Bharat Mediratta a19a4729b5 Implement the 'Project News' block with actual news from GMC.. woot! 2008-12-21 02:36:32 +00:00
Bharat Mediratta 8f87a030c8 Implement the photo stream with the most recently uploaded photos. 2008-12-20 23:19:12 +00:00
Bharat Mediratta 99c481897b Add "created" and "updated" timestamps to the items table. 2008-12-20 22:49:32 +00:00
Bharat Mediratta 50b0613243 Add view counts and show them properly. 2008-12-20 20:04:57 +00:00
Bharat Mediratta 406830cbf8 use some real stats 2008-12-20 10:54:29 +00:00
Bharat Mediratta 9afd9d05ae Move log entries into its own block 2008-12-20 01:20:19 +00:00
Bharat Mediratta 16a3e43b45 Move the "Photo Stream" section into its own block 2008-12-20 01:16:46 +00:00
Bharat Mediratta e12a4f2ae3 Move the "status messages" section into its own block. 2008-12-20 01:13:57 +00:00
Bharat Mediratta 68e9dcf027 Move Platform and Project News admin sidebar blocks into the new
modular structure.
2008-12-20 01:08:39 +00:00
Bharat Mediratta ac4bb34cf2 Add admin sidebar blocks, and move the stats block into that pattern. 2008-12-20 01:00:52 +00:00
Bharat Mediratta aee3efe972 Create a pattern for admin dashboard blocks and make the "welcome"
block.
2008-12-20 00:52:20 +00:00
Bharat Mediratta 99f131d9ae Create module::load_themes() to load the correct theme after we do
routing and know whether we're going to an /admin page or a regular
one.
2008-12-20 00:50:37 +00:00
Bharat Mediratta 17c0b01444 Add access::forbidden() 2008-12-19 22:13:33 +00:00
Bharat Mediratta 855a5928ce Create a new pattern for Site Admin controllers:
1) They must all start with "admin_".  This pattern is not directly
   routable.

2) Their urls must be /admin/xxx.

3) The Admin_Controller will take the xxx and look for Admin_Xxx_Controller
   and will delegate to that admin controller, after doing security checks.

Moved the users and dashboard views into individual modules for now.
2008-12-19 09:47:13 +00:00
Bharat Mediratta 2438dba396 Delete the var/thumbs .htaccess files, too. 2008-12-19 07:16:38 +00:00
Bharat Mediratta c67234974d Refactor site admin menu into a theme function and build the menus in
the various modules.  In the process, rename xxx_menu::site_navigation() to just
xxx_menu::site().  And add xxx_menu::admin().

The menus are the same as before, but I changed the HTML to be
consistent with the way that we do it in the regular site, and this
broke the superfish styles.  I don't know how to fix this.. help me
Chad!
2008-12-18 07:32:34 +00:00
Bharat Mediratta 9b6ccfc7f3 Fix some lint errors 2008-12-17 19:06:39 +00:00
Bharat Mediratta 26f0b4e44d Clear out module list in load_modules() before trying any db operations 2008-12-17 19:04:20 +00:00
Bharat Mediratta fa5a8fde4a Switch from cookie sessions to database sessions. We can't use cookie
sessions; it encodes all the value into the cookie which means
little/no security, transfer costs, and storage limits.
2008-12-17 18:32:08 +00:00
Bharat Mediratta 130e26983a Add initialization to the user module to put the user and group_ids
into the session, for easy access.  This cuts down the number of
queries when we're loading images through file_proxy.php
2008-12-17 17:40:45 +00:00
Bharat Mediratta fc7b78492b Separate thumbnails out into var/thumbs. This clears up some ambiguity in Item_Model and simplifies
file_proxy.  It also means we can stop munging file names in the var/resizes hierarchy.

In the process, rename "thumbnail" to "thumb" everywhere in honor of
Chad (well, ok because it's shorter)..
2008-12-17 04:45:35 +00:00
Bharat Mediratta 8c7d0a76e5 Add file_proxy. This is controller gets triggered by .htaccess
protection on var/albums and var/resizes and only displays files to
the user if they have "view" permission on the base ite.
2008-12-16 23:07:33 +00:00
Bharat Mediratta e2544da5b0 Alphabetize field names to make it easier to find 'em. 2008-12-16 08:27:06 +00:00
Bharat Mediratta 3e219aab6b Change htaccess rules to use mod_rewrite 2008-12-16 08:17:00 +00:00
Bharat Mediratta 83363172b1 Don't use model_cache for get_version and set_version; that breaks the installer. 2008-12-16 05:04:42 +00:00
Bharat Mediratta 3273984582 Use model_cache::get() to reduce duplicate queries 2008-12-16 04:56:51 +00:00
Bharat Mediratta d9e02a5d0c Various optimizations:
o Add model_cache::get() which caches models avoiding duplicate lookups
o Stop using ORM relationships for Item_Model::owner so that we can use caching
o For Item_Model::xxx_edit fields, don't make them editable for guests
o Other minor stuff.

These optimizations reduce the number of queries for a 9-photos page from ~200
to ~45.  Still way too many!
2008-12-16 04:29:00 +00:00