public function execute()
 {
     $photo_id = $this->post('id', true);
     if (!is_array($photo_id)) {
         if (strpos($photo_id, ',') !== false) {
             $photo_id = array_map('intval', explode(',', $photo_id));
         } else {
             $photo_id = array($photo_id);
         }
     }
     $tag = waRequest::post('tag', '');
     if (!$tag) {
         $tag = array();
     }
     if (!is_array($tag)) {
         if (strpos($tag, ',') !== false) {
             $tag = explode(',', $tag);
         } else {
             $tag = array($tag);
         }
     }
     $tag = array_map('trim', $tag);
     $tag_model = new photosTagModel();
     $photo_tag_model = new photosPhotoTagsModel();
     $photo_rights_model = new photosPhotoRightsModel();
     $allowed_photo_id = $photo_rights_model->filterAllowedPhotoIds($photo_id, true);
     if ($allowed_photo_id) {
         $photo_tag_model->assign($allowed_photo_id, $tag_model->getIds($tag, true));
         $this->response = true;
     } else {
         throw new waAPIException('access_denied', 403);
     }
 }
 public function execute()
 {
     $photo_id = waRequest::post('photo_id', array(), waRequest::TYPE_ARRAY_INT);
     $one_photo = waRequest::post('one_photo', 0, waRequest::TYPE_INT);
     $tags = waRequest::post('tags', '', waRequest::TYPE_STRING_TRIM);
     $tags = $tags ? explode(',', $tags) : array();
     $delete_tags = waRequest::post('delete_tags', array(), waRequest::TYPE_ARRAY_INT);
     $tag_model = new photosTagModel();
     $photo_tag_model = new photosPhotoTagsModel();
     $photo_rights_model = new photosPhotoRightsModel();
     $allowed_photo_id = $photo_rights_model->filterAllowedPhotoIds($photo_id, true);
     $denied_photo_id = array_values(array_diff($photo_id, $allowed_photo_id));
     if ($allowed_photo_id) {
         if ($one_photo) {
             $allowed_photo_id = $allowed_photo_id[0];
             $photo_tag_model->set($allowed_photo_id, $tags);
             $photo_model = new photosPhotoModel();
             if ($parent_id = $photo_model->getStackParentId($allowed_photo_id)) {
                 $this->response['parent_id'] = $parent_id;
             }
         } else {
             if ($delete_tags) {
                 $photo_tag_model->delete($allowed_photo_id, $delete_tags);
             }
             $photo_tag_model->assign($allowed_photo_id, $tag_model->getIds($tags, true));
         }
         $allowed_photo_id = (array) $allowed_photo_id;
         $tags = $photo_tag_model->getTags($allowed_photo_id);
         if (!$tags && $allowed_photo_id) {
             $tags = array_fill_keys($allowed_photo_id, array());
         }
         $this->response['tags'] = $tags;
     }
     if ($denied_photo_id) {
         $this->response['alert_msg'] = photosPhoto::sprintf_wplural("The operation was not performed to %d photo (%%s)", "The operation was not performed to %d photos (%%s)", count($denied_photo_id), _w("out of %d selected", "out of %d selected", count($photo_id))) . ', ' . _w("because you don't have sufficient access rights") . '.';
     }
     $this->response['cloud'] = $tag_model->getCloud();
 }
예제 #3
0
 private function _makeStack($parent_id, $photo_ids, $op = 'make')
 {
     $photo_ids = (array) $photo_ids;
     if ($op == 'make') {
         $where = $this->getWhereByField('id', $photo_ids);
         // get description - first not empty description but description of parent is first-priority
         $sql = "SELECT description FROM {$this->table} WHERE id = i:parent_id AND description IS NOT NULL\n                    UNION\n                    SELECT description FROM {$this->table} WHERE {$where} AND description IS NOT NULL LIMIT 0,1";
         $description = $this->query($sql, array('parent_id' => $parent_id))->fetchField('description');
         // get max rate of all photos
         $sql = "SELECT MAX(rate) rate FROM {$this->table} WHERE id = i:parent_id OR {$where}";
         $rate = $this->query($sql, array('parent_id' => $parent_id))->fetchField('rate');
         // get status
         $sql = "SELECT status FROM {$this->table} WHERE id = i:parent_id";
         $status = $this->query($sql, array('parent_id' => $parent_id))->fetchField('status');
         $stack_count = 1;
         $sort = 1;
     } else {
         $parent = $this->getById($parent_id);
         $rate = $parent['rate'];
         $description = $parent['description'];
         $status = $parent['status'];
         $stack_count = $parent['stack_count'];
         // get last sort value of stack plus 1
         $sql = "SELECT sort FROM {$this->table} WHERE parent_id = i:parent_id ORDER BY sort DESC LIMIT 1";
         $sort = $this->query($sql, array('parent_id' => $parent_id))->fetchField('sort') + 1;
     }
     // get groups
     $photo_rights_model = new photosPhotoRightsModel();
     $groups = array_keys($photo_rights_model->getByField('photo_id', $parent_id, 'group_id'));
     // make first of all operations connected with file-manipulations
     foreach ($photo_ids as $id) {
         // update access
         $this->upAccess($id, array('status' => $status, 'groups' => $groups));
     }
     // make children of stack
     foreach ($photo_ids as $id) {
         $this->updateById($id, array('parent_id' => $parent_id, 'description' => $description, 'rate' => $rate, 'sort' => $sort++, 'stack_count' => 0));
     }
     // make parent of stack
     $this->updateById($parent_id, array('parent_id' => 0, 'description' => $description, 'rate' => $rate, 'stack_count' => $stack_count + count($photo_ids), 'sort' => 0));
     if ($op == 'make') {
         $photo_ids[] = $parent_id;
     } else {
         $photo_ids = array_keys($this->getByField('parent_id', $parent_id, 'id'));
         $photo_ids[] = $parent_id;
     }
     // merge tags for stack
     $photo_tags_model = new photosPhotoTagsModel();
     $tag_ids = array_keys($photo_tags_model->getByField('photo_id', $photo_ids, 'tag_id'));
     $photo_tags_model->assign($photo_ids, $tag_ids);
     // merge albums for stack
     $album_photos_model = new photosAlbumPhotosModel();
     $album_ids = array_keys($album_photos_model->getByField('photo_id', $photo_ids, 'album_id'));
     $album_photos_model->add($photo_ids, $album_ids, false);
 }