Files
seo/otoolkit_seo_content/views/seo_content_idea_views.xml

333 lines
18 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- SEO Content Idea List View -->
<record id="otk_seo_content_idea_view_tree" model="ir.ui.view">
<field name="name">otk.seo.content.idea.list</field>
<field name="model">otk.seo.content.idea</field>
<field name="arch" type="xml">
<list string="Content Ideas"
decoration-info="state == 'idea'"
decoration-warning="state == 'scheduled'"
decoration-success="state == 'done'"
decoration-danger="state == 'failed'"
decoration-muted="state == 'cancelled'">
<field name="priority" widget="priority"/>
<field name="name"/>
<field name="content_type"/>
<field name="keywords" optional="show"/>
<field name="is_recurring" string="Rec." widget="boolean" optional="show"/>
<field name="scheduled_date"/>
<field name="state" widget="badge"
decoration-info="state == 'idea'"
decoration-warning="state in ('scheduled', 'generating')"
decoration-success="state == 'done'"
decoration-danger="state == 'failed'"
decoration-muted="state == 'cancelled'"/>
<field name="content_id" optional="show"/>
<button name="action_generate_now" type="object"
string="Generate Now" icon="fa-bolt"
invisible="state not in ('idea', 'scheduled')"/>
</list>
</field>
</record>
<!-- SEO Content Idea Form View -->
<record id="otk_seo_content_idea_view_form" model="ir.ui.view">
<field name="name">otk.seo.content.idea.form</field>
<field name="model">otk.seo.content.idea</field>
<field name="arch" type="xml">
<form string="Content Idea">
<header>
<button name="action_schedule_now" type="object"
string="Schedule Now" class="oe_highlight"
invisible="state != 'idea'"/>
<button name="action_generate_now" type="object"
string="Generate Now" class="oe_highlight"
invisible="state not in ('idea', 'scheduled')"/>
<button name="action_cancel" type="object"
string="Cancel"
invisible="state not in ('idea', 'scheduled')"/>
<button name="action_reset_to_idea" type="object"
string="Reset to Idea"
invisible="state not in ('failed', 'cancelled')"/>
<field name="state" widget="statusbar"
statusbar_visible="idea,scheduled,generating,done"/>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button name="action_view_content" type="object"
class="oe_stat_button" icon="fa-file-text-o"
invisible="not content_id">
<span class="o_stat_text">View Content</span>
</button>
</div>
<widget name="web_ribbon" title="Failed"
bg_color="text-bg-danger" invisible="state != 'failed'"/>
<widget name="web_ribbon" title="Cancelled"
bg_color="text-bg-secondary" invisible="state != 'cancelled'"/>
<div class="oe_title">
<h1>
<field name="name" placeholder="Content idea title or topic..."
readonly="state not in ('idea', 'scheduled')"/>
</h1>
</div>
<group>
<group string="Idea Details">
<field name="priority" widget="priority"/>
<field name="keywords" placeholder="target, keywords, here"
readonly="state not in ('idea', 'scheduled')"/>
<field name="topic_brief" placeholder="Describe what the content should cover..."
readonly="state not in ('idea', 'scheduled')"/>
<field name="product_id"
readonly="state not in ('idea', 'scheduled')"/>
<field name="reference_ids" widget="many2many_tags"
readonly="state not in ('idea', 'scheduled')"/>
</group>
<group string="Schedule">
<field name="scheduled_date"
readonly="state not in ('idea', 'scheduled')"/>
<field name="generated_at" readonly="1"
invisible="state != 'done'"/>
</group>
</group>
<notebook>
<page string="Generation Settings" name="settings">
<group>
<group>
<field name="content_type"
readonly="state not in ('idea', 'scheduled')"/>
<field name="template_id"
domain="[('content_type', '=', content_type)]"
readonly="state not in ('idea', 'scheduled')"/>
<field name="brand_voice_id"
readonly="state not in ('idea', 'scheduled')"/>
</group>
<group>
<field name="tone"
readonly="state not in ('idea', 'scheduled')"/>
<field name="target_word_count"
readonly="state not in ('idea', 'scheduled')"/>
<field name="language_id"
readonly="state not in ('idea', 'scheduled')"/>
</group>
</group>
</page>
<page string="Images" name="images">
<group>
<group>
<field name="include_images"
readonly="state not in ('idea', 'scheduled')"/>
<field name="image_count"
invisible="not include_images"
readonly="state not in ('idea', 'scheduled')"/>
<field name="image_style"
invisible="not include_images"
readonly="state not in ('idea', 'scheduled')"/>
</group>
</group>
</page>
<page string="Recurring" name="recurring">
<group>
<group>
<field name="is_recurring"
readonly="state not in ('idea', 'scheduled')"/>
<field name="recurrence_type"
invisible="not is_recurring"
readonly="state not in ('idea', 'scheduled')"/>
<field name="recurrence_end_date"
invisible="not is_recurring"
readonly="state not in ('idea', 'scheduled')"/>
</group>
<group>
<field name="parent_idea_id" readonly="1"
invisible="not parent_idea_id"/>
</group>
</group>
<div class="alert alert-info" role="alert"
invisible="not is_recurring">
<i class="fa fa-repeat" title="Recurring"/>
<strong> Recurring Idea:</strong>
A new idea will automatically be created and scheduled
after this one is processed.
</div>
</page>
<page string="Auto-Publish" name="publish">
<group>
<group>
<field name="auto_create_blog_post"
readonly="state not in ('idea', 'scheduled')"/>
<field name="blog_id"
invisible="not auto_create_blog_post"
readonly="state not in ('idea', 'scheduled')"/>
<field name="auto_publish"
invisible="not auto_create_blog_post"
readonly="state not in ('idea', 'scheduled')"/>
</group>
</group>
<div class="alert alert-warning" role="alert"
invisible="not auto_publish">
<i class="fa fa-exclamation-triangle" title="Auto-Publish"/>
<strong>Auto-Publish Enabled:</strong>
Content will be automatically published to your website when generated.
Make sure you review scheduled ideas before their scheduled time.
</div>
</page>
<page string="Result" name="result" invisible="state not in ('done', 'failed')">
<group>
<group>
<field name="content_id" readonly="1"/>
<field name="blog_post_id" readonly="1"/>
</group>
<group>
<field name="generated_at" readonly="1"/>
</group>
</group>
<group string="Error Details" invisible="state != 'failed'">
<field name="error_message" readonly="1" nolabel="1"/>
</group>
</page>
</notebook>
</sheet>
<chatter/>
</form>
</field>
</record>
<!-- SEO Content Idea Search View -->
<record id="otk_seo_content_idea_view_search" model="ir.ui.view">
<field name="name">otk.seo.content.idea.search</field>
<field name="model">otk.seo.content.idea</field>
<field name="arch" type="xml">
<search string="Search Ideas">
<field name="name"/>
<field name="keywords"/>
<separator/>
<filter name="filter_ideas" string="Ideas"
domain="[('state', '=', 'idea')]"/>
<filter name="filter_scheduled" string="Scheduled"
domain="[('state', '=', 'scheduled')]"/>
<filter name="filter_done" string="Completed"
domain="[('state', '=', 'done')]"/>
<filter name="filter_failed" string="Failed"
domain="[('state', '=', 'failed')]"/>
<separator/>
<filter name="filter_high_priority" string="High Priority"
domain="[('priority', 'in', ('2', '3'))]"/>
<filter name="filter_auto_publish" string="Auto-Publish"
domain="[('auto_publish', '=', True)]"/>
<separator/>
<filter name="filter_my_ideas" string="My Ideas"
domain="[('create_uid', '=', uid)]"/>
<group>
<filter name="group_state" string="Status"
context="{'group_by': 'state'}"/>
<filter name="group_type" string="Content Type"
context="{'group_by': 'content_type'}"/>
<filter name="group_priority" string="Priority"
context="{'group_by': 'priority'}"/>
<filter name="group_scheduled" string="Scheduled Date"
context="{'group_by': 'scheduled_date:day'}"/>
</group>
</search>
</field>
</record>
<!-- SEO Content Idea Kanban View -->
<record id="otk_seo_content_idea_view_kanban" model="ir.ui.view">
<field name="name">otk.seo.content.idea.kanban</field>
<field name="model">otk.seo.content.idea</field>
<field name="arch" type="xml">
<kanban default_group_by="state" class="o_kanban_small_column">
<field name="name"/>
<field name="state"/>
<field name="priority"/>
<field name="scheduled_date"/>
<field name="content_type"/>
<field name="auto_publish"/>
<progressbar field="state"
colors='{"idea": "info", "scheduled": "warning", "generating": "warning", "done": "success", "failed": "danger", "cancelled": "muted"}'/>
<templates>
<t t-name="card">
<div class="oe_kanban_card oe_kanban_global_click">
<div class="oe_kanban_content">
<div class="o_kanban_record_title d-flex align-items-center">
<field name="priority" widget="priority" class="me-2"/>
<strong class="text-truncate"><field name="name"/></strong>
</div>
<div class="o_kanban_record_body">
<field name="content_type"/>
<t t-if="record.scheduled_date.raw_value">
<br/>
<span class="text-muted">
<i class="fa fa-clock-o" title="Scheduled Date"/> <field name="scheduled_date"/>
</span>
</t>
</div>
<div class="o_kanban_record_bottom mt-2">
<div class="oe_kanban_bottom_left">
<t t-if="record.auto_publish.raw_value">
<span class="badge text-bg-warning" title="Auto-Publish">
<i class="fa fa-globe"/>
</span>
</t>
</div>
<div class="oe_kanban_bottom_right">
<field name="state" widget="label_selection"
options="{'classes': {'idea': 'info', 'scheduled': 'warning', 'generating': 'warning', 'done': 'success', 'failed': 'danger', 'cancelled': 'secondary'}}"/>
</div>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<!-- SEO Content Idea Calendar View -->
<record id="otk_seo_content_idea_view_calendar" model="ir.ui.view">
<field name="name">otk.seo.content.idea.calendar</field>
<field name="model">otk.seo.content.idea</field>
<field name="arch" type="xml">
<calendar string="Scheduled Ideas" date_start="scheduled_date"
color="priority" mode="month" quick_create="0"
event_open_popup="true">
<field name="name"/>
<field name="content_type"/>
<field name="keywords"/>
<field name="state"/>
<field name="auto_publish"/>
<field name="is_recurring"/>
</calendar>
</field>
</record>
<!-- Action -->
<record id="action_otk_seo_content_idea" model="ir.actions.act_window">
<field name="name">Ideas Queue</field>
<field name="res_model">otk.seo.content.idea</field>
<field name="view_mode">kanban,list,form,calendar</field>
<field name="search_view_id" ref="otk_seo_content_idea_view_search"/>
<field name="context">{'search_default_filter_ideas': 1, 'search_default_filter_scheduled': 1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Add your first content idea!
</p>
<p>
Create content ideas and schedule them for automatic generation.
Ideas can include keywords, topic briefs, and publishing settings.
</p>
</field>
</record>
</odoo>