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(); }
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); }