Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
43 changes: 21 additions & 22 deletions docs/.vitepress/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,30 +17,31 @@ function loadSidebar(project: string): DefaultTheme.SidebarItem[] {
}

const projects = [
// { slug: 'shopify', label: 'Shopify' },
// { slug: 'magento2', label: 'Magento 2' },
// { slug: 'odoo-erp', label: 'Odoo ERP' },
// { slug: 'bigcommerce', label: 'BigCommerce' },
// { slug: 'shopware6', label: 'Shopware 6' },
// { slug: 'woocommerce', label: 'WooCommerce' },
// { slug: 'bagisto', label: 'Bagisto' },
// { slug: 'cs-cart', label: 'CS-Cart' },
// { slug: 'prestashop', label: 'PrestaShop' },
// { slug: 'icecat', label: 'Icecat' },
// { slug: 'xml-connector', label: 'XML Connector' },
// { slug: 'aws-integration', label: 'AWS Integration' },
{ slug: 'ai-product-feed-openai', label: 'AI Product Feed (OpenAI)' },
{ slug: 'auto-sku-generator', label: 'Auto SKU Generator' },
{ slug: 'aws-integration', label: 'AWS Integration' },
{ slug: 'bagisto', label: 'Bagisto' },
{ slug: 'bigcommerce', label: 'BigCommerce' },
{ slug: 'azure-integration', label: 'Azure Integration' },
{ slug: 'cloudflare-r2-integration', label: 'Cloudflare R2 Integration' },
{ slug: 'cs-cart', label: 'CS-Cart' },
{ slug: 'dam', label: 'DAM' },
// { slug: 'dam-webdav', label: 'DAM NextCloud' },
{ slug: 'deepl', label: 'DeepL Translator' },
// { slug: 'icecat', label: 'Icecat' },
// { slug: 'job-scheduler', label: 'Job Scheduler' },
{ slug: 'supplier-data-portal', label: 'Supplier Data Portal' },
// { slug: 'public-image-url', label: 'Public Image URL' },
{ slug: 'maker-checker-workflow', label: 'Maker Checker Workflow' },
{ slug: 'magento2', label: 'Magento 2' },
{ slug: 'odoo-erp', label: 'Odoo ERP' },
// { slug: 'pdf-generator', label: 'PDF Generator' },
// { slug: 'dam', label: 'DAM' },
// { slug: 'dam-webdav', label: 'DAM NextCloud' },
// { slug: 'prestashop', label: 'PrestaShop' },
// { slug: 'public-image-url', label: 'Public Image URL' },
{ slug: 'shopify', label: 'Shopify' },
// { slug: 'shopware6', label: 'Shopware 6' },
// { slug: 'starter-pack', label: 'Starter Pack' },
{ slug: 'auto-sku-generator', label: 'Auto SKU Generator' },
{ slug: 'deepl', label: 'DeepL Translator' },
{ slug: 'cloudflare-r2-integration', label: 'Cloudflare R2 Integration' }
{ slug: 'supplier-data-portal', label: 'Supplier Data Portal' },
{ slug: 'woocommerce', label: 'WooCommerce' },
// { slug: 'xml-connector', label: 'XML Connector' },
] as const

export default defineConfig({
Expand All @@ -64,6 +65,7 @@ export default defineConfig({
items: projects.map(p => ({ text: p.label, link: `/${p.slug}/` })),
},
{ text: 'User Guide', link: 'https://docs.unopim.com/' },
{text: 'Dev Doc', link: 'https://devdocs.unopim.com/'},
{ text: 'Contact Us', link: 'https://unopim.com/en/contacts/' },
],
sidebar: Object.fromEntries(
Expand All @@ -82,9 +84,6 @@ export default defineConfig({
message: 'Released under the <a href="https://opensource.org/licenses/mit" target="_blank">MIT License</a>.',
copyright: `Copyright © ${new Date().getFullYear()} UnoPim`,
},
socialLinks: [
{ icon: 'github', link: 'https://github.com/unopim' },
],
search: {
provider: 'local',
},
Expand Down
31 changes: 31 additions & 0 deletions docs/.vitepress/theme/Layout.vue
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,34 @@ onBeforeUnmount(() => {
</template>
</Layout>
</template>

<style scoped>
.vp-nav-icons {
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding-left: 0.5rem;
}

.vp-nav-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 2rem;
height: 2rem;
padding: 0.25rem;
border-radius: 9999px;
color: var(--vp-c-text-1);
transition: background-color 0.2s ease, color 0.2s ease;
}

.vp-nav-icon:hover {
background-color: var(--vp-c-default-soft);
color: var(--vp-c-brand);
}

.vp-nav-icon :deep(img),
.vp-nav-icon :deep(svg) {
display: block;
}
</style>
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
87 changes: 87 additions & 0 deletions docs/aws-integration/aws-s3-setup-in-unopim.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# AWS S3 Setup in UnoPim

After installing the **UnoPim AWS Integration** module, users with the required permissions can manage the AWS storage settings from the admin panel.

Go to:

**Left Menu → AWS S3 → Credentials**

![Configuration Access](./assets/unopim-setup/aws-s3.png)

From here, you can enable the module and connect UnoPim to **Amazon S3** so files are stored in your AWS bucket instead of only on the local server.

## What This Configuration Does

Once the setup is saved correctly:

- UnoPim can store supported files on **Amazon S3**.
- Your media can be served from the configured **bucket URL**.
- Cached file URLs are refreshed based on the **Environment Update Time** value.

## Fields You Need to Fill

To connect UnoPim with AWS, enter the configuration details created in your Amazon AWS account.

| Field | Description |
|---|---|
| **Access Key ID** | The public access key generated for your AWS IAM user. |
| **Secret Key** | The secret key paired with the Access Key ID. Keep this private. |
| **Bucket Name** | The exact name of the S3 bucket where UnoPim should store files. |
| **Region** | The AWS region where your bucket was created, such as `us-east-1` or `ap-south-1`. |
| **Bucket URL** | The public URL or bucket endpoint used to access files stored in the bucket. |

## How to Configure It

1. Open the **AWS S3 → Credentials** section in UnoPim.

![Configuration Access](./assets/unopim-setup/aws-s3-section.png)

2. Enable the module if it is currently disabled.

3. Enter the **Access Key ID** and **Secret Key** from your AWS account.
4. Add the correct **Bucket Name** and **Region**.
5. Enter the **Bucket URL** that should be used to access uploaded files.

![Configuration Fields](./assets/unopim-setup/aws-cred.png)

6. Save the configuration.

![Save Configuration](./assets/unopim-setup/save-cred.png)

After saving, UnoPim will use these details to connect with Amazon S3 for file storage.

## Understanding Environment Update Time

The **Environment Update Time** field controls how long image URLs stay cached in the browser before they are refreshed.

- The value is entered in **seconds**.
- During this time, the browser keeps using the existing cached image URL.
- A new request is made only after the configured time has passed.

If this field is left empty, UnoPim uses the default value:

`86400` seconds = `24 hours`

## Why This Setting Matters

This setting helps:

- reduce repeated file URL requests,
- avoid unnecessary fetches from AWS,
- improve loading efficiency for frequently viewed images.

## Recommended Before Saving

Before saving the configuration, make sure:

- your AWS credentials are valid,
- the S3 bucket name is correct,
- the selected region matches the bucket region,
- the bucket URL is accessible,
- the IAM user has permission to read and write files in the bucket.

If you have not prepared your AWS account yet, follow [Setup Credentials in Amazon S3](./setup-amazon.md) first.

Once your credentials are saved, continue to [Migrate Existing Files to S3](./migrate-existing-files.md) if you want to move older local media into Amazon S3.

If you also use **UnoPim DAM** and want to move DAM asset files from private local storage to S3, follow [DAM Asset Migration to AWS S3](./dam-asset-migration-to-aws-s3.md).
21 changes: 21 additions & 0 deletions docs/aws-integration/contact.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Contact & Support

That wraps up the user guide for the **UnoPim AWS Integration** extension. We hope this documentation helps you set up Amazon S3 storage in UnoPim with clarity.

If you have any queries, doubts, or need help with the extension, feel free to contact us.

## Get in Touch

**Email**
Reach out to us at [support@webkul.com](mailto:support@webkul.com) and our team will get back to you.

**HelpDesk**
You can also raise a ticket through the [Webkul HelpDesk System](https://webkul.uvdesk.com/en/).

This is useful if you want to:

- report an issue,
- ask a setup-related question,
- track the status of your support request.

We are happy to help whenever needed.
121 changes: 121 additions & 0 deletions docs/aws-integration/dam-asset-migration-to-aws-s3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
# DAM Asset Migration to AWS S3

If you use **UnoPim DAM** together with the **AWS S3 Integration**, you can move DAM asset files from the local private disk to your configured **Amazon S3** bucket.

This is useful when:

- your DAM assets were uploaded before AWS S3 was enabled,
- you want DAM files to be served from the same S3 storage as the rest of your media,
- you want to reduce storage usage on the local server after a successful migration.

## Command Signature

Run the following Artisan command from your UnoPim project:

```bash
php artisan unopim:dam:move-asset-to-s3
```

## Before You Start

Make sure the following setup is already complete:

1. The **AWS Integration** module is installed and configured.
2. Your **Amazon S3 bucket** is reachable with valid credentials.
3. The **UnoPim DAM** module is installed and working correctly.
4. The DAM assets you want to migrate are still available on the local private disk.

If your AWS setup is not ready yet, complete these guides first:

- [Setup Credentials in Amazon S3](./setup-amazon.md)
- [AWS S3 Setup in UnoPim](./aws-s3-setup-in-unopim.md)

## Authentication Required

For security, this command requires valid **admin credentials** before the migration begins.

During execution, you will be prompted to enter:

- your **admin email**,
- your **admin password**.

Access is granted only if those credentials belong to an admin user in UnoPim.

> [!NOTE]
> Keep the terminal session private while entering credentials, especially on shared servers or staging environments.

## What the Command Prompts For

After authentication, the command asks how you want to handle the migration.

## What You Will See in the Terminal

During execution, the command prompts you in this order:

```bash
Enter your Email:
> admin@example.com

Enter your Password:
>

Want to migrate only new uploaded files from your local to s3 (yes/no):
>

Migrate New only flag: No

Want to delete files from local once uploaded to s3? (yes/no):
>

Delete flag: No
Starting migration to aws
10/10 [============================] 100%
Done Moving DAM Assets.
```

This confirms that the command:

- authenticates the admin user first,
- asks whether only new files should be migrated,
- asks whether local files should be deleted after upload,
- then starts the DAM asset transfer to Amazon S3.

### Migrate Only New Files

The command asks whether you want to migrate only files that are not already present on S3.

- Choose **Yes** when you want to upload only newly added or still-unmigrated DAM assets.
- Choose **No** when you want the command to process the full DAM asset set again.

This is helpful when you run the migration regularly and want to avoid reprocessing files that already exist in S3.

### Delete Local Files After Upload

The command also asks whether local files should be deleted after a successful upload to S3.

- Choose **Yes** to free local server storage after the migration completes successfully.
- Choose **No** if you want to keep the local files as a backup copy.

> [!CAUTION]
> Delete local files only after you confirm the migrated DAM assets are accessible from Amazon S3.

## Recommended Migration Flow

Use this order in production:

1. Run the command.
2. Authenticate with a valid admin account.
3. Start with **migrate only new files = Yes** if you are doing an incremental migration.
4. Keep **delete local files = No** on the first run.
5. Verify that DAM asset files are opening correctly from S3.
6. Run the command again with local-file deletion only when you are fully confident in the migration result.

## After Migration

After the command finishes:

- verify a few DAM assets from the admin panel,
- confirm the files exist in your S3 bucket,
- check whether old local files should remain for backup or be removed in a follow-up run.

If you also need the DAM-side view of this process, see [DAM Asset Migration to AWS S3](../dam/dam-asset-migration-to-aws-s3.md).
59 changes: 57 additions & 2 deletions docs/aws-integration/index.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,58 @@
# Aws Integration Extension
# UnoPim AWS S3 Integration

The **UnoPim AWS Integration** connects your UnoPim instance with **Amazon S3** — one of the world's most reliable cloud storage services — to store, manage, and serve your product images and PDFs securely in the cloud.

Instead of storing media files on your local server, everything gets uploaded to Amazon S3 automatically. This means your assets are always available, load quickly for users, and can scale without any storage limitations as your catalog grows.

<br>

<div align="center">
<img src="./assets/overview/intro-banner.png" alt="UnoPim Shopify Connector" width="100%" style="max-height:330px; object-fit:cover; border-radius:8px;" />
</div>

<br>

## How It Works

Once connected, the integration handles your media in two ways:

- **New files** — any image or PDF you add to UnoPim is automatically synced to Amazon S3 without any manual action.

The integration also includes a **cache refresh mechanism** — it refreshes cached images at regular intervals so your storefront and product pages always display the latest version of any updated asset. If no custom refresh time is set, a sensible default kicks in automatically to keep everything current.


## Key Features

### Cloud Storage
- Connect UnoPim with **Amazon S3** to store images and PDFs safely and reliably in the cloud.
- Enjoy **unlimited, scalable storage** — no capacity limits, no need to manage server disk space.

### Easy Setup
- Get connected quickly by entering just four details: **Access Key ID**, **Secret Key**, **Region**, and **Bucket Name**.

### Automatic Media Sync
- All new images and PDFs added to UnoPim are **automatically uploaded to S3** — no manual uploads needed.

### Cache Management
- Set a custom **environment refresh time** to control how often cached images are updated.
- Enable **automatic cache refresh** to minimise repeated requests to AWS and ensure faster media loading.
- If no refresh time is configured, a **default interval** is applied automatically so updates still happen without any manual intervention.

### DAM Integration *(requires UnoPim DAM)*
If you have the **UnoPim Digital Asset Management (DAM)** extension installed, the AWS integration extends its capabilities further:

- **DAM asset import for products** — when importing products, the system automatically resolves DAM asset file paths to their correct asset IDs, so media links stay accurate without manual correction.
- **DAM asset import for categories** — the same automatic resolution applies to category fields of type `asset` during import.
- **Category media in export archives** — when you export a ZIP file, it now includes all files referenced by category fields of type `image`, `file`, and `asset`, alongside your product media — giving you a complete export package every time.


## Requirements

| Requirement | Detail |
|---|---|
| **Amazon AWS Account** | Required to create an S3 bucket and generate API keys |
| **S3 Bucket** | A dedicated bucket for storing UnoPim media |
| **Access Key ID & Secret Key** | Generated from your AWS IAM user settings |
| **UnoPim DAM** *(optional)* | Required only for DAM-specific asset import and export features |


Placeholder landing page. Real docs are pulled from the project repo at build time.
Loading