Overview

Packages

  • Ansel
  • None

Classes

  • Ansel
  • Ansel_Ajax_Application
  • Ansel_Ajax_Imple_EditCaption
  • Ansel_Ajax_Imple_EditFaces
  • Ansel_Ajax_Imple_EditGalleryFaces
  • Ansel_Ajax_Imple_Embed
  • Ansel_Ajax_Imple_GallerySlugCheck
  • Ansel_Ajax_Imple_ImageSaveGeotag
  • Ansel_Ajax_Imple_LocationAutoCompleter
  • Ansel_Ajax_Imple_MapLayerSelect
  • Ansel_Ajax_Imple_TagActions
  • Ansel_Ajax_Imple_ToggleGalleryActions
  • Ansel_Ajax_Imple_ToggleOtherGalleries
  • Ansel_Ajax_Imple_UploadNotification
  • Ansel_Api
  • Ansel_Exception
  • Ansel_Faces
  • Ansel_Faces_Base
  • Ansel_Faces_Facedetect
  • Ansel_Faces_User
  • Ansel_Factory_Faces
  • Ansel_Factory_Storage
  • Ansel_Factory_Styles
  • Ansel_Form_Ecard
  • Ansel_Form_Image
  • Ansel_Form_ImageDate
  • Ansel_Form_Upload
  • Ansel_Gallery
  • Ansel_Gallery_Decorator_Date
  • Ansel_GalleryMode_Base
  • Ansel_GalleryMode_Date
  • Ansel_GalleryMode_Normal
  • Ansel_Image
  • Ansel_ImageGenerator
  • Ansel_ImageGenerator_Mini
  • Ansel_ImageGenerator_PolaroidThumb
  • Ansel_ImageGenerator_PolaroidThumbStack
  • Ansel_ImageGenerator_RoundedThumb
  • Ansel_ImageGenerator_RoundedThumbStack
  • Ansel_ImageGenerator_Screen
  • Ansel_ImageGenerator_ShadowThumb
  • Ansel_ImageGenerator_ShadowThumbStack
  • Ansel_ImageGenerator_SquareThumb
  • Ansel_ImageGenerator_Thumb
  • Ansel_LoginTasks_SystemTask_Upgrade
  • Ansel_Report
  • Ansel_Report_letter
  • Ansel_Report_mail
  • Ansel_Report_tickets
  • Ansel_Search
  • Ansel_Search_exif
  • Ansel_Search_Tag
  • Ansel_Storage
  • Ansel_Style
  • Ansel_Tagger
  • Ansel_Test
  • Ansel_Tile_DateGallery
  • Ansel_Tile_Gallery
  • Ansel_Tile_Image
  • Ansel_View_Ansel
  • Ansel_View_Base
  • Ansel_View_EmbeddedRenderer_GalleryLink
  • Ansel_View_EmbeddedRenderer_Mini
  • Ansel_View_EmbeddedRenderer_Slideshow
  • Ansel_View_Gallery
  • Ansel_View_GalleryProperties
  • Ansel_View_GalleryRenderer_Base
  • Ansel_View_GalleryRenderer_Gallery
  • Ansel_View_GalleryRenderer_GalleryLightbox
  • Ansel_View_Image
  • Ansel_View_List
  • Ansel_View_Results
  • Ansel_View_Slideshow
  • Ansel_View_Upload
  • Ansel_Widget
  • Ansel_Widget_Actions
  • Ansel_Widget_Base
  • Ansel_Widget_GalleryFaces
  • Ansel_Widget_Geotag
  • Ansel_Widget_ImageFaces
  • Ansel_Widget_Links
  • Ansel_Widget_OtherGalleries
  • Ansel_Widget_OwnerFaces
  • Ansel_Widget_SimilarPhotos
  • Ansel_Widget_Tags
  • Ansel_XPPublisher
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * Ansel_Ajax_Imple_EditGalleryFaces:: class for performing Ajax discovery of
  4:  * an entire gallery's images.
  5:  *
  6:  * Copyright 2008-2012 Horde LLC (http://www.horde.org/)
  7:  *
  8:  * @author Duck <duck@obala.net>
  9:  * @author Michael J. Rubinsky <mrubinsk@horde.org>
 10:  *
 11:  * @package Ansel
 12:  */
 13: class Ansel_Ajax_Imple_EditGalleryFaces extends Horde_Ajax_Imple_Base
 14: {
 15:     /**
 16:      * Attach these actions to the view
 17:      *
 18:      */
 19:     public function attach()
 20:     {
 21:         Horde::addScriptFile('editfaces.js');
 22:         $url = $this->_getUrl('EditFaces', 'ansel');
 23:         $js = array();
 24:         $js[] = "Ansel.ajax['editFaces'] = {'url':'" . $url . "', text: {loading:'" . _("Loading...") . "'}};";
 25:         $image_id = $this->_params['image_id'];
 26:         /* Start by getting the faces */
 27:         $faces = $GLOBALS['injector']->getInstance('Ansel_Faces');
 28:         $name = '';
 29:         $autocreate = true;
 30:         $results = $faces->getImageFacesData($image_id);
 31:         if (empty($results)) {
 32:             $image = $GLOBALS['injector']->getInstance('Ansel_Storage')->getImage($this->_params['image_id']);
 33:             $image->createView('screen');
 34:             $results = $faces->getFromPicture($this->_params['image_id'], $autocreate);
 35:         }
 36:         if (!empty($results)) {
 37:             $customurl = Horde::url('faces/custom.php');
 38:             $url = (!empty($args['url']) ? urldecode($args['url']) : '');
 39:             Horde::startBuffer();
 40:             require_once ANSEL_TEMPLATES . '/faces/image.inc';
 41:             return Horde::endBuffer();
 42:         } else {
 43:             return _("No faces found");
 44:         }
 45: 
 46:         Horde::addInlineScript($js, 'dom');
 47:     }
 48: 
 49:     function handle($args, $post)
 50:     {
 51:         if (Horde_Auth::getAuth()) {
 52:             $action = $args['action'];
 53:             $image_id = (int)$post['image'];
 54:             $reload = empty($post['reload']) ? 0 : $post['reload'];
 55: 
 56:             if (empty($action)) {
 57:                 return array('response' => 0);
 58:             }
 59: 
 60:             $faces = $GLOBALS['injector']->getInstance('Ansel_Faces');
 61:             switch($action) {
 62:             case 'process':
 63:                 // process - detects all faces in the image.
 64:                 $name = '';
 65:                 $autocreate = true;
 66:                 $result = $faces->getImageFacesData($image_id);
 67:                 // Attempt to get faces from the picture if we don't already have results,
 68:                 // or if we were asked to explicitly try again.
 69:                 if (($reload || empty($result))) {
 70:                     $image = $GLOBALS['injector']->getInstance('Ansel_Storage')->getImage($image_id);
 71:                     $image->createView('screen');
 72:                     $result = $faces->getFromPicture($image_id, $autocreate);
 73:                 }
 74:                 if (!empty($result)) {
 75:                     $customurl = Horde::url('faces/custom.php');
 76:                     $url = (!empty($args['url']) ? urldecode($args['url']) : '');
 77:                     Horde::startBuffer();
 78:                     require_once ANSEL_TEMPLATES . '/faces/image.inc';
 79:                     $html = Horde::endBuffer();
 80:                     return array('response' => 1,
 81:                                  'message' => $html);
 82:                 } else {
 83:                     return array('response' => 1,
 84:                                  'message' => _("No faces found"));
 85:                 }
 86:                 break;
 87: 
 88:             case 'delete':
 89:                 // delete - deletes a single face from an image.
 90:                 $face_id = (int)$post['face'];
 91:                 $image = &$GLOBALS['injector']->getInstance('Ansel_Storage')->getImage($image_id);
 92:                 $gallery = &$GLOBALS['injector']->getInstance('Ansel_Storage')->getGallery($image->gallery);
 93:                 if (!$gallery->hasPermission(Horde_Auth::getAuth(), Horde_Perms::EDIT)) {
 94:                     throw new Horde_Exception('Access denied editing the photo.');
 95:                 }
 96: 
 97:                 $faces = $GLOBALS['injector']->getInstance('Ansel_Faces');
 98:                 $faces->delete($image, $face_id);
 99:                 break;
100: 
101:             case 'setname':
102:                 // setname - sets the name of a single image.
103:                 $face_id = (int)$post['face'];
104:                 if (!$face_id) {
105:                     return array('response' => 0);
106:                 }
107: 
108:                 $name = $post['facename'];
109:                 $image = &$GLOBALS['injector']->getInstance('Ansel_Storage')->getImage($image_id);
110:                 $gallery = &$GLOBALS['injector']->getInstance('Ansel_Storage')->getGallery($image->gallery);
111:                 if (!$gallery->hasPermission(Horde_Auth::getAuth(), Horde_Perms::EDIT)) {
112:                     throw new Horde_Exception('You are not allowed to edit this photo');
113:                 }
114: 
115:                 $faces = $GLOBALS['injector']->getInstance('Ansel_Faces');
116:                 $result = $faces->setName($face_id, $name);
117:                 return array('response' => 1,
118:                              'message' => Ansel_Faces::getFaceTile($face_id));
119:                 break;
120:             }
121:         }
122:     }
123: 
124: }
125: 
API documentation generated by ApiGen