Changeset 3363621
- Timestamp:
- 09/18/2025 04:27:42 AM (5 months ago)
- Location:
- ai-content-writer/trunk
- Files:
-
- 2 added
- 20 edited
-
ai-content-writer.php (modified) (2 diffs)
-
assets/css/aicw-admin-rtl.css (modified) (1 diff)
-
assets/css/aicw-admin.asset.php (modified) (1 diff)
-
assets/css/aicw-admin.css (modified) (1 diff)
-
includes/Admin/Actions.php (modified) (2 diffs)
-
includes/Admin/Admin.php (modified) (12 diffs)
-
includes/Admin/ListTables/CampaignsListTable.php (modified) (1 diff)
-
includes/Admin/ListTables/LogsListTable.php (added)
-
includes/Admin/views/campaigns.php (modified) (1 diff)
-
includes/Admin/views/logs.php (added)
-
includes/Admin/views/settings.php (modified) (1 diff)
-
includes/Campaigns/Articles.php (modified) (1 diff)
-
includes/Campaigns/RSSFeed.php (modified) (1 diff)
-
includes/Cron.php (modified) (9 diffs)
-
includes/Plugin.php (modified) (1 diff)
-
includes/PostTypes.php (modified) (2 diffs)
-
includes/functions.php (modified) (1 diff)
-
languages/ai-content-writer.pot (modified) (32 diffs)
-
readme.txt (modified) (2 diffs)
-
vendor/composer/autoload_classmap.php (modified) (1 diff)
-
vendor/composer/autoload_static.php (modified) (1 diff)
-
vendor/composer/installed.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
ai-content-writer/trunk/ai-content-writer.php
r3357556 r3363621 4 4 * Plugin URI: https://beautifulplugins.com/ai-content-writer/ 5 5 * 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. 56 * Version: 2.0.6 7 7 * Requires at least: 5.0 8 8 * Requires PHP: 7.4 … … 47 47 */ 48 48 function ai_content_writer() { 49 return Plugin::create( __FILE__, '2.0. 5' );49 return Plugin::create( __FILE__, '2.0.6' ); 50 50 } 51 51 -
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 269 269 $enabled_img_gen = isset( $_POST['aicw_enable_img_generation'] ) ? sanitize_text_field( wp_unslash( $_POST['aicw_enable_img_generation'] ) ) : ''; 270 270 $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'] ) ) : ''; 271 272 272 273 if ( 'https://www.bing.com' === $allowed_hosts ) { … … 281 282 update_option( 'aicw_enable_img_generation', $enabled_img_gen ); 282 283 update_option( 'aicw_pexels_api_key', $pexels_api_key ); 284 update_option( 'aicw_log_retention_period', $log_retention_period ); 283 285 284 286 ai_content_writer()->flash_notice( esc_html__( 'Settings saved successfully.', 'ai-content-writer' ), 'success' ); -
ai-content-writer/trunk/includes/Admin/Admin.php
r3326474 r3363621 4 4 5 5 use AIContentWriter\Admin\ListTables\CampaignsListTable; 6 use AIContentWriter\Admin\ListTables\LogsListTable; 6 7 7 8 defined( 'ABSPATH' ) || exit; // Exit if accessed directly. … … 25 26 // Add Generate Content sub menu. 26 27 add_action( 'admin_menu', array( $this, 'generate_content_menu' ) ); 28 // Add Logs sub menu. 29 add_action( 'admin_menu', array( $this, 'logs_menu' ) ); 27 30 // Add Settings sub menu. 28 31 add_action( 'admin_menu', array( $this, 'settings_menu' ) ); … … 32 35 add_filter( 'set-screen-option', array( $this, 'screen_option' ), 10, 3 ); 33 36 // 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' ) ); 35 40 // Inject content in admin header. 36 41 add_action( 'in_admin_header', array( __CLASS__, 'in_admin_header' ) ); … … 95 100 96 101 // Load screen options. 97 add_action( 'load-' . $load, array( __CLASS__, 'load_ campaigns_page' ) );102 add_action( 'load-' . $load, array( __CLASS__, 'load_pages' ) ); 98 103 } 99 104 … … 113 118 array( $this, 'generate_content_page' ), 114 119 ); 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' ) ); 115 140 } 116 141 … … 164 189 array( 165 190 'aicw_campaigns_per_page', 191 'aicw_logs_per_page', 166 192 ) 167 193 ); … … 174 200 175 201 /** 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() { 182 208 $screen = get_current_screen(); 183 209 if ( 'ai-content-writer_page_aicw-campaigns' === $screen->id ) { … … 191 217 ); 192 218 } 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 } 193 230 } 194 231 … … 242 279 243 280 /** 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 /** 244 293 * Generate content page. 245 294 * … … 283 332 284 333 /** 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() { 291 340 if ( ! current_user_can( 'manage_options' ) ) { 292 341 ai_content_writer()->flash_notice( esc_html__( 'You do not have permission to perform this action.', 'ai-content-writer' ), 'error' ); … … 328 377 329 378 /** 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 /** 330 424 * Get screen ids. 331 425 * … … 337 431 'toplevel_page_ai-content-writer', 338 432 'ai-content-writer_page_aicw-campaigns', 433 'ai-content-writer_page_aicw-logs', 339 434 'ai-content-writer_page_aicw-settings', 340 435 'ai-content-writer_page_aicw-help', -
ai-content-writer/trunk/includes/Admin/ListTables/CampaignsListTable.php
r3249260 r3363621 14 14 * 15 15 * @since 1.0.0 16 * @package CoPilot\Admin\ListTables16 * @package AIContentWriter\Admin\ListTables 17 17 */ 18 18 class CampaignsListTable extends \WP_List_Table { -
ai-content-writer/trunk/includes/Admin/views/campaigns.php
r3326474 r3363621 25 25 $list_table->display(); 26 26 ?> 27 <input type="hidden" name="page" value=" campaigns">27 <input type="hidden" name="page" value="aicw-campaigns"> 28 28 </form> 29 29 </div> -
ai-content-writer/trunk/includes/Admin/views/settings.php
r3357556 r3363621 95 95 </div> 96 96 <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"> 97 120 <h3><?php esc_html_e( 'Miscellaneous Settings', 'ai-content-writer' ); ?></h3> 98 121 <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 139 139 // If the counter is greater than or equal to the target then break the loop. 140 140 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 ); 141 142 break; 142 143 } -
ai-content-writer/trunk/includes/Campaigns/RSSFeed.php
r3295814 r3363621 105 105 // If the counter is greater than or equal to the target then break the loop. 106 106 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 ); 107 108 break; 108 109 } -
ai-content-writer/trunk/includes/Cron.php
r3357556 r3363621 28 28 add_action( 'aicw_generate_thumbnail', array( __CLASS__, 'generate_thumbnails' ) ); 29 29 add_action( 'aicw_publish_posts', array( __CLASS__, 'publish_posts' ) ); 30 add_action( 'aicw_cleanup_logs', array( __CLASS__, 'cleanup_logs' ) ); 30 31 } 31 32 … … 58 59 if ( ! wp_next_scheduled( 'aicw_publish_posts' ) ) { 59 60 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' ); 60 66 } 61 67 } … … 186 192 // If the counter is greater than or equal to the target then break the loop. 187 193 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 ); 188 195 break; 189 196 } … … 193 200 aicw_update_last_run_time( $campaign_id ); 194 201 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. 197 203 } 198 204 } … … 277 283 // Check if the content is updated successfully or not. 278 284 if ( ! $is_updated ) { 279 // If the content is not updated then handle the it teration 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. 280 286 $attempts = get_post_meta( $post_id, '_aicw_generate_content_attempts', true ); 281 287 if ( empty( $attempts ) ) { … … 286 292 // Check if the attempts are greater than or equal to 2 then delete the post. 287 293 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 ); 288 295 wp_delete_post( $post_id, true ); 289 296 continue; … … 296 303 aicw_update_last_run_time( $post_id ); 297 304 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. 300 307 } 301 308 } … … 389 396 aicw_update_last_run_time( $post_id ); 390 397 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. 393 400 } 394 401 } … … 492 499 ); 493 500 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 ) ); 496 543 } 497 544 } -
ai-content-writer/trunk/includes/Plugin.php
r3357556 r3363621 457 457 } 458 458 } 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 } 459 489 } -
ai-content-writer/trunk/includes/PostTypes.php
r3249260 r3363621 20 20 add_action( 'init', array( $this, 'register_cpt' ) ); 21 21 add_action( 'init', array( $this, 'register_temp_cpt' ) ); 22 add_action( 'init', array( $this, 'register_log_cpt' ) ); 22 23 } 23 24 … … 113 114 register_post_type( 'aicw_post', apply_filters( 'aicw_temp_post_type_args', $args ) ); 114 115 } 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 } 115 162 } -
ai-content-writer/trunk/includes/functions.php
r3357556 r3363621 728 728 return false; 729 729 } 730 731 732 -
ai-content-writer/trunk/languages/ai-content-writer.pot
r3357556 r3363621 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: AI Content Writer 2.0. 5\n"5 "Project-Id-Version: AI Content Writer 2.0.6\n" 6 6 "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" 8 8 "MIME-Version: 1.0\n" 9 9 "Content-Type: text/plain; charset=utf-8\n" … … 26 26 27 27 #: includes/Admin/Actions.php:47 includes/Admin/Actions.php:146 28 #: includes/Admin/Actions.php:248 includes/Admin/Actions.php:30 029 #: includes/Admin/Actions.php:54 0 includes/Admin/Actions.php:59730 #: includes/Admin/Actions.php:64 0 includes/Admin/Admin.php:29231 #: includes/Admin/ Dashboard.php:3628 #: 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 32 32 msgid "You do not have permission to perform this action." 33 33 msgstr "" … … 53 53 msgstr "" 54 54 55 #: includes/Admin/Actions.php:160 includes/Admin/Actions.php:6 4955 #: includes/Admin/Actions.php:160 includes/Admin/Actions.php:651 56 56 msgid "Invalid campaign. Please try again." 57 57 msgstr "" … … 61 61 msgstr "" 62 62 63 #: includes/Admin/Actions.php:28 463 #: includes/Admin/Actions.php:286 64 64 msgid "Settings saved successfully." 65 65 msgstr "" 66 66 67 #: includes/Admin/Actions.php:3 08includes/Admin/views/generate-content.php:5967 #: includes/Admin/Actions.php:310 includes/Admin/views/generate-content.php:59 68 68 msgid "English" 69 69 msgstr "" 70 70 71 #: includes/Admin/Actions.php:31 5includes/Admin/views/generate-content.php:8171 #: includes/Admin/Actions.php:317 includes/Admin/views/generate-content.php:81 72 72 #: includes/Plugin.php:325 includes/functions.php:391 73 73 msgid "" … … 77 77 msgstr "" 78 78 79 #: includes/Admin/Actions.php:32 379 #: includes/Admin/Actions.php:325 80 80 msgid "Title is required. Please, start with \"Write an article on...\"" 81 81 msgstr "" 82 82 83 #: includes/Admin/Actions.php:3 2983 #: includes/Admin/Actions.php:331 84 84 msgid "Prompt type is required. Please, select the prompt type." 85 85 msgstr "" 86 86 87 #: includes/Admin/Actions.php:33 587 #: includes/Admin/Actions.php:337 88 88 msgid "Language is required. Please, select the language." 89 89 msgstr "" 90 90 91 #: includes/Admin/Actions.php:34 191 #: includes/Admin/Actions.php:343 92 92 msgid "Post type is required. Please, select the post type." 93 93 msgstr "" 94 94 95 #: includes/Admin/Actions.php:35 2includes/Plugin.php:23795 #: includes/Admin/Actions.php:354 includes/Plugin.php:237 96 96 msgid "" 97 97 "Please configure the API settings. A valid Gemini API key is required to " … … 99 99 msgstr "" 100 100 101 #: includes/Admin/Actions.php:43 1101 #: includes/Admin/Actions.php:433 102 102 msgid "" 103 103 "Please configure the API settings. A valid ChatGPT API secret key is " … … 105 105 msgstr "" 106 106 107 #: includes/Admin/Actions.php:4 39107 #: includes/Admin/Actions.php:441 108 108 #. translators: 1: Prompt Content, 2: System Tone, 3: Language, 4: Min Words 109 109 msgid "" … … 127 127 msgstr "" 128 128 129 #: includes/Admin/Actions.php:45 4includes/functions.php:415129 #: includes/Admin/Actions.php:456 includes/functions.php:415 130 130 msgid "The article should be optimized for SEO" 131 131 msgstr "" 132 132 133 #: includes/Admin/Actions.php:45 4includes/functions.php:415133 #: includes/Admin/Actions.php:456 includes/functions.php:415 134 134 msgid "The article should be optimized for SEO, including relevant keywords: " 135 135 msgstr "" 136 136 137 #: includes/Admin/Actions.php:48 1137 #: includes/Admin/Actions.php:483 138 138 msgid "Invalid API model. Please configure the API settings." 139 139 msgstr "" 140 140 141 #: includes/Admin/Actions.php:5 19 includes/Admin/Actions.php:524141 #: includes/Admin/Actions.php:521 includes/Admin/Actions.php:526 142 142 msgid "Content generated successfully." 143 143 msgstr "" 144 144 145 #: includes/Admin/Actions.php:5 49 includes/Admin/Actions.php:607145 #: includes/Admin/Actions.php:551 includes/Admin/Actions.php:609 146 146 msgid "Invalid post. Please try again." 147 147 msgstr "" 148 148 149 #: includes/Admin/Actions.php:55 5149 #: includes/Admin/Actions.php:557 150 150 msgid "Invalid image. Please select an image." 151 151 msgstr "" 152 152 153 #: includes/Admin/Actions.php:56 5153 #: includes/Admin/Actions.php:567 154 154 msgid "Invalid image URL. Please try again." 155 155 msgstr "" 156 156 157 #: includes/Admin/Actions.php:5 79157 #: includes/Admin/Actions.php:581 158 158 msgid "Content generated and featured image set successfully." 159 159 msgstr "" 160 160 161 #: includes/Admin/Actions.php:61 6161 #: includes/Admin/Actions.php:618 162 162 msgid "Post deleted successfully." 163 163 msgstr "" 164 164 165 #: includes/Admin/Actions.php:62 3165 #: includes/Admin/Actions.php:625 166 166 msgid "Failed to delete the post. Please try again." 167 167 msgstr "" 168 168 169 #: includes/Admin/Actions.php:6 58169 #: includes/Admin/Actions.php:660 170 170 msgid "Campaign not found. Please try again." 171 171 msgstr "" 172 172 173 #: includes/Admin/Actions.php:70 6173 #: includes/Admin/Actions.php:708 174 174 msgid "Campaign run successfully." 175 175 msgstr "" … … 179 179 msgstr "" 180 180 181 #: includes/Admin/Admin.php:6 1 includes/Admin/Admin.php:62181 #: includes/Admin/Admin.php:66 includes/Admin/Admin.php:67 182 182 #: includes/Admin/views/admin-header.php:43 183 183 #: includes/Admin/views/dashboard.php:14 … … 185 185 msgstr "" 186 186 187 #: includes/Admin/Admin.php: 89 includes/Admin/Admin.php:90187 #: includes/Admin/Admin.php:94 includes/Admin/Admin.php:95 188 188 #: includes/Admin/views/admin-header.php:48 189 189 #: includes/Admin/views/campaigns.php:15 … … 191 191 msgstr "" 192 192 193 #: includes/Admin/Admin.php:1 09 includes/Admin/Admin.php:110193 #: includes/Admin/Admin.php:114 includes/Admin/Admin.php:115 194 194 #: includes/Admin/views/generate-content.php:15 195 195 #: includes/Admin/views/generate-content.php:164 … … 197 197 msgstr "" 198 198 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 201 msgid "Logs" 202 msgstr "" 203 204 #: includes/Admin/Admin.php:151 includes/Admin/Admin.php:152 200 205 #: includes/Admin/views/admin-header.php:53 201 206 #: includes/Admin/views/dashboard.php:19 includes/Admin/views/settings.php:15 … … 205 210 msgstr "" 206 211 207 #: includes/Admin/Admin.php:1 43 includes/Admin/Admin.php:144212 #: includes/Admin/Admin.php:168 includes/Admin/Admin.php:169 208 213 #: includes/Admin/views/admin-header.php:58 209 214 #: includes/Admin/views/dashboard.php:22 includes/Admin/views/help.php:15 … … 211 216 msgstr "" 212 217 213 #: includes/Admin/Admin.php: 187218 #: includes/Admin/Admin.php:213 214 219 msgid "Campaigns per page" 215 220 msgstr "" 216 221 217 #: includes/Admin/Admin.php:317 222 #: includes/Admin/Admin.php:224 223 msgid "Logs per page" 224 msgstr "" 225 226 #: includes/Admin/Admin.php:366 includes/Admin/Admin.php:411 218 227 #. translators: %s: number of accounts. 219 228 msgid "%s item(s) deleted successfully." … … 221 230 222 231 #: includes/Admin/ListTables/CampaignsListTable.php:91 223 #: includes/PostTypes.php:4 5232 #: includes/PostTypes.php:46 224 233 msgid "No campaigns found." 225 234 msgstr "" … … 240 249 241 250 #: includes/Admin/ListTables/CampaignsListTable.php:107 251 #: includes/Admin/ListTables/LogsListTable.php:114 242 252 msgid "Date" 243 253 msgstr "" 244 254 245 255 #: includes/Admin/ListTables/CampaignsListTable.php:168 256 #: includes/Admin/ListTables/LogsListTable.php:174 246 257 #. translators: %d: key id. 247 258 msgid "ID: %d" … … 254 265 #: includes/Admin/ListTables/CampaignsListTable.php:170 255 266 #: includes/Admin/ListTables/CampaignsListTable.php:183 267 #: includes/Admin/ListTables/LogsListTable.php:175 268 #: includes/Admin/ListTables/LogsListTable.php:188 256 269 #: includes/Admin/views/edit-campaign.php:288 includes/functions.php:681 257 270 msgid "Delete" … … 262 275 #: includes/Admin/views/edit-campaign.php:329 263 276 msgid "Active" 277 msgstr "" 278 279 #: includes/Admin/ListTables/LogsListTable.php:98 includes/PostTypes.php:138 280 msgid "No logs found." 281 msgstr "" 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 287 msgid "Type" 288 msgstr "" 289 290 #: includes/Admin/ListTables/LogsListTable.php:112 291 msgid "Log" 292 msgstr "" 293 294 #: includes/Admin/ListTables/LogsListTable.php:113 295 msgid "Related Event" 264 296 msgstr "" 265 297 … … 345 377 #: includes/Admin/views/add-campaign.php:55 346 378 #: includes/Admin/views/edit-campaign.php:58 347 #: includes/Admin/views/settings.php:1 06379 #: includes/Admin/views/settings.php:129 348 380 msgid "Gemini" 349 381 msgstr "" … … 351 383 #: includes/Admin/views/add-campaign.php:56 352 384 #: includes/Admin/views/edit-campaign.php:59 353 #: includes/Admin/views/settings.php:1 07385 #: includes/Admin/views/settings.php:130 354 386 msgid "ChatGPT" 355 387 msgstr "" … … 605 637 msgstr "" 606 638 607 #: includes/Admin/views/add-campaign.php:251608 #: includes/Admin/views/edit-campaign.php:362609 #: includes/Admin/views/generate-content.php:110610 msgid "Type"611 msgstr ""612 613 639 #: includes/Admin/views/add-campaign.php:257 614 640 #: includes/Admin/views/edit-campaign.php:368 … … 660 686 msgstr "" 661 687 662 #: includes/Admin/views/campaigns.php:17 includes/PostTypes.php:3 8688 #: includes/Admin/views/campaigns.php:17 includes/PostTypes.php:39 663 689 msgid "Add New Campaign" 664 690 msgstr "" 665 691 666 #: includes/Admin/views/dashboard.php:16 includes/PostTypes.php:4 2692 #: includes/Admin/views/dashboard.php:16 includes/PostTypes.php:43 667 693 msgid "All Campaigns" 668 694 msgstr "" … … 704 730 msgstr "" 705 731 706 #: includes/Admin/views/edit-campaign.php:21 includes/PostTypes.php:4 0732 #: includes/Admin/views/edit-campaign.php:21 includes/PostTypes.php:41 707 733 msgid "Edit Campaign" 708 734 msgstr "" … … 760 786 761 787 #: includes/Admin/views/edit-campaign.php:354 762 #: includes/Admin/views/settings.php:1 49788 #: includes/Admin/views/settings.php:172 763 789 msgid "Save Changes" 764 790 msgstr "" … … 1110 1136 msgstr "" 1111 1137 1112 #: includes/Admin/views/help.php:117 includes/Admin/views/settings.php:1 581138 #: includes/Admin/views/help.php:117 includes/Admin/views/settings.php:181 1113 1139 msgid "Support" 1114 1140 msgstr "" 1115 1141 1116 #: includes/Admin/views/help.php:120 includes/Admin/views/settings.php:1 611142 #: includes/Admin/views/help.php:120 includes/Admin/views/settings.php:184 1117 1143 msgid "If you need help, please contact us." 1118 1144 msgstr "" 1119 1145 1120 #: includes/Admin/views/help.php:123 includes/Admin/views/settings.php:1 641146 #: includes/Admin/views/help.php:123 includes/Admin/views/settings.php:187 1121 1147 msgid "Contact Support" 1122 1148 msgstr "" 1123 1149 1124 #: includes/Admin/views/help.php:130 includes/Admin/views/settings.php:1 711150 #: includes/Admin/views/help.php:130 includes/Admin/views/settings.php:194 1125 1151 msgid "Our Popular Plugins" 1126 1152 msgstr "" 1127 1153 1128 #: includes/Admin/views/help.php:136 includes/Admin/views/settings.php: 1771154 #: includes/Admin/views/help.php:136 includes/Admin/views/settings.php:200 1129 1155 msgid "Send Emails – Newsletters, Automation & Email Marketing for WordPress" 1130 1156 msgstr "" 1131 1157 1132 #: includes/Admin/views/help.php:141 includes/Admin/views/settings.php: 1821158 #: includes/Admin/views/help.php:141 includes/Admin/views/settings.php:205 1133 1159 msgid "Essential Elements for WordPress" 1134 1160 msgstr "" 1135 1161 1136 #: includes/Admin/views/help.php:146 includes/Admin/views/settings.php: 1871162 #: includes/Admin/views/help.php:146 includes/Admin/views/settings.php:210 1137 1163 msgid "Shortcodes – Advanced Shortcode Manager" 1138 1164 msgstr "" 1139 1165 1140 #: includes/Admin/views/help.php:151 includes/Admin/views/settings.php: 1921166 #: includes/Admin/views/help.php:151 includes/Admin/views/settings.php:215 1141 1167 msgid "Post Showcase" 1142 1168 msgstr "" 1143 1169 1144 #: includes/Admin/views/help.php:156 includes/Admin/views/settings.php: 1971170 #: includes/Admin/views/help.php:156 includes/Admin/views/settings.php:220 1145 1171 msgid "SMS Manager – WooCommerce SMS Notifications" 1146 1172 msgstr "" 1147 1173 1148 #: includes/Admin/views/help.php:161 includes/Admin/views/settings.php:2 021174 #: includes/Admin/views/help.php:161 includes/Admin/views/settings.php:225 1149 1175 msgid "Invoice Payment" 1150 1176 msgstr "" … … 1267 1293 1268 1294 #: includes/Admin/views/settings.php:97 1295 msgid "Logs Settings" 1296 msgstr "" 1297 1298 #: includes/Admin/views/settings.php:101 1299 msgid "Log Retention Period:" 1300 msgstr "" 1301 1302 #: includes/Admin/views/settings.php:106 1303 msgid "Keep Forever" 1304 msgstr "" 1305 1306 #: includes/Admin/views/settings.php:107 1307 msgid "Daily" 1308 msgstr "" 1309 1310 #: includes/Admin/views/settings.php:108 1311 msgid "7 Days" 1312 msgstr "" 1313 1314 #: includes/Admin/views/settings.php:109 1315 msgid "15 Days" 1316 msgstr "" 1317 1318 #: includes/Admin/views/settings.php:110 1319 msgid "30 Days" 1320 msgstr "" 1321 1322 #: includes/Admin/views/settings.php:111 1323 msgid "60 Days" 1324 msgstr "" 1325 1326 #: includes/Admin/views/settings.php:112 1327 msgid "90 Days" 1328 msgstr "" 1329 1330 #: includes/Admin/views/settings.php:113 1331 msgid "180 Days" 1332 msgstr "" 1333 1334 #: includes/Admin/views/settings.php:114 1335 msgid "365 Days" 1336 msgstr "" 1337 1338 #: includes/Admin/views/settings.php:116 1339 msgid "" 1340 "Select the log retention period. Logs older than the selected period will " 1341 "be automatically deleted. Default is 30 days." 1342 msgstr "" 1343 1344 #: includes/Admin/views/settings.php:120 1269 1345 msgid "Miscellaneous Settings" 1270 1346 msgstr "" 1271 1347 1272 #: includes/Admin/views/settings.php: 981348 #: includes/Admin/views/settings.php:121 1273 1349 msgid "" 1274 1350 "The following options are the miscellaneous settings for the AI Content " … … 1276 1352 msgstr "" 1277 1353 1278 #: includes/Admin/views/settings.php:1 021354 #: includes/Admin/views/settings.php:125 1279 1355 msgid "API Model:" 1280 1356 msgstr "" 1281 1357 1282 #: includes/Admin/views/settings.php:1 091358 #: includes/Admin/views/settings.php:132 1283 1359 msgid "" 1284 1360 "Select the AI model to generate content using the instant content " … … 1286 1362 msgstr "" 1287 1363 1288 #: includes/Admin/views/settings.php:1 141364 #: includes/Admin/views/settings.php:137 1289 1365 msgid "Enable Image Generation:" 1290 1366 msgstr "" 1291 1367 1292 #: includes/Admin/views/settings.php:1 191368 #: includes/Admin/views/settings.php:142 1293 1369 msgid "Enable Thumbnail Image Generation" 1294 1370 msgstr "" 1295 1371 1296 #: includes/Admin/views/settings.php:1 211372 #: includes/Admin/views/settings.php:144 1297 1373 msgid "" 1298 1374 "Enable to activate the thumbnail image generation feature. AI generated " … … 1301 1377 msgstr "" 1302 1378 1303 #: includes/Admin/views/settings.php:1 261379 #: includes/Admin/views/settings.php:149 1304 1380 msgid "Enable Redirection:" 1305 1381 msgstr "" 1306 1382 1307 #: includes/Admin/views/settings.php:1 311383 #: includes/Admin/views/settings.php:154 1308 1384 msgid "Enable Redirection" 1309 1385 msgstr "" 1310 1386 1311 #: includes/Admin/views/settings.php:1 331387 #: includes/Admin/views/settings.php:156 1312 1388 msgid "" 1313 1389 "Enable to redirect to the edit page after successful generation of content " … … 1315 1391 msgstr "" 1316 1392 1317 #: includes/Cron.php:74 1393 #: includes/Campaigns/Articles.php:141 1394 #. translators: 1: Number of posts generated. 1395 msgid "%d posts titles and source links generated successfully." 1396 msgstr "" 1397 1398 #: includes/Campaigns/RSSFeed.php:107 1399 #. translators: 1: Number of posts generated. 1400 msgid "%d posts titles and source links generated from RSS feed." 1401 msgstr "" 1402 1403 #: includes/Cron.php:80 1318 1404 msgid "Every 15 Minutes" 1319 1405 msgstr "" 1320 1406 1321 #: includes/Cron.php: 781407 #: includes/Cron.php:84 1322 1408 msgid "Every 30 Minutes" 1409 msgstr "" 1410 1411 #: includes/Cron.php:194 1412 #. translators: 1: Number of posts created. 2: Campaign ID. 3: Campaign Title. 1413 msgid "Created %1$d posts for campaign ID %2$d with title \"%3$s\"." 1414 msgstr "" 1415 1416 #: includes/Cron.php:294 1417 #. translators: 1: Post ID. 2: Post Title. 1418 msgid "" 1419 "Failed to generate content for post ID %1$d with title \"%2$s\" after %3$d " 1420 "attempts. Deleting the post." 1421 msgstr "" 1422 1423 #: includes/Cron.php:305 1424 #. translators: 1: Post ID. 2: Post Title. 1425 msgid "Generated content for post ID %1$d with title \"%2$s\"." 1426 msgstr "" 1427 1428 #: includes/Cron.php:398 1429 #. translators: 1: Post ID. 2: Post Title. 1430 msgid "Generated thumbnail for post ID %1$d with title \"%2$s\"." 1431 msgstr "" 1432 1433 #: includes/Cron.php:501 1434 #. translators: 1: Post ID. 2: Post Title. 1435 msgid "Published post ID %1$d with title \"%2$s\"." 1436 msgstr "" 1437 1438 #: includes/Cron.php:542 1439 #. translators: 1: Number of logs deleted. 2: Retention period in days. 1440 msgid "Deleted %1$d logs older than %2$d days." 1323 1441 msgstr "" 1324 1442 … … 1347 1465 msgstr "" 1348 1466 1349 #: includes/PostTypes.php:39 1467 #: includes/Plugin.php:472 1468 msgid "Log message cannot be empty." 1469 msgstr "" 1470 1471 #: includes/PostTypes.php:40 1350 1472 msgid "New Campaign" 1351 1473 msgstr "" 1352 1474 1353 #: includes/PostTypes.php:4 11475 #: includes/PostTypes.php:42 1354 1476 msgid "View Campaign" 1355 1477 msgstr "" 1356 1478 1357 #: includes/PostTypes.php:4 31479 #: includes/PostTypes.php:44 1358 1480 msgid "Search Campaigns" 1359 1481 msgstr "" 1360 1482 1361 #: includes/PostTypes.php:4 41483 #: includes/PostTypes.php:45 1362 1484 msgid "Parent Campaigns:" 1363 1485 msgstr "" 1364 1486 1365 #: includes/PostTypes.php:4 61487 #: includes/PostTypes.php:47 1366 1488 msgid "No campaigns found in Trash." 1367 1489 msgstr "" 1368 1490 1369 #: includes/PostTypes.php:8 41491 #: includes/PostTypes.php:85 1370 1492 msgid "Add New Temporary Post" 1371 1493 msgstr "" 1372 1494 1373 #: includes/PostTypes.php:8 51495 #: includes/PostTypes.php:86 1374 1496 msgid "New Temporary Post" 1375 1497 msgstr "" 1376 1498 1377 #: includes/PostTypes.php:8 61499 #: includes/PostTypes.php:87 1378 1500 msgid "Edit Temporary Post" 1379 1501 msgstr "" 1380 1502 1381 #: includes/PostTypes.php:8 71503 #: includes/PostTypes.php:88 1382 1504 msgid "View Temporary Post" 1383 1505 msgstr "" 1384 1506 1385 #: includes/PostTypes.php:8 81507 #: includes/PostTypes.php:89 1386 1508 msgid "All Temporary Posts" 1387 1509 msgstr "" 1388 1510 1389 #: includes/PostTypes.php: 891511 #: includes/PostTypes.php:90 1390 1512 msgid "Search Temporary Posts" 1391 1513 msgstr "" 1392 1514 1393 #: includes/PostTypes.php:9 01515 #: includes/PostTypes.php:91 1394 1516 msgid "Parent Temporary Posts:" 1395 1517 msgstr "" 1396 1518 1397 #: includes/PostTypes.php:9 11519 #: includes/PostTypes.php:92 1398 1520 msgid "No temporary posts found." 1399 1521 msgstr "" 1400 1522 1401 #: includes/PostTypes.php:9 21523 #: includes/PostTypes.php:93 1402 1524 msgid "No temporary posts found in Trash." 1525 msgstr "" 1526 1527 #: includes/PostTypes.php:131 1528 msgid "Add New Log" 1529 msgstr "" 1530 1531 #: includes/PostTypes.php:132 1532 msgid "New Log" 1533 msgstr "" 1534 1535 #: includes/PostTypes.php:133 1536 msgid "Edit Log" 1537 msgstr "" 1538 1539 #: includes/PostTypes.php:134 1540 msgid "View Log" 1541 msgstr "" 1542 1543 #: includes/PostTypes.php:135 1544 msgid "All Logs" 1545 msgstr "" 1546 1547 #: includes/PostTypes.php:136 1548 msgid "Search Logs" 1549 msgstr "" 1550 1551 #: includes/PostTypes.php:137 1552 msgid "Parent Logs:" 1553 msgstr "" 1554 1555 #: includes/PostTypes.php:139 1556 msgid "No logs found in Trash." 1403 1557 msgstr "" 1404 1558 … … 1459 1613 msgstr "" 1460 1614 1461 #: includes/PostTypes.php:3 31615 #: includes/PostTypes.php:34 1462 1616 msgctxt "post type general name" 1463 1617 msgid "Campaigns" 1464 1618 msgstr "" 1465 1619 1466 #: includes/PostTypes.php: 791620 #: includes/PostTypes.php:80 1467 1621 msgctxt "post type general name" 1468 1622 msgid "Temporary Posts" 1469 1623 msgstr "" 1470 1624 1471 #: includes/PostTypes.php:34 1625 #: includes/PostTypes.php:126 1626 msgctxt "post type general name" 1627 msgid "Logs" 1628 msgstr "" 1629 1630 #: includes/PostTypes.php:35 1472 1631 msgctxt "post type singular name" 1473 1632 msgid "Campaign" 1474 1633 msgstr "" 1475 1634 1476 #: includes/PostTypes.php:8 01635 #: includes/PostTypes.php:81 1477 1636 msgctxt "post type singular name" 1478 1637 msgid "Temporary Post" 1479 1638 msgstr "" 1480 1639 1481 #: includes/PostTypes.php:35 1640 #: includes/PostTypes.php:127 1641 msgctxt "post type singular name" 1642 msgid "Log" 1643 msgstr "" 1644 1645 #: includes/PostTypes.php:36 1482 1646 msgctxt "admin menu" 1483 1647 msgid "Campaigns" 1484 1648 msgstr "" 1485 1649 1486 #: includes/PostTypes.php:8 11650 #: includes/PostTypes.php:82 1487 1651 msgctxt "admin menu" 1488 1652 msgid "Temporary Posts" 1489 1653 msgstr "" 1490 1654 1491 #: includes/PostTypes.php:36 1655 #: includes/PostTypes.php:128 1656 msgctxt "admin menu" 1657 msgid "Logs" 1658 msgstr "" 1659 1660 #: includes/PostTypes.php:37 1492 1661 msgctxt "add new on admin bar" 1493 1662 msgid "Campaign" 1494 1663 msgstr "" 1495 1664 1496 #: includes/PostTypes.php:8 21665 #: includes/PostTypes.php:83 1497 1666 msgctxt "add new on admin bar" 1498 1667 msgid "Temporary Post" 1499 1668 msgstr "" 1500 1669 1501 #: includes/PostTypes.php:37 1670 #: includes/PostTypes.php:129 1671 msgctxt "add new on admin bar" 1672 msgid "Log" 1673 msgstr "" 1674 1675 #: includes/PostTypes.php:38 1502 1676 msgctxt "campaign" 1503 1677 msgid "Add New" 1504 1678 msgstr "" 1505 1679 1506 #: includes/PostTypes.php:8 31680 #: includes/PostTypes.php:84 1507 1681 msgctxt "temporary post" 1508 1682 msgid "Add New" 1509 1683 msgstr "" 1684 1685 #: includes/PostTypes.php:130 1686 msgctxt "log" 1687 msgid "Add New" 1688 msgstr "" -
ai-content-writer/trunk/readme.txt
r3357556 r3363621 3 3 Tags: content writer, ai, content, writing, autoblog 4 4 Tested up to: 6.8 5 Stable tag: 2.0. 55 Stable tag: 2.0.6 6 6 License: GPLv2 or later 7 7 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 186 186 187 187 == 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 188 193 = 2.0.5 (8 September 2025) = 189 194 * 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 11 11 'AIContentWriter\\Admin\\Dashboard' => $baseDir . '/includes/Admin/Dashboard.php', 12 12 'AIContentWriter\\Admin\\ListTables\\CampaignsListTable' => $baseDir . '/includes/Admin/ListTables/CampaignsListTable.php', 13 'AIContentWriter\\Admin\\ListTables\\LogsListTable' => $baseDir . '/includes/Admin/ListTables/LogsListTable.php', 13 14 'AIContentWriter\\Admin\\Settings' => $baseDir . '/includes/Admin/Settings.php', 14 15 'AIContentWriter\\Campaigns\\Articles' => $baseDir . '/includes/Campaigns/Articles.php', -
ai-content-writer/trunk/vendor/composer/autoload_static.php
r3295814 r3363621 26 26 'AIContentWriter\\Admin\\Dashboard' => __DIR__ . '/../..' . '/includes/Admin/Dashboard.php', 27 27 'AIContentWriter\\Admin\\ListTables\\CampaignsListTable' => __DIR__ . '/../..' . '/includes/Admin/ListTables/CampaignsListTable.php', 28 'AIContentWriter\\Admin\\ListTables\\LogsListTable' => __DIR__ . '/../..' . '/includes/Admin/ListTables/LogsListTable.php', 28 29 'AIContentWriter\\Admin\\Settings' => __DIR__ . '/../..' . '/includes/Admin/Settings.php', 29 30 'AIContentWriter\\Campaigns\\Articles' => __DIR__ . '/../..' . '/includes/Campaigns/Articles.php', -
ai-content-writer/trunk/vendor/composer/installed.php
r3357556 r3363621 2 2 'root' => array( 3 3 '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', 7 7 'type' => 'wordpress-plugin', 8 8 'install_path' => __DIR__ . '/../../', … … 12 12 'versions' => array( 13 13 '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', 17 17 'type' => 'wordpress-plugin', 18 18 'install_path' => __DIR__ . '/../../',
Note: See TracChangeset
for help on using the changeset viewer.