<?xml version="1.0" encoding="UTF-8"?>
<!--
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements. See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to you under the Apache License, Version
    2.0 (the "License"); you may not use this file except in compliance
    with the License. You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0 Unless required by
    applicable law or agreed to in writing, software distributed under the
    License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
    CONDITIONS OF ANY KIND, either express or implied. See the License for
    the specific language governing permissions and limitations under the
    License.
-->
<section xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    version="5.0" xmlns:xl="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude"
    xsi:schemaLocation="http://docbook.org/ns/docbook ../../../content/dtd/docbook.xsd"
    xmlns="http://docbook.org/ns/docbook">
    <title>Image Management Help.</title>
    <para>The Image Management module manages many kind of image what user want. There are various functions including 'Gallery', 'Upload', 'Approved', 'Manage' etc.</para>
    <para>
         <orderedlist>
            <listitem>
                <para>Go to Catalog Component.</para>
                <para>Go to Image Management.</para>
            </listitem>
         </orderedlist>
    </para>
    <section>
        <title>How To Add Security Group For Image Management User</title>
        <para>There are three security groups related in the Image Management including 'IMAGEADMIN', 'IMAGEAPPROVE' and ' IMAGEUPLOAD'.</para>
        <para>
            <orderedlist>
                <listitem>
                    <para>Go to 'Party' component.</para>
                    <para>Search 'UserLogin' or 'Party Id'.</para>
                    <para>Click 'UserLogin' or 'Party Id'.</para>
                    <para>At 'User Name(s)', click 'Security Groups' button.</para>
                    <para>At 'Add UserLogin to Security Group', select group 'IMAGEADMIN Image Management Admin' for use all operations in the Image Management.</para>
                    <para>select 'IMAGEUPLOAD Image Management Upload': To add party's permission for uploading, or select 'IMAGEAPPROVE Image Management Approve': To add party's permission for approving.</para>
                </listitem>
            </orderedlist>
        </para>
    </section>
    <section>
        <title>How To Add Role For Approve Image To Party Id</title>        
        <para>When user click partyId into party's screen already. Select the submenu 'Role(s)' to add the role to party</para>
        <para>There is Add To Role screenlet, select role 'Image Approver'(on the combobox role type Id) then click 'add' button.</para>
    </section>
    <section>
        <title>Gallery</title>
        <section>
            <para>Gallery shows all images which have approved.</para>
            <para>Note: Everybody can access Gallery function.</para>
            <orderedlist>
                <listitem>
                    <para>Click 'Gallery' button, then choose a 'Product Id' by type or click a find icon.</para>
                    <para>Click 'Submit' button, then you will see all images which have approved.</para>
                    <para>You can click 'Share' button that generates any codes to share your images to any people.</para>
                </listitem>
            </orderedlist>
        </section>
    </section>
    <section>
        <title>Upload</title>
        <section>
            <para>In this function, you can upload image files into system. You can upload many image files up to 10 files.</para>
            <para>Note: You must have Image Management Upload permission for access Upload function.</para>
            <orderedlist>
                <listitem>
                    <para>Go to 'Upload' section, Enter 'Product Id' by type or click a find icon.</para>
                    <para>Optional, you can specify the size of images.</para>
                    <para>Then click 'Browse' button to choose image file(s).</para>
                    <para>Click 'Upload' button.</para>
                </listitem>
            </orderedlist>
        </section>
    </section>
    <section>
        <title>Recently Approved</title>
        <section>
            <para>In this function, you can see the images which have been approved for 14 days recently.</para>
            <para>Note: You must have Image Management Admin permission for access this function.</para>
            <orderedlist>
                <listitem>
                    <para>Click 'Recently Approved' Button, then you will see the lists of recently approved product which are separated by date.</para>
                    <para>Click on product id to see its images with details.</para>
                </listitem>
            </orderedlist>
        </section>
    </section>
    <section>
        <title>Approve</title>
        <section>
            <para>In this function, you can set the status of each image including 'Approve', 'Pending' and 'Rejected'.</para>
            <para>Note: You must have Image Management Admin permission for access this function.</para>
            <orderedlist>
                <listitem>
                    <para>Click 'Approve' Button, then specify the status of each image.</para>
                    <para>Choose 'Approve' status for approve image.</para>
                    <para>Choose 'Reject' status for reject image..</para>
                    <para>Choose 'Pending' status for pending image..</para>
                    <para>Click 'Submit' button.</para>
                </listitem>
            </orderedlist>
            <para>The images will be approved if all image administrators approved them. But if only one person rejects an image then that image will be rejected.</para>
        </section>
    </section>
    <section>
        <title>Rejected</title>
        <section>
            <para>The Rejected function shows the images which have rejected.</para>
            <para>Note: You must have Image Management Admin permission for access this function.</para>
            <orderedlist>
                <listitem>
                    <para>Click 'Rejected' button, then you specify the reason of rejection each image.</para>
                    <para>Then click 'Submit' button.</para>
                </listitem>
            </orderedlist>
        </section>
    </section>
    <section>
        <title>Manage</title>
        <section>
            <para>You can edit image such as add frame, crop image etc. You can also add caption, sort order, enable image and choose thumbnail in this function.</para>
            <para>Note: You must have Image Management Admin permission for access this function.</para>
            <orderedlist>
                <listitem>
                    <para>Click 'Manage' Button, then you can choose action including 'Frame', 'Crop' and 'Rotate' (see below for more details).</para>
                    <para>Enter your image caption.</para>
                    <para>Sort order of image by enter order number.</para>
                    <para>Enable image by tick enable checkbox.</para>
                    <para>Select image thumbnail of product.</para>
                    <para>Click 'Submit' button.</para>
                </listitem>
            </orderedlist>
            <section>
                <title>- Frame</title>
                <section>
                    <para>In Frame function, you can merge your image with the frame image (transparent image file e.g. PNG type) together.</para>
                    <para>The frame image should be larger than selected image.</para>
                    <orderedlist>
                        <listitem>
                            <para>Choose 'Frame' then choose the image you want to merge frame.</para>
                            <para>Select the frame image by browsing transparent image file, such as PNG type.</para>
                            <para>Click 'Upload' button to upload the frame image.</para>
                            <para>Enter width and height of image.</para>
                            <para>Optional, you click 'Preview' to see example image.</para>
                            <para>Click 'Create' button.</para>
                        </listitem>
                    </orderedlist>
                </section>
            </section>
            <section>
                <title>- Crop</title>
                <section>
                    <para>You can crop any images in this function.</para>
                    <orderedlist>
                        <listitem>
                            <para>Choose 'Crop' then choose your image.</para>
                            <para>Move your cursor on the image, then drag your mouse to crop image.</para>
                            <para>You can see the preview image in the right hand side.</para>
                            <para>Finally, you click 'Crop' button.</para>
                        </listitem>
                    </orderedlist>
                </section>
            </section>
            <section>
                <title>- Rotate</title>
                <section>
                    <para>You can rotate images in this function.</para>
                    <orderedlist>
                        <listitem>
                            <para>Choose 'Rotate' then click clockwise or counterclockwise button for ratating image.</para>
                            <para>Click 'Submit' button</para>
                        </listitem>
                    </orderedlist>
                </section>
            </section>
        </section>
    </section>
    <section>
        <title>Replace</title>
        <section>
            <para>In this function, you can replace the selected image with other image.</para>
            <para>The image which you want to replace must be approved first.</para>
            <orderedlist>
                <listitem>
                    <para>Click 'Replace' button, Enter 'Product Id' by type or click a find icon.</para>
                    <para>Then choose the image which you want to replace.</para>
                    <para>Choose the other image to replace with the selected image.</para>
                    <para>Click 'Submit' button.</para>
                </listitem>
            </orderedlist>
        </section>
    </section>
    <!--<section>
        <title>Automatic Resize</title>
        <section>
            <para>You can resize any images in this function.</para>
            <orderedlist>
                <listitem>
                    <para>Go to 'Automatic Resize' section, Enter 'Product Id' by type or click a find icon.</para>
                    <para>Choose Image to resize, then you can select a size.</para>
                    <para>Click 'Upload Image'.</para>
                </listitem>
            </orderedlist>
        </section>
    </section>-->
</section>
