Plugin Directory

Changeset 3363621


Ignore:
Timestamp:
09/18/2025 04:27:42 AM (5 months ago)
Author:
beautifulplugins
Message:

Release version refs/tags/v2.0.6

Location:
ai-content-writer/trunk
Files:
2 added
20 edited

Legend:

Unmodified
Added
Removed
  • ai-content-writer/trunk/ai-content-writer.php

    r3357556 r3363621  
    44 * Plugin URI:        https://beautifulplugins.com/ai-content-writer/
    55 * Description:       AI Content Writer helps you automatically generate high-quality, SEO-optimized content for your blog or website in minutes using advanced AI technologies like ChatGPT, OpenAI, Google Gemini, and more.
    6  * Version:           2.0.5
     6 * Version:           2.0.6
    77 * Requires at least: 5.0
    88 * Requires PHP:      7.4
     
    4747 */
    4848function ai_content_writer() {
    49     return Plugin::create( __FILE__, '2.0.5' );
     49    return Plugin::create( __FILE__, '2.0.6' );
    5050}
    5151
  • ai-content-writer/trunk/assets/css/aicw-admin-rtl.css

    r3357556 r3363621  
    1 .aicw-admin-header{align-items:center;background-color:#fff;display:flex;flex-wrap:wrap;gap:10px;justify-content:space-between;margin-right:-20px;padding:.5rem 1.25rem}.aicw-admin-header__info{gap:.5rem}.aicw-admin-header__info,.aicw-admin-header__logo{align-items:center;display:flex}.aicw-admin-header__logo img{height:auto;width:42px}.aicw-admin-header__title{font-size:1.5rem;margin-bottom:5px;margin-top:0}.aicw-admin-header__title sup{color:#888;font-size:13px;font-weight:400}.aicw-admin-header__subtitle{font-size:14px;margin:0}.aicw-admin-header__menu-items{align-items:center;display:flex;gap:10px;list-style:none;margin:0;padding:0}.aicw-admin-header__menu-item{align-items:center;cursor:pointer;display:flex;gap:5px;margin-bottom:0}.aicw-admin-header__menu-item.active{color:#0073aa;font-weight:700}.aicw-admin-header__menu-link{color:inherit;font-size:14px;text-decoration:none;transition:color .3s}.aicw-admin-header__menu-link:focus{box-shadow:none;outline:none}.aicw-admin-header__menu-link.go-pro{color:#b32d2e;font-weight:500}@media(max-width:600px){.aicw-admin-header{padding-left:10px;padding-top:3.25rem}.aicw-admin-header__title{font-size:18px}.aicw-admin-header__subtitle{font-size:12px}.aicw-admin-header__menu-items{flex-wrap:wrap}#wpbody{padding-top:0}}.form-field{margin-bottom:.5rem}.form-field .input-group{margin-top:5px}.form-field .input-group.range_slider{display:flex;gap:.25rem}.form-field input[type=color],.form-field input[type=date],.form-field input[type=datetime-local],.form-field input[type=datetime],.form-field input[type=email],.form-field input[type=month],.form-field input[type=number],.form-field input[type=password],.form-field input[type=search],.form-field input[type=tel],.form-field input[type=text],.form-field input[type=time],.form-field input[type=url],.form-field input[type=week],.form-field select,.form-field textarea{border:1px solid #ddd;max-width:100%;padding:4px 8px;width:100%}.form-field input[type=range]{width:100%}.form-field abbr{text-decoration:none}.form-field:last-child{margin-bottom:0}.aicw-wrap .d-flex{display:flex}.aicw-wrap .flex-justify__space-between{justify-content:space-between}.aicw-wrap .w-100{width:100%}.aicw-wrap .text-center{text-align:center}.aicw-wrap .gap-1{gap:1rem}.aicw-wrap .display-none{display:none}.aicw-wrap .pro-label{font-weight:700}.aicw-wrap .aicw__header h2{font-size:23px;font-weight:400;line-height:1.3;margin:0;padding:9px 0 4px}.aicw-wrap .aicw__body{display:flex;gap:1.25rem}.aicw-wrap .aicw__body__content{width:100%}.aicw-wrap .aicw__body__content.has-padding{background:#fff;padding:20px}.aicw-wrap .aicw__body__aside{display:flex;flex-direction:column;gap:1.25rem}.aicw-wrap #aicw-form{display:flex;gap:1.25rem;width:100%}.aicw-wrap #aicw-form .aicw-form__content{width:100%}.aicw-wrap #aicw-form .aicw-form__content.has-padding{background:#fff;padding:20px}.aicw-wrap #aicw-form .aicw-form__aside{display:flex;flex-direction:column;gap:1.25rem;max-width:350px;width:100%}@media(max-width:768px){.aicw-wrap #aicw-form{flex-direction:column}.aicw-wrap #aicw-form .aicw-form__content{width:100%}.aicw-wrap #aicw-form .aicw-form__aside{max-width:100%;width:100%}.aicw-wrap .page-title-action,.aicw-wrap .page-title-action:focus{font-size:12px;line-height:1.3rem;padding:5px 10px}}.aicw-card{background:#fff;border:1px solid #ddd;margin-bottom:1.25rem}.aicw-card__title{margin:0}.aicw-card__header{border-bottom:1px solid #ddd;padding:10px 20px}.aicw-card__body,.aicw-card__footer{padding:10px 20px}.aicw-sidebar{background:#fff;border:1px solid #ddd}.aicw-sidebar h2{margin:0}.aicw-sidebar__header{border-bottom:1px solid #ddd;padding:10px 20px}.aicw-sidebar__header sup{color:#4caf50;font-size:12px}.aicw-sidebar__body{padding:10px 20px}.aicw-sidebar__footer{border-top:1px solid #ddd;display:flex;justify-content:flex-end;padding:10px 20px}.aicw-sidebar__footer.space-between{justify-content:space-between}.aicw-sidebar__footer .submit{margin:0;padding:0}.aicw-sidebar .spinner{display:none;height:20px;vertical-align:middle;visibility:hidden;width:20px}.aicw-sidebar .spinner.active{display:inline-block;visibility:visible}.aicw-sidebar .maybe-has__thumbnail{align-items:center;display:flex;flex-direction:row;gap:5px}.aicw-sidebar .maybe-has__thumbnail img{border-radius:5px;height:40px;width:40px}.aicw_posts .heading sup{color:#f60;font-size:12px}.aicw_posts .actions,.aicw_posts .status{width:10%}.aicw_posts .maybe-has__thumbnail{align-items:center;display:flex;flex-direction:row;gap:5px}.aicw_posts .maybe-has__thumbnail img{border-radius:5px;height:40px;width:40px}.aicw_posts .progress-indicator{background:#eee;border-radius:5px;height:20px;overflow:hidden;width:100%}.aicw_posts .progress-indicator .progress-indicator-inner{background:#4caf50;color:#fff;font-weight:700;height:100%;line-height:20px;text-align:center}.aicw-total-processed .aicw-post-count{font-size:3rem;font-weight:700;margin:0}.aicw-total-processed .published-posts{background:rgba(54,162,235,.05)}.aicw-total-processed .published-posts .aicw-post-count{color:#36a2eb}.aicw-total-processed .pending-posts{background:rgba(255,99,132,.05)}.aicw-total-processed .pending-posts .aicw-post-count{color:#ff6384}.aicw-total-processed .draft-posts{background:rgba(255,206,86,.05)}.aicw-total-processed .draft-posts .aicw-post-count{color:#ffce56}@media(max-width:576px){.aicw-total-processed{flex-direction:column;gap:0!important}}.aicw_repeat_table td.actions{vertical-align:middle}.aicw-settings #aicw-form .aicw-form__content{background:rgba(0,0,0,0);padding-bottom:0;padding-right:0;padding-top:0}.aicw-settings .field-group{display:flex;flex-direction:row;gap:1rem;margin-bottom:20px}.aicw-settings .field-group .field-label{min-width:180px;width:180px}.aicw-settings .field-group.field-section{flex-direction:column;gap:0}.aicw__sidebar__header small,.wp-heading-inline small{color:#888;font-size:13px;vertical-align:super}.aicw-pro-badge{text-decoration:none}.aicw-pro-badge .pro-label{color:#b32d2e}.aicw-featured-image__content{padding-left:20px}.aicw-featured-image__images{display:-ms-grid;display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.aicw-featured-image__images .aicw-featured-image__image{align-items:center;border:2px solid #ddd;display:flex;justify-content:center;padding:8px;transition:transform .2s ease}.aicw-featured-image__images .aicw-featured-image__image:hover{-ms-transform:scale(1.05);transform:scale(1.05)}.aicw-featured-image__images .aicw-featured-image__image img{border-radius:4px;display:block;height:auto;max-width:100%}.aicw-featured-image__images .aicw-featured-image__image.selected{border:2px solid #007cba}.aicw-featured-image__images .aicw-featured-image__image-label{cursor:pointer;display:block;text-align:center}.aicw-featured-image__images .aicw-featured-image__image-label input[type=radio]{display:none}.aicw-featured-image__footer{margin-top:50px}
     1.aicw-admin-header{align-items:center;background-color:#fff;display:flex;flex-wrap:wrap;gap:10px;justify-content:space-between;margin-right:-20px;padding:.5rem 1.25rem}.aicw-admin-header__info{gap:.5rem}.aicw-admin-header__info,.aicw-admin-header__logo{align-items:center;display:flex}.aicw-admin-header__logo img{height:auto;width:42px}.aicw-admin-header__title{font-size:1.5rem;margin-bottom:5px;margin-top:0}.aicw-admin-header__title sup{color:#888;font-size:13px;font-weight:400}.aicw-admin-header__subtitle{font-size:14px;margin:0}.aicw-admin-header__menu-items{align-items:center;display:flex;gap:10px;list-style:none;margin:0;padding:0}.aicw-admin-header__menu-item{align-items:center;cursor:pointer;display:flex;gap:5px;margin-bottom:0}.aicw-admin-header__menu-item.active{color:#0073aa;font-weight:700}.aicw-admin-header__menu-link{color:inherit;font-size:14px;text-decoration:none;transition:color .3s}.aicw-admin-header__menu-link:focus{box-shadow:none;outline:none}.aicw-admin-header__menu-link.go-pro{color:#b32d2e;font-weight:500}@media(max-width:600px){.aicw-admin-header{padding-left:10px;padding-top:3.25rem}.aicw-admin-header__title{font-size:18px}.aicw-admin-header__subtitle{font-size:12px}.aicw-admin-header__menu-items{flex-wrap:wrap}#wpbody{padding-top:0}}.form-field{margin-bottom:.5rem}.form-field .input-group{margin-top:5px}.form-field .input-group.range_slider{display:flex;gap:.25rem}.form-field input[type=color],.form-field input[type=date],.form-field input[type=datetime-local],.form-field input[type=datetime],.form-field input[type=email],.form-field input[type=month],.form-field input[type=number],.form-field input[type=password],.form-field input[type=search],.form-field input[type=tel],.form-field input[type=text],.form-field input[type=time],.form-field input[type=url],.form-field input[type=week],.form-field select,.form-field textarea{border:1px solid #ddd;max-width:100%;padding:4px 8px;width:100%}.form-field input[type=range]{width:100%}.form-field abbr{text-decoration:none}.form-field:last-child{margin-bottom:0}#aicw-campaigns-table table.fixed,#aicw-logs-table table.fixed{table-layout:auto}.aicw-wrap .d-flex{display:flex}.aicw-wrap .flex-justify__space-between{justify-content:space-between}.aicw-wrap .w-100{width:100%}.aicw-wrap .text-center{text-align:center}.aicw-wrap .gap-1{gap:1rem}.aicw-wrap .display-none{display:none}.aicw-wrap .pro-label{font-weight:700}.aicw-wrap .aicw__header h2{font-size:23px;font-weight:400;line-height:1.3;margin:0;padding:9px 0 4px}.aicw-wrap .aicw__body{display:flex;gap:1.25rem}.aicw-wrap .aicw__body__content{width:100%}.aicw-wrap .aicw__body__content.has-padding{background:#fff;padding:20px}.aicw-wrap .aicw__body__aside{display:flex;flex-direction:column;gap:1.25rem}.aicw-wrap #aicw-form{display:flex;gap:1.25rem;width:100%}.aicw-wrap #aicw-form .aicw-form__content{width:100%}.aicw-wrap #aicw-form .aicw-form__content.has-padding{background:#fff;padding:20px}.aicw-wrap #aicw-form .aicw-form__aside{display:flex;flex-direction:column;gap:1.25rem;max-width:350px;width:100%}@media(max-width:768px){.aicw-wrap #aicw-form{flex-direction:column}.aicw-wrap #aicw-form .aicw-form__content{width:100%}.aicw-wrap #aicw-form .aicw-form__aside{max-width:100%;width:100%}.aicw-wrap .page-title-action,.aicw-wrap .page-title-action:focus{font-size:12px;line-height:1.3rem;padding:5px 10px}}.aicw-card{background:#fff;border:1px solid #ddd;margin-bottom:1.25rem}.aicw-card__title{margin:0}.aicw-card__header{border-bottom:1px solid #ddd;padding:10px 20px}.aicw-card__body,.aicw-card__footer{padding:10px 20px}.aicw-sidebar{background:#fff;border:1px solid #ddd}.aicw-sidebar h2{margin:0}.aicw-sidebar__header{border-bottom:1px solid #ddd;padding:10px 20px}.aicw-sidebar__header sup{color:#4caf50;font-size:12px}.aicw-sidebar__body{padding:10px 20px}.aicw-sidebar__footer{border-top:1px solid #ddd;display:flex;justify-content:flex-end;padding:10px 20px}.aicw-sidebar__footer.space-between{justify-content:space-between}.aicw-sidebar__footer .submit{margin:0;padding:0}.aicw-sidebar .spinner{display:none;height:20px;vertical-align:middle;visibility:hidden;width:20px}.aicw-sidebar .spinner.active{display:inline-block;visibility:visible}.aicw-sidebar .maybe-has__thumbnail{align-items:center;display:flex;flex-direction:row;gap:5px}.aicw-sidebar .maybe-has__thumbnail img{border-radius:5px;height:40px;width:40px}.aicw_posts .heading sup{color:#f60;font-size:12px}.aicw_posts .actions,.aicw_posts .status{width:10%}.aicw_posts .maybe-has__thumbnail{align-items:center;display:flex;flex-direction:row;gap:5px}.aicw_posts .maybe-has__thumbnail img{border-radius:5px;height:40px;width:40px}.aicw_posts .progress-indicator{background:#eee;border-radius:5px;height:20px;overflow:hidden;width:100%}.aicw_posts .progress-indicator .progress-indicator-inner{background:#4caf50;color:#fff;font-weight:700;height:100%;line-height:20px;text-align:center}.aicw-total-processed .aicw-post-count{font-size:3rem;font-weight:700;margin:0}.aicw-total-processed .published-posts{background:rgba(54,162,235,.05)}.aicw-total-processed .published-posts .aicw-post-count{color:#36a2eb}.aicw-total-processed .pending-posts{background:rgba(255,99,132,.05)}.aicw-total-processed .pending-posts .aicw-post-count{color:#ff6384}.aicw-total-processed .draft-posts{background:rgba(255,206,86,.05)}.aicw-total-processed .draft-posts .aicw-post-count{color:#ffce56}@media(max-width:576px){.aicw-total-processed{flex-direction:column;gap:0!important}}.aicw_repeat_table td.actions{vertical-align:middle}.aicw-settings #aicw-form .aicw-form__content{background:rgba(0,0,0,0);padding-bottom:0;padding-right:0;padding-top:0}.aicw-settings .field-group{display:flex;flex-direction:row;gap:1rem;margin-bottom:20px}.aicw-settings .field-group .field-label{min-width:180px;width:180px}.aicw-settings .field-group.field-section{flex-direction:column;gap:0}.aicw__sidebar__header small,.wp-heading-inline small{color:#888;font-size:13px;vertical-align:super}.aicw-pro-badge{text-decoration:none}.aicw-pro-badge .pro-label{color:#b32d2e}.aicw-featured-image__content{padding-left:20px}.aicw-featured-image__images{display:-ms-grid;display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.aicw-featured-image__images .aicw-featured-image__image{align-items:center;border:2px solid #ddd;display:flex;justify-content:center;padding:8px;transition:transform .2s ease}.aicw-featured-image__images .aicw-featured-image__image:hover{-ms-transform:scale(1.05);transform:scale(1.05)}.aicw-featured-image__images .aicw-featured-image__image img{border-radius:4px;display:block;height:auto;max-width:100%}.aicw-featured-image__images .aicw-featured-image__image.selected{border:2px solid #007cba}.aicw-featured-image__images .aicw-featured-image__image-label{cursor:pointer;display:block;text-align:center}.aicw-featured-image__images .aicw-featured-image__image-label input[type=radio]{display:none}.aicw-featured-image__footer{margin-top:50px}
  • ai-content-writer/trunk/assets/css/aicw-admin.asset.php

    r3357556 r3363621  
    1 <?php return array('dependencies' => array(), 'version' => 'ac65948c023b850cfb7d');
     1<?php return array('dependencies' => array(), 'version' => 'd17fa20c8a1748c51207');
  • ai-content-writer/trunk/assets/css/aicw-admin.css

    r3357556 r3363621  
    1 .aicw-admin-header{align-items:center;background-color:#fff;display:flex;flex-wrap:wrap;gap:10px;justify-content:space-between;margin-left:-20px;padding:.5rem 1.25rem}.aicw-admin-header__info{gap:.5rem}.aicw-admin-header__info,.aicw-admin-header__logo{align-items:center;display:flex}.aicw-admin-header__logo img{height:auto;width:42px}.aicw-admin-header__title{font-size:1.5rem;margin-bottom:5px;margin-top:0}.aicw-admin-header__title sup{color:#888;font-size:13px;font-weight:400}.aicw-admin-header__subtitle{font-size:14px;margin:0}.aicw-admin-header__menu-items{align-items:center;display:flex;gap:10px;list-style:none;margin:0;padding:0}.aicw-admin-header__menu-item{align-items:center;cursor:pointer;display:flex;gap:5px;margin-bottom:0}.aicw-admin-header__menu-item.active{color:#0073aa;font-weight:700}.aicw-admin-header__menu-link{color:inherit;font-size:14px;text-decoration:none;transition:color .3s}.aicw-admin-header__menu-link:focus{box-shadow:none;outline:none}.aicw-admin-header__menu-link.go-pro{color:#b32d2e;font-weight:500}@media(max-width:600px){.aicw-admin-header{padding-right:10px;padding-top:3.25rem}.aicw-admin-header__title{font-size:18px}.aicw-admin-header__subtitle{font-size:12px}.aicw-admin-header__menu-items{flex-wrap:wrap}#wpbody{padding-top:0}}.form-field{margin-bottom:.5rem}.form-field .input-group{margin-top:5px}.form-field .input-group.range_slider{display:flex;gap:.25rem}.form-field input[type=color],.form-field input[type=date],.form-field input[type=datetime-local],.form-field input[type=datetime],.form-field input[type=email],.form-field input[type=month],.form-field input[type=number],.form-field input[type=password],.form-field input[type=search],.form-field input[type=tel],.form-field input[type=text],.form-field input[type=time],.form-field input[type=url],.form-field input[type=week],.form-field select,.form-field textarea{border:1px solid #ddd;max-width:100%;padding:4px 8px;width:100%}.form-field input[type=range]{width:100%}.form-field abbr{text-decoration:none}.form-field:last-child{margin-bottom:0}.aicw-wrap .d-flex{display:flex}.aicw-wrap .flex-justify__space-between{justify-content:space-between}.aicw-wrap .w-100{width:100%}.aicw-wrap .text-center{text-align:center}.aicw-wrap .gap-1{gap:1rem}.aicw-wrap .display-none{display:none}.aicw-wrap .pro-label{font-weight:700}.aicw-wrap .aicw__header h2{font-size:23px;font-weight:400;line-height:1.3;margin:0;padding:9px 0 4px}.aicw-wrap .aicw__body{display:flex;gap:1.25rem}.aicw-wrap .aicw__body__content{width:100%}.aicw-wrap .aicw__body__content.has-padding{background:#fff;padding:20px}.aicw-wrap .aicw__body__aside{display:flex;flex-direction:column;gap:1.25rem}.aicw-wrap #aicw-form{display:flex;gap:1.25rem;width:100%}.aicw-wrap #aicw-form .aicw-form__content{width:100%}.aicw-wrap #aicw-form .aicw-form__content.has-padding{background:#fff;padding:20px}.aicw-wrap #aicw-form .aicw-form__aside{display:flex;flex-direction:column;gap:1.25rem;max-width:350px;width:100%}@media(max-width:768px){.aicw-wrap #aicw-form{flex-direction:column}.aicw-wrap #aicw-form .aicw-form__content{width:100%}.aicw-wrap #aicw-form .aicw-form__aside{max-width:100%;width:100%}.aicw-wrap .page-title-action,.aicw-wrap .page-title-action:focus{font-size:12px;line-height:1.3rem;padding:5px 10px}}.aicw-card{background:#fff;border:1px solid #ddd;margin-bottom:1.25rem}.aicw-card__title{margin:0}.aicw-card__header{border-bottom:1px solid #ddd;padding:10px 20px}.aicw-card__body,.aicw-card__footer{padding:10px 20px}.aicw-sidebar{background:#fff;border:1px solid #ddd}.aicw-sidebar h2{margin:0}.aicw-sidebar__header{border-bottom:1px solid #ddd;padding:10px 20px}.aicw-sidebar__header sup{color:#4caf50;font-size:12px}.aicw-sidebar__body{padding:10px 20px}.aicw-sidebar__footer{border-top:1px solid #ddd;display:flex;justify-content:flex-end;padding:10px 20px}.aicw-sidebar__footer.space-between{justify-content:space-between}.aicw-sidebar__footer .submit{margin:0;padding:0}.aicw-sidebar .spinner{display:none;height:20px;vertical-align:middle;visibility:hidden;width:20px}.aicw-sidebar .spinner.active{display:inline-block;visibility:visible}.aicw-sidebar .maybe-has__thumbnail{align-items:center;display:flex;flex-direction:row;gap:5px}.aicw-sidebar .maybe-has__thumbnail img{border-radius:5px;height:40px;width:40px}.aicw_posts .heading sup{color:#f60;font-size:12px}.aicw_posts .actions,.aicw_posts .status{width:10%}.aicw_posts .maybe-has__thumbnail{align-items:center;display:flex;flex-direction:row;gap:5px}.aicw_posts .maybe-has__thumbnail img{border-radius:5px;height:40px;width:40px}.aicw_posts .progress-indicator{background:#eee;border-radius:5px;height:20px;overflow:hidden;width:100%}.aicw_posts .progress-indicator .progress-indicator-inner{background:#4caf50;color:#fff;font-weight:700;height:100%;line-height:20px;text-align:center}.aicw-total-processed .aicw-post-count{font-size:3rem;font-weight:700;margin:0}.aicw-total-processed .published-posts{background:rgba(54,162,235,.05)}.aicw-total-processed .published-posts .aicw-post-count{color:#36a2eb}.aicw-total-processed .pending-posts{background:rgba(255,99,132,.05)}.aicw-total-processed .pending-posts .aicw-post-count{color:#ff6384}.aicw-total-processed .draft-posts{background:rgba(255,206,86,.05)}.aicw-total-processed .draft-posts .aicw-post-count{color:#ffce56}@media(max-width:576px){.aicw-total-processed{flex-direction:column;gap:0!important}}.aicw_repeat_table td.actions{vertical-align:middle}.aicw-settings #aicw-form .aicw-form__content{background:rgba(0,0,0,0);padding-bottom:0;padding-left:0;padding-top:0}.aicw-settings .field-group{display:flex;flex-direction:row;gap:1rem;margin-bottom:20px}.aicw-settings .field-group .field-label{min-width:180px;width:180px}.aicw-settings .field-group.field-section{flex-direction:column;gap:0}.aicw__sidebar__header small,.wp-heading-inline small{color:#888;font-size:13px;vertical-align:super}.aicw-pro-badge{text-decoration:none}.aicw-pro-badge .pro-label{color:#b32d2e}.aicw-featured-image__content{padding-right:20px}.aicw-featured-image__images{display:-ms-grid;display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.aicw-featured-image__images .aicw-featured-image__image{align-items:center;border:2px solid #ddd;display:flex;justify-content:center;padding:8px;transition:transform .2s ease}.aicw-featured-image__images .aicw-featured-image__image:hover{-ms-transform:scale(1.05);transform:scale(1.05)}.aicw-featured-image__images .aicw-featured-image__image img{border-radius:4px;display:block;height:auto;max-width:100%}.aicw-featured-image__images .aicw-featured-image__image.selected{border:2px solid #007cba}.aicw-featured-image__images .aicw-featured-image__image-label{cursor:pointer;display:block;text-align:center}.aicw-featured-image__images .aicw-featured-image__image-label input[type=radio]{display:none}.aicw-featured-image__footer{margin-top:50px}
     1.aicw-admin-header{align-items:center;background-color:#fff;display:flex;flex-wrap:wrap;gap:10px;justify-content:space-between;margin-left:-20px;padding:.5rem 1.25rem}.aicw-admin-header__info{gap:.5rem}.aicw-admin-header__info,.aicw-admin-header__logo{align-items:center;display:flex}.aicw-admin-header__logo img{height:auto;width:42px}.aicw-admin-header__title{font-size:1.5rem;margin-bottom:5px;margin-top:0}.aicw-admin-header__title sup{color:#888;font-size:13px;font-weight:400}.aicw-admin-header__subtitle{font-size:14px;margin:0}.aicw-admin-header__menu-items{align-items:center;display:flex;gap:10px;list-style:none;margin:0;padding:0}.aicw-admin-header__menu-item{align-items:center;cursor:pointer;display:flex;gap:5px;margin-bottom:0}.aicw-admin-header__menu-item.active{color:#0073aa;font-weight:700}.aicw-admin-header__menu-link{color:inherit;font-size:14px;text-decoration:none;transition:color .3s}.aicw-admin-header__menu-link:focus{box-shadow:none;outline:none}.aicw-admin-header__menu-link.go-pro{color:#b32d2e;font-weight:500}@media(max-width:600px){.aicw-admin-header{padding-right:10px;padding-top:3.25rem}.aicw-admin-header__title{font-size:18px}.aicw-admin-header__subtitle{font-size:12px}.aicw-admin-header__menu-items{flex-wrap:wrap}#wpbody{padding-top:0}}.form-field{margin-bottom:.5rem}.form-field .input-group{margin-top:5px}.form-field .input-group.range_slider{display:flex;gap:.25rem}.form-field input[type=color],.form-field input[type=date],.form-field input[type=datetime-local],.form-field input[type=datetime],.form-field input[type=email],.form-field input[type=month],.form-field input[type=number],.form-field input[type=password],.form-field input[type=search],.form-field input[type=tel],.form-field input[type=text],.form-field input[type=time],.form-field input[type=url],.form-field input[type=week],.form-field select,.form-field textarea{border:1px solid #ddd;max-width:100%;padding:4px 8px;width:100%}.form-field input[type=range]{width:100%}.form-field abbr{text-decoration:none}.form-field:last-child{margin-bottom:0}#aicw-campaigns-table table.fixed,#aicw-logs-table table.fixed{table-layout:auto}.aicw-wrap .d-flex{display:flex}.aicw-wrap .flex-justify__space-between{justify-content:space-between}.aicw-wrap .w-100{width:100%}.aicw-wrap .text-center{text-align:center}.aicw-wrap .gap-1{gap:1rem}.aicw-wrap .display-none{display:none}.aicw-wrap .pro-label{font-weight:700}.aicw-wrap .aicw__header h2{font-size:23px;font-weight:400;line-height:1.3;margin:0;padding:9px 0 4px}.aicw-wrap .aicw__body{display:flex;gap:1.25rem}.aicw-wrap .aicw__body__content{width:100%}.aicw-wrap .aicw__body__content.has-padding{background:#fff;padding:20px}.aicw-wrap .aicw__body__aside{display:flex;flex-direction:column;gap:1.25rem}.aicw-wrap #aicw-form{display:flex;gap:1.25rem;width:100%}.aicw-wrap #aicw-form .aicw-form__content{width:100%}.aicw-wrap #aicw-form .aicw-form__content.has-padding{background:#fff;padding:20px}.aicw-wrap #aicw-form .aicw-form__aside{display:flex;flex-direction:column;gap:1.25rem;max-width:350px;width:100%}@media(max-width:768px){.aicw-wrap #aicw-form{flex-direction:column}.aicw-wrap #aicw-form .aicw-form__content{width:100%}.aicw-wrap #aicw-form .aicw-form__aside{max-width:100%;width:100%}.aicw-wrap .page-title-action,.aicw-wrap .page-title-action:focus{font-size:12px;line-height:1.3rem;padding:5px 10px}}.aicw-card{background:#fff;border:1px solid #ddd;margin-bottom:1.25rem}.aicw-card__title{margin:0}.aicw-card__header{border-bottom:1px solid #ddd;padding:10px 20px}.aicw-card__body,.aicw-card__footer{padding:10px 20px}.aicw-sidebar{background:#fff;border:1px solid #ddd}.aicw-sidebar h2{margin:0}.aicw-sidebar__header{border-bottom:1px solid #ddd;padding:10px 20px}.aicw-sidebar__header sup{color:#4caf50;font-size:12px}.aicw-sidebar__body{padding:10px 20px}.aicw-sidebar__footer{border-top:1px solid #ddd;display:flex;justify-content:flex-end;padding:10px 20px}.aicw-sidebar__footer.space-between{justify-content:space-between}.aicw-sidebar__footer .submit{margin:0;padding:0}.aicw-sidebar .spinner{display:none;height:20px;vertical-align:middle;visibility:hidden;width:20px}.aicw-sidebar .spinner.active{display:inline-block;visibility:visible}.aicw-sidebar .maybe-has__thumbnail{align-items:center;display:flex;flex-direction:row;gap:5px}.aicw-sidebar .maybe-has__thumbnail img{border-radius:5px;height:40px;width:40px}.aicw_posts .heading sup{color:#f60;font-size:12px}.aicw_posts .actions,.aicw_posts .status{width:10%}.aicw_posts .maybe-has__thumbnail{align-items:center;display:flex;flex-direction:row;gap:5px}.aicw_posts .maybe-has__thumbnail img{border-radius:5px;height:40px;width:40px}.aicw_posts .progress-indicator{background:#eee;border-radius:5px;height:20px;overflow:hidden;width:100%}.aicw_posts .progress-indicator .progress-indicator-inner{background:#4caf50;color:#fff;font-weight:700;height:100%;line-height:20px;text-align:center}.aicw-total-processed .aicw-post-count{font-size:3rem;font-weight:700;margin:0}.aicw-total-processed .published-posts{background:rgba(54,162,235,.05)}.aicw-total-processed .published-posts .aicw-post-count{color:#36a2eb}.aicw-total-processed .pending-posts{background:rgba(255,99,132,.05)}.aicw-total-processed .pending-posts .aicw-post-count{color:#ff6384}.aicw-total-processed .draft-posts{background:rgba(255,206,86,.05)}.aicw-total-processed .draft-posts .aicw-post-count{color:#ffce56}@media(max-width:576px){.aicw-total-processed{flex-direction:column;gap:0!important}}.aicw_repeat_table td.actions{vertical-align:middle}.aicw-settings #aicw-form .aicw-form__content{background:rgba(0,0,0,0);padding-bottom:0;padding-left:0;padding-top:0}.aicw-settings .field-group{display:flex;flex-direction:row;gap:1rem;margin-bottom:20px}.aicw-settings .field-group .field-label{min-width:180px;width:180px}.aicw-settings .field-group.field-section{flex-direction:column;gap:0}.aicw__sidebar__header small,.wp-heading-inline small{color:#888;font-size:13px;vertical-align:super}.aicw-pro-badge{text-decoration:none}.aicw-pro-badge .pro-label{color:#b32d2e}.aicw-featured-image__content{padding-right:20px}.aicw-featured-image__images{display:-ms-grid;display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.aicw-featured-image__images .aicw-featured-image__image{align-items:center;border:2px solid #ddd;display:flex;justify-content:center;padding:8px;transition:transform .2s ease}.aicw-featured-image__images .aicw-featured-image__image:hover{-ms-transform:scale(1.05);transform:scale(1.05)}.aicw-featured-image__images .aicw-featured-image__image img{border-radius:4px;display:block;height:auto;max-width:100%}.aicw-featured-image__images .aicw-featured-image__image.selected{border:2px solid #007cba}.aicw-featured-image__images .aicw-featured-image__image-label{cursor:pointer;display:block;text-align:center}.aicw-featured-image__images .aicw-featured-image__image-label input[type=radio]{display:none}.aicw-featured-image__footer{margin-top:50px}
  • ai-content-writer/trunk/includes/Admin/Actions.php

    r3357556 r3363621  
    269269        $enabled_img_gen        = isset( $_POST['aicw_enable_img_generation'] ) ? sanitize_text_field( wp_unslash( $_POST['aicw_enable_img_generation'] ) ) : '';
    270270        $pexels_api_key         = isset( $_POST['aicw_pexels_api_key'] ) ? sanitize_text_field( wp_unslash( $_POST['aicw_pexels_api_key'] ) ) : '';
     271        $log_retention_period   = isset( $_POST['aicw_log_retention_period'] ) ? absint( wp_unslash( $_POST['aicw_log_retention_period'] ) ) : '';
    271272
    272273        if ( 'https://www.bing.com' === $allowed_hosts ) {
     
    281282        update_option( 'aicw_enable_img_generation', $enabled_img_gen );
    282283        update_option( 'aicw_pexels_api_key', $pexels_api_key );
     284        update_option( 'aicw_log_retention_period', $log_retention_period );
    283285
    284286        ai_content_writer()->flash_notice( esc_html__( 'Settings saved successfully.', 'ai-content-writer' ), 'success' );
  • ai-content-writer/trunk/includes/Admin/Admin.php

    r3326474 r3363621  
    44
    55use AIContentWriter\Admin\ListTables\CampaignsListTable;
     6use AIContentWriter\Admin\ListTables\LogsListTable;
    67
    78defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
     
    2526        // Add Generate Content sub menu.
    2627        add_action( 'admin_menu', array( $this, 'generate_content_menu' ) );
     28        // Add Logs sub menu.
     29        add_action( 'admin_menu', array( $this, 'logs_menu' ) );
    2730        // Add Settings sub menu.
    2831        add_action( 'admin_menu', array( $this, 'settings_menu' ) );
     
    3235        add_filter( 'set-screen-option', array( $this, 'screen_option' ), 10, 3 );
    3336        // Load campaigns page.
    34         add_action( 'load-ai-content-writer_page_aicw-campaigns', array( $this, 'handle_list_table_actions' ) );
     37        add_action( 'load-ai-content-writer_page_aicw-campaigns', array( $this, 'handle_campaigns_table_actions' ) );
     38        // Lod logs page.
     39        add_action( 'load-ai-content-writer_page_aicw-logs', array( $this, 'handle_logs_table_actions' ) );
    3540        // Inject content in admin header.
    3641        add_action( 'in_admin_header', array( __CLASS__, 'in_admin_header' ) );
     
    95100
    96101        // Load screen options.
    97         add_action( 'load-' . $load, array( __CLASS__, 'load_campaigns_page' ) );
     102        add_action( 'load-' . $load, array( __CLASS__, 'load_pages' ) );
    98103    }
    99104
     
    113118            array( $this, 'generate_content_page' ),
    114119        );
     120    }
     121
     122    /**
     123     * Add logs menu.
     124     *
     125     * @since 2.0.6
     126     * @return void
     127     */
     128    public function logs_menu() {
     129        $load = add_submenu_page(
     130            'ai-content-writer',
     131            __( 'Logs', 'ai-content-writer' ),
     132            __( 'Logs', 'ai-content-writer' ),
     133            'manage_options',
     134            'aicw-logs',
     135            array( $this, 'logs_page' ),
     136        );
     137
     138        // Load screen options.
     139        add_action( 'load-' . $load, array( __CLASS__, 'load_pages' ) );
    115140    }
    116141
     
    164189            array(
    165190                'aicw_campaigns_per_page',
     191                'aicw_logs_per_page',
    166192            )
    167193        );
     
    174200
    175201    /**
    176      * Load campaigns page & set screen options.
    177      *
    178      * @since 1.0.0
    179      * @return void
    180      */
    181     public static function load_campaigns_page() {
     202     * Load pages & set screen options.
     203     *
     204     * @since 1.0.0
     205     * @return void
     206     */
     207    public static function load_pages() {
    182208        $screen = get_current_screen();
    183209        if ( 'ai-content-writer_page_aicw-campaigns' === $screen->id ) {
     
    191217            );
    192218        }
     219
     220        if ( 'ai-content-writer_page_aicw-logs' === $screen->id ) {
     221            add_screen_option(
     222                'per_page',
     223                array(
     224                    'label'   => __( 'Logs per page', 'ai-content-writer' ),
     225                    'default' => 20,
     226                    'option'  => 'aicw_logs_per_page',
     227                )
     228            );
     229        }
    193230    }
    194231
     
    242279
    243280    /**
     281     * Logs page.
     282     *
     283     * @since 2.0.6
     284     * @return void
     285     */
     286    public function logs_page() {
     287        $list_table = new LogsListTable();
     288        $list_table->prepare_items();
     289        include __DIR__ . '/views/logs.php';
     290    }
     291
     292    /**
    244293     * Generate content page.
    245294     *
     
    283332
    284333    /**
    285      * Handle list table actions.
    286      *
    287      * @since 1.0.0
    288      * @return void
    289      */
    290     public function handle_list_table_actions() {
     334     * Handle campaigns list table actions.
     335     *
     336     * @since 1.0.0
     337     * @return void
     338     */
     339    public function handle_campaigns_table_actions() {
    291340        if ( ! current_user_can( 'manage_options' ) ) {
    292341            ai_content_writer()->flash_notice( esc_html__( 'You do not have permission to perform this action.', 'ai-content-writer' ), 'error' );
     
    328377
    329378    /**
     379     * Handle logs list table actions.
     380     *
     381     * @since 2.0.6
     382     * @return void
     383     */
     384    public function handle_logs_table_actions() {
     385        if ( ! current_user_can( 'manage_options' ) ) {
     386            ai_content_writer()->flash_notice( esc_html__( 'You do not have permission to perform this action.', 'ai-content-writer' ), 'error' );
     387            $redirect_url = remove_query_arg( array( 'action', 'action2', 'ids', '_wpnonce', '_wp_http_referer' ) );
     388            wp_safe_redirect( $redirect_url );
     389            exit;
     390        }
     391
     392        $list_table = new LogsListTable();
     393        $list_table->process_bulk_action();
     394
     395        if ( 'delete' === $list_table->current_action() ) {
     396            check_admin_referer( 'bulk-logs' );
     397
     398            $ids       = isset( $_GET['ids'] ) ? map_deep( wp_unslash( $_GET['ids'] ), 'intval' ) : array();
     399            $ids       = wp_parse_id_list( $ids );
     400            $performed = 0;
     401
     402            foreach ( $ids as $id ) {
     403                $log = get_post( $id );
     404                if ( $log && wp_delete_post( $log->ID, true ) ) {
     405                    ++$performed;
     406                }
     407            }
     408
     409            if ( ! empty( $performed ) ) {
     410                // translators: %s: number of accounts.
     411                ai_content_writer()->flash_notice( sprintf( esc_html__( '%s item(s) deleted successfully.', 'ai-content-writer' ), number_format_i18n( $performed ) ) );
     412            }
     413
     414            if ( ! headers_sent() ) {
     415                // Redirect to avoid resubmission.
     416                $redirect_url = remove_query_arg( array( 'action', 'action2', 'ids', '_wpnonce', '_wp_http_referer' ) );
     417                wp_safe_redirect( $redirect_url );
     418                exit;
     419            }
     420        }
     421    }
     422
     423    /**
    330424     * Get screen ids.
    331425     *
     
    337431            'toplevel_page_ai-content-writer',
    338432            'ai-content-writer_page_aicw-campaigns',
     433            'ai-content-writer_page_aicw-logs',
    339434            'ai-content-writer_page_aicw-settings',
    340435            'ai-content-writer_page_aicw-help',
  • ai-content-writer/trunk/includes/Admin/ListTables/CampaignsListTable.php

    r3249260 r3363621  
    1414 *
    1515 * @since 1.0.0
    16  * @package CoPilot\Admin\ListTables
     16 * @package AIContentWriter\Admin\ListTables
    1717 */
    1818class CampaignsListTable extends \WP_List_Table {
  • ai-content-writer/trunk/includes/Admin/views/campaigns.php

    r3326474 r3363621  
    2525        $list_table->display();
    2626        ?>
    27         <input type="hidden" name="page" value="campaigns">
     27        <input type="hidden" name="page" value="aicw-campaigns">
    2828    </form>
    2929</div>
  • ai-content-writer/trunk/includes/Admin/views/settings.php

    r3357556 r3363621  
    9595                </div>
    9696                <div class="field-group field-section">
     97                    <h3><?php esc_html_e( 'Logs Settings', 'ai-content-writer' ); ?></h3>
     98                </div>
     99                <div class="field-group">
     100                    <div class="field-label">
     101                        <label for="aicw_log_retention_period"><strong><?php esc_html_e( 'Log Retention Period:', 'ai-content-writer' ); ?></strong></label>
     102                    </div>
     103                    <div class="field">
     104                        <?php $log_retention_period = absint( get_option( 'aicw_log_retention_period', 30 ) ); ?>
     105                        <select name="aicw_log_retention_period" id="aicw_log_retention_period" class="regular-text">
     106                            <option value="" <?php selected( $log_retention_period, '' ); ?>><?php esc_html_e( 'Keep Forever', 'ai-content-writer' ); ?></option>
     107                            <option value="1" <?php selected( $log_retention_period, 1 ); ?>><?php esc_html_e( 'Daily', 'ai-content-writer' ); ?></option>
     108                            <option value="7" <?php selected( $log_retention_period, 7 ); ?>><?php esc_html_e( '7 Days', 'ai-content-writer' ); ?></option>
     109                            <option value="15" <?php selected( $log_retention_period, 15 ); ?>><?php esc_html_e( '15 Days', 'ai-content-writer' ); ?></option>
     110                            <option value="30" <?php selected( $log_retention_period, 30 ); ?>><?php esc_html_e( '30 Days', 'ai-content-writer' ); ?></option>
     111                            <option value="60" <?php selected( $log_retention_period, 60 ); ?>><?php esc_html_e( '60 Days', 'ai-content-writer' ); ?></option>
     112                            <option value="90" <?php selected( $log_retention_period, 90 ); ?>><?php esc_html_e( '90 Days', 'ai-content-writer' ); ?></option>
     113                            <option value="180" <?php selected( $log_retention_period, 180 ); ?>><?php esc_html_e( '180 Days', 'ai-content-writer' ); ?></option>
     114                            <option value="365" <?php selected( $log_retention_period, 365 ); ?>><?php esc_html_e( '365 Days', 'ai-content-writer' ); ?></option>
     115                        </select>
     116                        <p class="description"><?php esc_html_e( 'Select the log retention period. Logs older than the selected period will be automatically deleted. Default is 30 days.', 'ai-content-writer' ); ?></p>
     117                    </div>
     118                </div>
     119                <div class="field-group field-section">
    97120                    <h3><?php esc_html_e( 'Miscellaneous Settings', 'ai-content-writer' ); ?></h3>
    98121                    <p><?php esc_html_e( 'The following options are the miscellaneous settings for the AI Content Writer instant content generation feature.', 'ai-content-writer' ); ?></p>
  • ai-content-writer/trunk/includes/Campaigns/Articles.php

    r3357556 r3363621  
    139139            // If the counter is greater than or equal to the target then break the loop.
    140140            if ( $count >= $posts_needed ) {
     141                ai_content_writer()->create_log( sprintf( /* translators: 1: Number of posts generated. */ __( '%d posts titles and source links generated successfully.', 'ai-content-writer' ), $count ), 'success', $campaign_id );
    141142                break;
    142143            }
  • ai-content-writer/trunk/includes/Campaigns/RSSFeed.php

    r3295814 r3363621  
    105105            // If the counter is greater than or equal to the target then break the loop.
    106106            if ( $count >= $posts_needed ) {
     107                ai_content_writer()->create_log( sprintf( /* translators: 1: Number of posts generated. */ __( '%d posts titles and source links generated from RSS feed.', 'ai-content-writer' ), $count ), 'success', $campaign_id );
    107108                break;
    108109            }
  • ai-content-writer/trunk/includes/Cron.php

    r3357556 r3363621  
    2828        add_action( 'aicw_generate_thumbnail', array( __CLASS__, 'generate_thumbnails' ) );
    2929        add_action( 'aicw_publish_posts', array( __CLASS__, 'publish_posts' ) );
     30        add_action( 'aicw_cleanup_logs', array( __CLASS__, 'cleanup_logs' ) );
    3031    }
    3132
     
    5859        if ( ! wp_next_scheduled( 'aicw_publish_posts' ) ) {
    5960            wp_schedule_event( time() + 900, $frequency, 'aicw_publish_posts' );
     61        }
     62
     63        // Schedule the cron job for cleaning up old logs.
     64        if ( ! wp_next_scheduled( 'aicw_cleanup_logs' ) ) {
     65            wp_schedule_event( time() + 1200, 'daily', 'aicw_cleanup_logs' );
    6066        }
    6167    }
     
    186192                // If the counter is greater than or equal to the target then break the loop.
    187193                if ( array_key_exists( 'posts_needed', $needs_update ) && $counter >= $needs_update['posts_needed'] ) {
     194                    ai_content_writer()->create_log( sprintf( /* translators: 1: Number of posts created. 2: Campaign ID. 3: Campaign Title. */ esc_html__( 'Created %1$d posts for campaign ID %2$d with title "%3$s".', 'ai-content-writer' ), esc_html( $counter ), esc_html( $campaign_id ), get_the_title( $campaign_id ) ), 'success', $campaign_id );
    188195                    break;
    189196                }
     
    193200            aicw_update_last_run_time( $campaign_id );
    194201
    195             // If this line executed then break the foreach loop. This will ensure that only one campaign is processed at a time.
    196             break;
     202            break; // Break the loop to process only one campaign at a time.
    197203        }
    198204    }
     
    277283            // Check if the content is updated successfully or not.
    278284            if ( ! $is_updated ) {
    279                 // If the content is not updated then handle the itteration occurring. and delete it if the post is not updated with 2 attempts.
     285                // If the content is not updated then handle the iteration occurring. and delete it if the post is not updated with 2 attempts.
    280286                $attempts = get_post_meta( $post_id, '_aicw_generate_content_attempts', true );
    281287                if ( empty( $attempts ) ) {
     
    286292                // Check if the attempts are greater than or equal to 2 then delete the post.
    287293                if ( $attempts >= 2 ) {
     294                    ai_content_writer()->create_log( sprintf( /* translators: 1: Post ID. 2: Post Title. */ esc_html__( 'Failed to generate content for post ID %1$d with title "%2$s" after %3$d attempts. Deleting the post.', 'ai-content-writer' ), esc_html( $post_id ), get_the_title( $post_id ), esc_html( $attempts ) ), 'error', $campaign_id );
    288295                    wp_delete_post( $post_id, true );
    289296                    continue;
     
    296303            aicw_update_last_run_time( $post_id );
    297304
    298             // If this line executed then break the foreach loop. This will ensure that only one post is processed at a time.
    299             break;
     305            ai_content_writer()->create_log( sprintf( /* translators: 1: Post ID. 2: Post Title. */ esc_html__( 'Generated content for post ID %1$d with title "%2$s".', 'ai-content-writer' ), esc_html( $post_id ), get_the_title( $post_id ) ), 'success', $campaign_id );
     306            break; // Break the loop to process only one post at a time.
    300307        }
    301308    }
     
    389396            aicw_update_last_run_time( $post_id );
    390397
    391             // If this line executed then break the foreach loop. This will ensure that only one post is processed at a time.
    392             break;
     398            ai_content_writer()->create_log( sprintf( /* translators: 1: Post ID. 2: Post Title. */ esc_html__( 'Generated thumbnail for post ID %1$d with title "%2$s".', 'ai-content-writer' ), esc_html( $post_id ), get_the_title( $post_id ) ), 'success', $campaign_id );
     399            break; // Break the loop to process only one post at a time.
    393400        }
    394401    }
     
    492499            );
    493500
    494             // If this line executed then break the foreach loop. This will ensure that only one post is processed at a time.
    495             break;
     501            ai_content_writer()->create_log( sprintf( /* translators: 1: Post ID. 2: Post Title. */ esc_html__( 'Published post ID %1$d with title "%2$s".', 'ai-content-writer' ), esc_html( $post_id ), get_the_title( $post_id ) ), 'success', $campaign_id );
     502            break; // Break the loop to process only one post at a time.
     503        }
     504    }
     505
     506    /**
     507     * Cleanup logs.
     508     * Deletes old logs based on the retention period set in the settings.
     509     *
     510     * @since 2.0.6
     511     * @return void
     512     */
     513    public static function cleanup_logs() {
     514        $retention_period = absint( get_option( 'aicw_log_retention_period', 30 ) );
     515        if ( $retention_period <= 0 ) {
     516            return;
     517        }
     518
     519        $cutoff_date = gmdate( 'Y-m-d', strtotime( "-{$retention_period} days" ) );
     520        $logs        = get_posts(
     521            array(
     522                'post_type'      => 'aicw_log',
     523                'posts_per_page' => -1,
     524                'date_query'     => array(
     525                    array(
     526                        'before'    => $cutoff_date,
     527                        'inclusive' => true,
     528                    ),
     529                ),
     530                'fields'         => 'ids',
     531                'orderby'        => 'date',
     532                'order'          => 'ASC',
     533            )
     534        );
     535
     536        // Delete logs if found.
     537        if ( ! empty( $logs ) ) {
     538            foreach ( $logs as $log_id ) {
     539                wp_delete_post( $log_id, true );
     540            }
     541
     542            ai_content_writer()->create_log( sprintf( /* translators: 1: Number of logs deleted. 2: Retention period in days. */ esc_html__( 'Deleted %1$d logs older than %2$d days.', 'ai-content-writer' ), count( $logs ), $retention_period ) );
    496543        }
    497544    }
  • ai-content-writer/trunk/includes/Plugin.php

    r3357556 r3363621  
    457457        }
    458458    }
     459
     460    /**
     461     * Create a log entry
     462     *
     463     * @param string $message The log message.
     464     * @param string $type    The log type (e.g., 'success', 'info', 'error', 'warning').
     465     * @param int    $campaign_id Optional. The campaign ID associated with the log. Default is empty.
     466     *
     467     * @since 2.0.6
     468     * @return int|\WP_Error The ID of the created log post or WP_Error on failure.
     469     */
     470    public function create_log( $message, $type = 'info', $campaign_id = '' ) {
     471        if ( empty( $message ) ) {
     472            return new \WP_Error( 'aicw_log_message_empty', esc_html__( 'Log message cannot be empty.', 'ai-content-writer' ) );
     473        }
     474
     475        $log_data = array(
     476            'post_title'   => sanitize_title( $type ),
     477            'post_content' => wp_kses_post( $message ),
     478            'post_status'  => 'publish',
     479            'post_type'    => 'aicw_log',
     480        );
     481
     482        // If campaign ID is provided, add it as post meta.
     483        if ( ! empty( $campaign_id ) ) {
     484            $log_data['meta_input']['_aicw_related_campaign'] = absint( $campaign_id );
     485        }
     486
     487        return wp_insert_post( $log_data );
     488    }
    459489}
  • ai-content-writer/trunk/includes/PostTypes.php

    r3249260 r3363621  
    2020        add_action( 'init', array( $this, 'register_cpt' ) );
    2121        add_action( 'init', array( $this, 'register_temp_cpt' ) );
     22        add_action( 'init', array( $this, 'register_log_cpt' ) );
    2223    }
    2324
     
    113114        register_post_type( 'aicw_post', apply_filters( 'aicw_temp_post_type_args', $args ) );
    114115    }
     116
     117    /**
     118     * Register log custom post types.
     119     * This will register the log post type for the generated posts.
     120     *
     121     * @since 2.0.6
     122     * @return void
     123     */
     124    public function register_log_cpt() {
     125        $labels = array(
     126            'name'               => _x( 'Logs', 'post type general name', 'ai-content-writer' ),
     127            'singular_name'      => _x( 'Log', 'post type singular name', 'ai-content-writer' ),
     128            'menu_name'          => _x( 'Logs', 'admin menu', 'ai-content-writer' ),
     129            'name_admin_bar'     => _x( 'Log', 'add new on admin bar', 'ai-content-writer' ),
     130            'add_new'            => _x( 'Add New', 'log', 'ai-content-writer' ),
     131            'add_new_item'       => __( 'Add New Log', 'ai-content-writer' ),
     132            'new_item'           => __( 'New Log', 'ai-content-writer' ),
     133            'edit_item'          => __( 'Edit Log', 'ai-content-writer' ),
     134            'view_item'          => __( 'View Log', 'ai-content-writer' ),
     135            'all_items'          => __( 'All Logs', 'ai-content-writer' ),
     136            'search_items'       => __( 'Search Logs', 'ai-content-writer' ),
     137            'parent_item_colon'  => __( 'Parent Logs:', 'ai-content-writer' ),
     138            'not_found'          => __( 'No logs found.', 'ai-content-writer' ),
     139            'not_found_in_trash' => __( 'No logs found in Trash.', 'ai-content-writer' ),
     140        );
     141
     142        $args = array(
     143            'labels'              => apply_filters( 'aicw_log_post_type_labels', $labels ),
     144            'public'              => false,
     145            'publicly_queryable'  => false,
     146            'exclude_from_search' => true,
     147            'show_ui'             => false,
     148            'show_in_menu'        => false,
     149            'show_in_nav_menus'   => false,
     150            'query_var'           => false,
     151            'can_export'          => false,
     152            'rewrite'             => false,
     153            'capability_type'     => 'post',
     154            'has_archive'         => false,
     155            'hierarchical'        => false,
     156            'menu_position'       => null,
     157            'supports'            => array(),
     158        );
     159
     160        register_post_type( 'aicw_log', apply_filters( 'aicw_log_post_type_args', $args ) );
     161    }
    115162}
  • ai-content-writer/trunk/includes/functions.php

    r3357556 r3363621  
    728728    return false;
    729729}
    730 
    731 
    732 
  • ai-content-writer/trunk/languages/ai-content-writer.pot

    r3357556 r3363621  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: AI Content Writer 2.0.5\n"
     5"Project-Id-Version: AI Content Writer 2.0.6\n"
    66"Report-Msgid-Bugs-To: https://beautifulplugins.com/support/\n"
    7 "POT-Creation-Date: 2025-09-07 23:34:34+00:00\n"
     7"POT-Creation-Date: 2025-09-18 04:07:19+00:00\n"
    88"MIME-Version: 1.0\n"
    99"Content-Type: text/plain; charset=utf-8\n"
     
    2626
    2727#: includes/Admin/Actions.php:47 includes/Admin/Actions.php:146
    28 #: includes/Admin/Actions.php:248 includes/Admin/Actions.php:300
    29 #: includes/Admin/Actions.php:540 includes/Admin/Actions.php:597
    30 #: includes/Admin/Actions.php:640 includes/Admin/Admin.php:292
    31 #: includes/Admin/Dashboard.php:36
     28#: includes/Admin/Actions.php:248 includes/Admin/Actions.php:302
     29#: includes/Admin/Actions.php:542 includes/Admin/Actions.php:599
     30#: includes/Admin/Actions.php:642 includes/Admin/Admin.php:341
     31#: includes/Admin/Admin.php:386 includes/Admin/Dashboard.php:36
    3232msgid "You do not have permission to perform this action."
    3333msgstr ""
     
    5353msgstr ""
    5454
    55 #: includes/Admin/Actions.php:160 includes/Admin/Actions.php:649
     55#: includes/Admin/Actions.php:160 includes/Admin/Actions.php:651
    5656msgid "Invalid campaign. Please try again."
    5757msgstr ""
     
    6161msgstr ""
    6262
    63 #: includes/Admin/Actions.php:284
     63#: includes/Admin/Actions.php:286
    6464msgid "Settings saved successfully."
    6565msgstr ""
    6666
    67 #: includes/Admin/Actions.php:308 includes/Admin/views/generate-content.php:59
     67#: includes/Admin/Actions.php:310 includes/Admin/views/generate-content.php:59
    6868msgid "English"
    6969msgstr ""
    7070
    71 #: includes/Admin/Actions.php:315 includes/Admin/views/generate-content.php:81
     71#: includes/Admin/Actions.php:317 includes/Admin/views/generate-content.php:81
    7272#: includes/Plugin.php:325 includes/functions.php:391
    7373msgid ""
     
    7777msgstr ""
    7878
    79 #: includes/Admin/Actions.php:323
     79#: includes/Admin/Actions.php:325
    8080msgid "Title is required. Please, start with \"Write an article on...\""
    8181msgstr ""
    8282
    83 #: includes/Admin/Actions.php:329
     83#: includes/Admin/Actions.php:331
    8484msgid "Prompt type is required. Please, select the prompt type."
    8585msgstr ""
    8686
    87 #: includes/Admin/Actions.php:335
     87#: includes/Admin/Actions.php:337
    8888msgid "Language is required. Please, select the language."
    8989msgstr ""
    9090
    91 #: includes/Admin/Actions.php:341
     91#: includes/Admin/Actions.php:343
    9292msgid "Post type is required. Please, select the post type."
    9393msgstr ""
    9494
    95 #: includes/Admin/Actions.php:352 includes/Plugin.php:237
     95#: includes/Admin/Actions.php:354 includes/Plugin.php:237
    9696msgid ""
    9797"Please configure the API settings. A valid Gemini API key is required to "
     
    9999msgstr ""
    100100
    101 #: includes/Admin/Actions.php:431
     101#: includes/Admin/Actions.php:433
    102102msgid ""
    103103"Please configure the API settings. A valid ChatGPT API secret key is "
     
    105105msgstr ""
    106106
    107 #: includes/Admin/Actions.php:439
     107#: includes/Admin/Actions.php:441
    108108#. translators: 1: Prompt Content, 2: System Tone, 3: Language, 4: Min Words
    109109msgid ""
     
    127127msgstr ""
    128128
    129 #: includes/Admin/Actions.php:454 includes/functions.php:415
     129#: includes/Admin/Actions.php:456 includes/functions.php:415
    130130msgid "The article should be optimized for SEO"
    131131msgstr ""
    132132
    133 #: includes/Admin/Actions.php:454 includes/functions.php:415
     133#: includes/Admin/Actions.php:456 includes/functions.php:415
    134134msgid "The article should be optimized for SEO, including relevant keywords: "
    135135msgstr ""
    136136
    137 #: includes/Admin/Actions.php:481
     137#: includes/Admin/Actions.php:483
    138138msgid "Invalid API model. Please configure the API settings."
    139139msgstr ""
    140140
    141 #: includes/Admin/Actions.php:519 includes/Admin/Actions.php:524
     141#: includes/Admin/Actions.php:521 includes/Admin/Actions.php:526
    142142msgid "Content generated successfully."
    143143msgstr ""
    144144
    145 #: includes/Admin/Actions.php:549 includes/Admin/Actions.php:607
     145#: includes/Admin/Actions.php:551 includes/Admin/Actions.php:609
    146146msgid "Invalid post. Please try again."
    147147msgstr ""
    148148
    149 #: includes/Admin/Actions.php:555
     149#: includes/Admin/Actions.php:557
    150150msgid "Invalid image. Please select an image."
    151151msgstr ""
    152152
    153 #: includes/Admin/Actions.php:565
     153#: includes/Admin/Actions.php:567
    154154msgid "Invalid image URL. Please try again."
    155155msgstr ""
    156156
    157 #: includes/Admin/Actions.php:579
     157#: includes/Admin/Actions.php:581
    158158msgid "Content generated and featured image set successfully."
    159159msgstr ""
    160160
    161 #: includes/Admin/Actions.php:616
     161#: includes/Admin/Actions.php:618
    162162msgid "Post deleted successfully."
    163163msgstr ""
    164164
    165 #: includes/Admin/Actions.php:623
     165#: includes/Admin/Actions.php:625
    166166msgid "Failed to delete the post. Please try again."
    167167msgstr ""
    168168
    169 #: includes/Admin/Actions.php:658
     169#: includes/Admin/Actions.php:660
    170170msgid "Campaign not found. Please try again."
    171171msgstr ""
    172172
    173 #: includes/Admin/Actions.php:706
     173#: includes/Admin/Actions.php:708
    174174msgid "Campaign run successfully."
    175175msgstr ""
     
    179179msgstr ""
    180180
    181 #: includes/Admin/Admin.php:61 includes/Admin/Admin.php:62
     181#: includes/Admin/Admin.php:66 includes/Admin/Admin.php:67
    182182#: includes/Admin/views/admin-header.php:43
    183183#: includes/Admin/views/dashboard.php:14
     
    185185msgstr ""
    186186
    187 #: includes/Admin/Admin.php:89 includes/Admin/Admin.php:90
     187#: includes/Admin/Admin.php:94 includes/Admin/Admin.php:95
    188188#: includes/Admin/views/admin-header.php:48
    189189#: includes/Admin/views/campaigns.php:15
     
    191191msgstr ""
    192192
    193 #: includes/Admin/Admin.php:109 includes/Admin/Admin.php:110
     193#: includes/Admin/Admin.php:114 includes/Admin/Admin.php:115
    194194#: includes/Admin/views/generate-content.php:15
    195195#: includes/Admin/views/generate-content.php:164
     
    197197msgstr ""
    198198
    199 #: includes/Admin/Admin.php:126 includes/Admin/Admin.php:127
     199#: includes/Admin/Admin.php:131 includes/Admin/Admin.php:132
     200#: includes/Admin/views/logs.php:15
     201msgid "Logs"
     202msgstr ""
     203
     204#: includes/Admin/Admin.php:151 includes/Admin/Admin.php:152
    200205#: includes/Admin/views/admin-header.php:53
    201206#: includes/Admin/views/dashboard.php:19 includes/Admin/views/settings.php:15
     
    205210msgstr ""
    206211
    207 #: includes/Admin/Admin.php:143 includes/Admin/Admin.php:144
     212#: includes/Admin/Admin.php:168 includes/Admin/Admin.php:169
    208213#: includes/Admin/views/admin-header.php:58
    209214#: includes/Admin/views/dashboard.php:22 includes/Admin/views/help.php:15
     
    211216msgstr ""
    212217
    213 #: includes/Admin/Admin.php:187
     218#: includes/Admin/Admin.php:213
    214219msgid "Campaigns per page"
    215220msgstr ""
    216221
    217 #: includes/Admin/Admin.php:317
     222#: includes/Admin/Admin.php:224
     223msgid "Logs per page"
     224msgstr ""
     225
     226#: includes/Admin/Admin.php:366 includes/Admin/Admin.php:411
    218227#. translators: %s: number of accounts.
    219228msgid "%s item(s) deleted successfully."
     
    221230
    222231#: includes/Admin/ListTables/CampaignsListTable.php:91
    223 #: includes/PostTypes.php:45
     232#: includes/PostTypes.php:46
    224233msgid "No campaigns found."
    225234msgstr ""
     
    240249
    241250#: includes/Admin/ListTables/CampaignsListTable.php:107
     251#: includes/Admin/ListTables/LogsListTable.php:114
    242252msgid "Date"
    243253msgstr ""
    244254
    245255#: includes/Admin/ListTables/CampaignsListTable.php:168
     256#: includes/Admin/ListTables/LogsListTable.php:174
    246257#. translators: %d: key id.
    247258msgid "ID: %d"
     
    254265#: includes/Admin/ListTables/CampaignsListTable.php:170
    255266#: includes/Admin/ListTables/CampaignsListTable.php:183
     267#: includes/Admin/ListTables/LogsListTable.php:175
     268#: includes/Admin/ListTables/LogsListTable.php:188
    256269#: includes/Admin/views/edit-campaign.php:288 includes/functions.php:681
    257270msgid "Delete"
     
    262275#: includes/Admin/views/edit-campaign.php:329
    263276msgid "Active"
     277msgstr ""
     278
     279#: includes/Admin/ListTables/LogsListTable.php:98 includes/PostTypes.php:138
     280msgid "No logs found."
     281msgstr ""
     282
     283#: includes/Admin/ListTables/LogsListTable.php:111
     284#: includes/Admin/views/add-campaign.php:251
     285#: includes/Admin/views/edit-campaign.php:362
     286#: includes/Admin/views/generate-content.php:110
     287msgid "Type"
     288msgstr ""
     289
     290#: includes/Admin/ListTables/LogsListTable.php:112
     291msgid "Log"
     292msgstr ""
     293
     294#: includes/Admin/ListTables/LogsListTable.php:113
     295msgid "Related Event"
    264296msgstr ""
    265297
     
    345377#: includes/Admin/views/add-campaign.php:55
    346378#: includes/Admin/views/edit-campaign.php:58
    347 #: includes/Admin/views/settings.php:106
     379#: includes/Admin/views/settings.php:129
    348380msgid "Gemini"
    349381msgstr ""
     
    351383#: includes/Admin/views/add-campaign.php:56
    352384#: includes/Admin/views/edit-campaign.php:59
    353 #: includes/Admin/views/settings.php:107
     385#: includes/Admin/views/settings.php:130
    354386msgid "ChatGPT"
    355387msgstr ""
     
    605637msgstr ""
    606638
    607 #: includes/Admin/views/add-campaign.php:251
    608 #: includes/Admin/views/edit-campaign.php:362
    609 #: includes/Admin/views/generate-content.php:110
    610 msgid "Type"
    611 msgstr ""
    612 
    613639#: includes/Admin/views/add-campaign.php:257
    614640#: includes/Admin/views/edit-campaign.php:368
     
    660686msgstr ""
    661687
    662 #: includes/Admin/views/campaigns.php:17 includes/PostTypes.php:38
     688#: includes/Admin/views/campaigns.php:17 includes/PostTypes.php:39
    663689msgid "Add New Campaign"
    664690msgstr ""
    665691
    666 #: includes/Admin/views/dashboard.php:16 includes/PostTypes.php:42
     692#: includes/Admin/views/dashboard.php:16 includes/PostTypes.php:43
    667693msgid "All Campaigns"
    668694msgstr ""
     
    704730msgstr ""
    705731
    706 #: includes/Admin/views/edit-campaign.php:21 includes/PostTypes.php:40
     732#: includes/Admin/views/edit-campaign.php:21 includes/PostTypes.php:41
    707733msgid "Edit Campaign"
    708734msgstr ""
     
    760786
    761787#: includes/Admin/views/edit-campaign.php:354
    762 #: includes/Admin/views/settings.php:149
     788#: includes/Admin/views/settings.php:172
    763789msgid "Save Changes"
    764790msgstr ""
     
    11101136msgstr ""
    11111137
    1112 #: includes/Admin/views/help.php:117 includes/Admin/views/settings.php:158
     1138#: includes/Admin/views/help.php:117 includes/Admin/views/settings.php:181
    11131139msgid "Support"
    11141140msgstr ""
    11151141
    1116 #: includes/Admin/views/help.php:120 includes/Admin/views/settings.php:161
     1142#: includes/Admin/views/help.php:120 includes/Admin/views/settings.php:184
    11171143msgid "If you need help, please contact us."
    11181144msgstr ""
    11191145
    1120 #: includes/Admin/views/help.php:123 includes/Admin/views/settings.php:164
     1146#: includes/Admin/views/help.php:123 includes/Admin/views/settings.php:187
    11211147msgid "Contact Support"
    11221148msgstr ""
    11231149
    1124 #: includes/Admin/views/help.php:130 includes/Admin/views/settings.php:171
     1150#: includes/Admin/views/help.php:130 includes/Admin/views/settings.php:194
    11251151msgid "Our Popular Plugins"
    11261152msgstr ""
    11271153
    1128 #: includes/Admin/views/help.php:136 includes/Admin/views/settings.php:177
     1154#: includes/Admin/views/help.php:136 includes/Admin/views/settings.php:200
    11291155msgid "Send Emails – Newsletters, Automation & Email Marketing for WordPress"
    11301156msgstr ""
    11311157
    1132 #: includes/Admin/views/help.php:141 includes/Admin/views/settings.php:182
     1158#: includes/Admin/views/help.php:141 includes/Admin/views/settings.php:205
    11331159msgid "Essential Elements for WordPress"
    11341160msgstr ""
    11351161
    1136 #: includes/Admin/views/help.php:146 includes/Admin/views/settings.php:187
     1162#: includes/Admin/views/help.php:146 includes/Admin/views/settings.php:210
    11371163msgid "Shortcodes – Advanced Shortcode Manager"
    11381164msgstr ""
    11391165
    1140 #: includes/Admin/views/help.php:151 includes/Admin/views/settings.php:192
     1166#: includes/Admin/views/help.php:151 includes/Admin/views/settings.php:215
    11411167msgid "Post Showcase"
    11421168msgstr ""
    11431169
    1144 #: includes/Admin/views/help.php:156 includes/Admin/views/settings.php:197
     1170#: includes/Admin/views/help.php:156 includes/Admin/views/settings.php:220
    11451171msgid "SMS Manager – WooCommerce SMS Notifications"
    11461172msgstr ""
    11471173
    1148 #: includes/Admin/views/help.php:161 includes/Admin/views/settings.php:202
     1174#: includes/Admin/views/help.php:161 includes/Admin/views/settings.php:225
    11491175msgid "Invoice Payment"
    11501176msgstr ""
     
    12671293
    12681294#: includes/Admin/views/settings.php:97
     1295msgid "Logs Settings"
     1296msgstr ""
     1297
     1298#: includes/Admin/views/settings.php:101
     1299msgid "Log Retention Period:"
     1300msgstr ""
     1301
     1302#: includes/Admin/views/settings.php:106
     1303msgid "Keep Forever"
     1304msgstr ""
     1305
     1306#: includes/Admin/views/settings.php:107
     1307msgid "Daily"
     1308msgstr ""
     1309
     1310#: includes/Admin/views/settings.php:108
     1311msgid "7 Days"
     1312msgstr ""
     1313
     1314#: includes/Admin/views/settings.php:109
     1315msgid "15 Days"
     1316msgstr ""
     1317
     1318#: includes/Admin/views/settings.php:110
     1319msgid "30 Days"
     1320msgstr ""
     1321
     1322#: includes/Admin/views/settings.php:111
     1323msgid "60 Days"
     1324msgstr ""
     1325
     1326#: includes/Admin/views/settings.php:112
     1327msgid "90 Days"
     1328msgstr ""
     1329
     1330#: includes/Admin/views/settings.php:113
     1331msgid "180 Days"
     1332msgstr ""
     1333
     1334#: includes/Admin/views/settings.php:114
     1335msgid "365 Days"
     1336msgstr ""
     1337
     1338#: includes/Admin/views/settings.php:116
     1339msgid ""
     1340"Select the log retention period. Logs older than the selected period will "
     1341"be automatically deleted. Default is 30 days."
     1342msgstr ""
     1343
     1344#: includes/Admin/views/settings.php:120
    12691345msgid "Miscellaneous Settings"
    12701346msgstr ""
    12711347
    1272 #: includes/Admin/views/settings.php:98
     1348#: includes/Admin/views/settings.php:121
    12731349msgid ""
    12741350"The following options are the miscellaneous settings for the AI Content "
     
    12761352msgstr ""
    12771353
    1278 #: includes/Admin/views/settings.php:102
     1354#: includes/Admin/views/settings.php:125
    12791355msgid "API Model:"
    12801356msgstr ""
    12811357
    1282 #: includes/Admin/views/settings.php:109
     1358#: includes/Admin/views/settings.php:132
    12831359msgid ""
    12841360"Select the AI model to generate content using the instant content "
     
    12861362msgstr ""
    12871363
    1288 #: includes/Admin/views/settings.php:114
     1364#: includes/Admin/views/settings.php:137
    12891365msgid "Enable Image Generation:"
    12901366msgstr ""
    12911367
    1292 #: includes/Admin/views/settings.php:119
     1368#: includes/Admin/views/settings.php:142
    12931369msgid "Enable Thumbnail Image Generation"
    12941370msgstr ""
    12951371
    1296 #: includes/Admin/views/settings.php:121
     1372#: includes/Admin/views/settings.php:144
    12971373msgid ""
    12981374"Enable to activate the thumbnail image generation feature. AI generated "
     
    13011377msgstr ""
    13021378
    1303 #: includes/Admin/views/settings.php:126
     1379#: includes/Admin/views/settings.php:149
    13041380msgid "Enable Redirection:"
    13051381msgstr ""
    13061382
    1307 #: includes/Admin/views/settings.php:131
     1383#: includes/Admin/views/settings.php:154
    13081384msgid "Enable Redirection"
    13091385msgstr ""
    13101386
    1311 #: includes/Admin/views/settings.php:133
     1387#: includes/Admin/views/settings.php:156
    13121388msgid ""
    13131389"Enable to redirect to the edit page after successful generation of content "
     
    13151391msgstr ""
    13161392
    1317 #: includes/Cron.php:74
     1393#: includes/Campaigns/Articles.php:141
     1394#. translators: 1: Number of posts generated.
     1395msgid "%d posts titles and source links generated successfully."
     1396msgstr ""
     1397
     1398#: includes/Campaigns/RSSFeed.php:107
     1399#. translators: 1: Number of posts generated.
     1400msgid "%d posts titles and source links generated from RSS feed."
     1401msgstr ""
     1402
     1403#: includes/Cron.php:80
    13181404msgid "Every 15 Minutes"
    13191405msgstr ""
    13201406
    1321 #: includes/Cron.php:78
     1407#: includes/Cron.php:84
    13221408msgid "Every 30 Minutes"
     1409msgstr ""
     1410
     1411#: includes/Cron.php:194
     1412#. translators: 1: Number of posts created. 2: Campaign ID. 3: Campaign Title.
     1413msgid "Created %1$d posts for campaign ID %2$d with title \"%3$s\"."
     1414msgstr ""
     1415
     1416#: includes/Cron.php:294
     1417#. translators: 1: Post ID. 2: Post Title.
     1418msgid ""
     1419"Failed to generate content for post ID %1$d with title \"%2$s\" after %3$d "
     1420"attempts. Deleting the post."
     1421msgstr ""
     1422
     1423#: includes/Cron.php:305
     1424#. translators: 1: Post ID. 2: Post Title.
     1425msgid "Generated content for post ID %1$d with title \"%2$s\"."
     1426msgstr ""
     1427
     1428#: includes/Cron.php:398
     1429#. translators: 1: Post ID. 2: Post Title.
     1430msgid "Generated thumbnail for post ID %1$d with title \"%2$s\"."
     1431msgstr ""
     1432
     1433#: includes/Cron.php:501
     1434#. translators: 1: Post ID. 2: Post Title.
     1435msgid "Published post ID %1$d with title \"%2$s\"."
     1436msgstr ""
     1437
     1438#: includes/Cron.php:542
     1439#. translators: 1: Number of logs deleted. 2: Retention period in days.
     1440msgid "Deleted %1$d logs older than %2$d days."
    13231441msgstr ""
    13241442
     
    13471465msgstr ""
    13481466
    1349 #: includes/PostTypes.php:39
     1467#: includes/Plugin.php:472
     1468msgid "Log message cannot be empty."
     1469msgstr ""
     1470
     1471#: includes/PostTypes.php:40
    13501472msgid "New Campaign"
    13511473msgstr ""
    13521474
    1353 #: includes/PostTypes.php:41
     1475#: includes/PostTypes.php:42
    13541476msgid "View Campaign"
    13551477msgstr ""
    13561478
    1357 #: includes/PostTypes.php:43
     1479#: includes/PostTypes.php:44
    13581480msgid "Search Campaigns"
    13591481msgstr ""
    13601482
    1361 #: includes/PostTypes.php:44
     1483#: includes/PostTypes.php:45
    13621484msgid "Parent Campaigns:"
    13631485msgstr ""
    13641486
    1365 #: includes/PostTypes.php:46
     1487#: includes/PostTypes.php:47
    13661488msgid "No campaigns found in Trash."
    13671489msgstr ""
    13681490
    1369 #: includes/PostTypes.php:84
     1491#: includes/PostTypes.php:85
    13701492msgid "Add New Temporary Post"
    13711493msgstr ""
    13721494
    1373 #: includes/PostTypes.php:85
     1495#: includes/PostTypes.php:86
    13741496msgid "New Temporary Post"
    13751497msgstr ""
    13761498
    1377 #: includes/PostTypes.php:86
     1499#: includes/PostTypes.php:87
    13781500msgid "Edit Temporary Post"
    13791501msgstr ""
    13801502
    1381 #: includes/PostTypes.php:87
     1503#: includes/PostTypes.php:88
    13821504msgid "View Temporary Post"
    13831505msgstr ""
    13841506
    1385 #: includes/PostTypes.php:88
     1507#: includes/PostTypes.php:89
    13861508msgid "All Temporary Posts"
    13871509msgstr ""
    13881510
    1389 #: includes/PostTypes.php:89
     1511#: includes/PostTypes.php:90
    13901512msgid "Search Temporary Posts"
    13911513msgstr ""
    13921514
    1393 #: includes/PostTypes.php:90
     1515#: includes/PostTypes.php:91
    13941516msgid "Parent Temporary Posts:"
    13951517msgstr ""
    13961518
    1397 #: includes/PostTypes.php:91
     1519#: includes/PostTypes.php:92
    13981520msgid "No temporary posts found."
    13991521msgstr ""
    14001522
    1401 #: includes/PostTypes.php:92
     1523#: includes/PostTypes.php:93
    14021524msgid "No temporary posts found in Trash."
     1525msgstr ""
     1526
     1527#: includes/PostTypes.php:131
     1528msgid "Add New Log"
     1529msgstr ""
     1530
     1531#: includes/PostTypes.php:132
     1532msgid "New Log"
     1533msgstr ""
     1534
     1535#: includes/PostTypes.php:133
     1536msgid "Edit Log"
     1537msgstr ""
     1538
     1539#: includes/PostTypes.php:134
     1540msgid "View Log"
     1541msgstr ""
     1542
     1543#: includes/PostTypes.php:135
     1544msgid "All Logs"
     1545msgstr ""
     1546
     1547#: includes/PostTypes.php:136
     1548msgid "Search Logs"
     1549msgstr ""
     1550
     1551#: includes/PostTypes.php:137
     1552msgid "Parent Logs:"
     1553msgstr ""
     1554
     1555#: includes/PostTypes.php:139
     1556msgid "No logs found in Trash."
    14031557msgstr ""
    14041558
     
    14591613msgstr ""
    14601614
    1461 #: includes/PostTypes.php:33
     1615#: includes/PostTypes.php:34
    14621616msgctxt "post type general name"
    14631617msgid "Campaigns"
    14641618msgstr ""
    14651619
    1466 #: includes/PostTypes.php:79
     1620#: includes/PostTypes.php:80
    14671621msgctxt "post type general name"
    14681622msgid "Temporary Posts"
    14691623msgstr ""
    14701624
    1471 #: includes/PostTypes.php:34
     1625#: includes/PostTypes.php:126
     1626msgctxt "post type general name"
     1627msgid "Logs"
     1628msgstr ""
     1629
     1630#: includes/PostTypes.php:35
    14721631msgctxt "post type singular name"
    14731632msgid "Campaign"
    14741633msgstr ""
    14751634
    1476 #: includes/PostTypes.php:80
     1635#: includes/PostTypes.php:81
    14771636msgctxt "post type singular name"
    14781637msgid "Temporary Post"
    14791638msgstr ""
    14801639
    1481 #: includes/PostTypes.php:35
     1640#: includes/PostTypes.php:127
     1641msgctxt "post type singular name"
     1642msgid "Log"
     1643msgstr ""
     1644
     1645#: includes/PostTypes.php:36
    14821646msgctxt "admin menu"
    14831647msgid "Campaigns"
    14841648msgstr ""
    14851649
    1486 #: includes/PostTypes.php:81
     1650#: includes/PostTypes.php:82
    14871651msgctxt "admin menu"
    14881652msgid "Temporary Posts"
    14891653msgstr ""
    14901654
    1491 #: includes/PostTypes.php:36
     1655#: includes/PostTypes.php:128
     1656msgctxt "admin menu"
     1657msgid "Logs"
     1658msgstr ""
     1659
     1660#: includes/PostTypes.php:37
    14921661msgctxt "add new on admin bar"
    14931662msgid "Campaign"
    14941663msgstr ""
    14951664
    1496 #: includes/PostTypes.php:82
     1665#: includes/PostTypes.php:83
    14971666msgctxt "add new on admin bar"
    14981667msgid "Temporary Post"
    14991668msgstr ""
    15001669
    1501 #: includes/PostTypes.php:37
     1670#: includes/PostTypes.php:129
     1671msgctxt "add new on admin bar"
     1672msgid "Log"
     1673msgstr ""
     1674
     1675#: includes/PostTypes.php:38
    15021676msgctxt "campaign"
    15031677msgid "Add New"
    15041678msgstr ""
    15051679
    1506 #: includes/PostTypes.php:83
     1680#: includes/PostTypes.php:84
    15071681msgctxt "temporary post"
    15081682msgid "Add New"
    15091683msgstr ""
     1684
     1685#: includes/PostTypes.php:130
     1686msgctxt "log"
     1687msgid "Add New"
     1688msgstr ""
  • ai-content-writer/trunk/readme.txt

    r3357556 r3363621  
    33Tags: content writer, ai, content, writing, autoblog
    44Tested up to: 6.8
    5 Stable tag: 2.0.5
     5Stable tag: 2.0.6
    66License: GPLv2 or later
    77License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    186186
    187187== Changelog ==
     188= 2.0.6 (18th September 2025) =
     189* New: Added logs page to view the logs of the content generation process.
     190* Enhance: Improved the listable layout for better user experience.
     191* Fix: Fixed minor bugs and improved performance.
     192
    188193= 2.0.5 (8 September 2025) =
    189194* New: Added support for OenAI updated API models (gpt-5, gpt-5-mini, gpt-5-nano and more).
  • ai-content-writer/trunk/vendor/composer/autoload_classmap.php

    r3295814 r3363621  
    1111    'AIContentWriter\\Admin\\Dashboard' => $baseDir . '/includes/Admin/Dashboard.php',
    1212    'AIContentWriter\\Admin\\ListTables\\CampaignsListTable' => $baseDir . '/includes/Admin/ListTables/CampaignsListTable.php',
     13    'AIContentWriter\\Admin\\ListTables\\LogsListTable' => $baseDir . '/includes/Admin/ListTables/LogsListTable.php',
    1314    'AIContentWriter\\Admin\\Settings' => $baseDir . '/includes/Admin/Settings.php',
    1415    'AIContentWriter\\Campaigns\\Articles' => $baseDir . '/includes/Campaigns/Articles.php',
  • ai-content-writer/trunk/vendor/composer/autoload_static.php

    r3295814 r3363621  
    2626        'AIContentWriter\\Admin\\Dashboard' => __DIR__ . '/../..' . '/includes/Admin/Dashboard.php',
    2727        'AIContentWriter\\Admin\\ListTables\\CampaignsListTable' => __DIR__ . '/../..' . '/includes/Admin/ListTables/CampaignsListTable.php',
     28        'AIContentWriter\\Admin\\ListTables\\LogsListTable' => __DIR__ . '/../..' . '/includes/Admin/ListTables/LogsListTable.php',
    2829        'AIContentWriter\\Admin\\Settings' => __DIR__ . '/../..' . '/includes/Admin/Settings.php',
    2930        'AIContentWriter\\Campaigns\\Articles' => __DIR__ . '/../..' . '/includes/Campaigns/Articles.php',
  • ai-content-writer/trunk/vendor/composer/installed.php

    r3357556 r3363621  
    22    'root' => array(
    33        'name' => 'beautifulplugins/ai-content-writer',
    4         'pretty_version' => 'v2.0.5',
    5         'version' => '2.0.5.0',
    6         'reference' => 'e3475dc577e55906706bba02adea2685b292b017',
     4        'pretty_version' => 'v2.0.6',
     5        'version' => '2.0.6.0',
     6        'reference' => 'fe8ac4317cab6c87a6d11cf3008de9cb08f03aa0',
    77        'type' => 'wordpress-plugin',
    88        'install_path' => __DIR__ . '/../../',
     
    1212    'versions' => array(
    1313        'beautifulplugins/ai-content-writer' => array(
    14             'pretty_version' => 'v2.0.5',
    15             'version' => '2.0.5.0',
    16             'reference' => 'e3475dc577e55906706bba02adea2685b292b017',
     14            'pretty_version' => 'v2.0.6',
     15            'version' => '2.0.6.0',
     16            'reference' => 'fe8ac4317cab6c87a6d11cf3008de9cb08f03aa0',
    1717            'type' => 'wordpress-plugin',
    1818            'install_path' => __DIR__ . '/../../',
Note: See TracChangeset for help on using the changeset viewer.