$datas = array(); foreach ($images as $id) { $datas[] = array('category_id' => $category_id, 'image_id' => $id, 'rank' => ++$current_rank); } $fields = array('primary' => array('image_id', 'category_id'), 'update' => array('rank')); mass_updates(IMAGE_CATEGORY_TABLE, $fields, $datas); } // +-----------------------------------------------------------------------+ // | global mode form submission | // +-----------------------------------------------------------------------+ $image_order_choices = array('default', 'rank', 'user_define'); $image_order_choice = 'default'; if (isset($_POST['submit'])) { if (isset($_POST['rank_of_image'])) { asort($_POST['rank_of_image'], SORT_NUMERIC); save_images_order($page['category_id'], array_keys($_POST['rank_of_image'])); $page['infos'][] = l10n('Images manual order was saved'); } if (!empty($_POST['image_order_choice']) && in_array($_POST['image_order_choice'], $image_order_choices)) { $image_order_choice = $_POST['image_order_choice']; } $image_order = null; if ($image_order_choice == 'user_define') { for ($i = 0; $i < 3; $i++) { if (!empty($_POST['image_order'][$i])) { if (!empty($image_order)) { $image_order .= ','; } $image_order .= $_POST['image_order'][$i]; } }
/** * API method * Sets the rank of an image in a category * @param mixed[] $params * @option int image_id * @option int category_id * @option int rank */ function ws_images_setRank($params, $service) { if (count($params['image_id']) > 1) { include_once PHPWG_ROOT_PATH . 'admin/include/functions.php'; save_images_order($params['category_id'], $params['image_id']); $query = ' SELECT image_id FROM ' . IMAGE_CATEGORY_TABLE . ' WHERE category_id = ' . $params['category_id'] . ' ORDER BY rank ASC ;'; $image_ids = query2array($query, null, 'image_id'); // return data for client return array('image_id' => $image_ids, 'category_id' => $params['category_id']); } // turns image_id into a simple int instead of array $params['image_id'] = array_shift($params['image_id']); if (empty($params['rank'])) { return new PwgError(WS_ERR_MISSING_PARAM, 'rank is missing'); } // does the image really exist? $query = ' SELECT COUNT(*) FROM ' . IMAGES_TABLE . ' WHERE id = ' . $params['image_id'] . ' ;'; list($count) = pwg_db_fetch_row(pwg_query($query)); if ($count == 0) { return new PwgError(404, 'image_id not found'); } // is the image associated to this category? $query = ' SELECT COUNT(*) FROM ' . IMAGE_CATEGORY_TABLE . ' WHERE image_id = ' . $params['image_id'] . ' AND category_id = ' . $params['category_id'] . ' ;'; list($count) = pwg_db_fetch_row(pwg_query($query)); if ($count == 0) { return new PwgError(404, 'This image is not associated to this category'); } // what is the current higher rank for this category? $query = ' SELECT MAX(rank) AS max_rank FROM ' . IMAGE_CATEGORY_TABLE . ' WHERE category_id = ' . $params['category_id'] . ' ;'; $row = pwg_db_fetch_assoc(pwg_query($query)); if (is_numeric($row['max_rank'])) { if ($params['rank'] > $row['max_rank']) { $params['rank'] = $row['max_rank'] + 1; } } else { $params['rank'] = 1; } // update rank for all other photos in the same category $query = ' UPDATE ' . IMAGE_CATEGORY_TABLE . ' SET rank = rank + 1 WHERE category_id = ' . $params['category_id'] . ' AND rank IS NOT NULL AND rank >= ' . $params['rank'] . ' ;'; pwg_query($query); // set the new rank for the photo $query = ' UPDATE ' . IMAGE_CATEGORY_TABLE . ' SET rank = ' . $params['rank'] . ' WHERE image_id = ' . $params['image_id'] . ' AND category_id = ' . $params['category_id'] . ' ;'; pwg_query($query); // return data for client return array('image_id' => $params['image_id'], 'category_id' => $params['category_id'], 'rank' => $params['rank']); }