[add] assign and remove a tag to an entry

This commit is contained in:
Nicolas Lœuillet 2013-12-06 15:07:51 +01:00
parent f778e47283
commit c432fa1674
4 changed files with 68 additions and 4 deletions

View file

@ -289,4 +289,35 @@ class Database {
return $tags; return $tags;
} }
public function removeTagForEntry($entry_id, $tag_id) {
$sql_action = "DELETE FROM tags_entries WHERE tag_id=? AND entry_id=?";
$params_action = array($tag_id, $entry_id);
$query = $this->executeQuery($sql_action, $params_action);
return $query;
}
public function retrieveTagByValue($value) {
$tag = NULL;
$sql = "SELECT * FROM tags WHERE value=?";
$params = array($value);
$query = $this->executeQuery($sql, $params);
$tag = $query->fetchAll();
return isset($tag[0]) ? $tag[0] : null;
}
public function createTag($value) {
$sql_action = 'INSERT INTO tags ( value ) VALUES (?)';
$params_action = array($value);
$query = $this->executeQuery($sql_action, $params_action);
return $query;
}
public function setTagToEntry($tag_id, $entry_id) {
$sql_action = 'INSERT INTO tags_entries ( tag_id, entry_id ) VALUES (?, ?)';
$params_action = array($tag_id, $entry_id);
$query = $this->executeQuery($sql_action, $params_action);
return $query;
}
} }

View file

@ -397,6 +397,36 @@ class Poche
Tools::redirect(); Tools::redirect();
} }
break; break;
case 'add_tag' :
$tags = explode(',', $_POST['value']);
$entry_id = $_POST['entry_id'];
foreach($tags as $key => $tag_value) {
$value = trim($tag_value);
$tag = $this->store->retrieveTagByValue($value);
if (is_null($tag)) {
# we create the tag
$tag = $this->store->createTag($value);
$sequence = '';
if (STORAGE == 'postgres') {
$sequence = 'tags_id_seq';
}
$tag_id = $this->store->getLastId($sequence);
}
else {
$tag_id = $tag['id'];
}
# we assign the tag to the article
$this->store->setTagToEntry($tag_id, $entry_id);
}
Tools::redirect();
break;
case 'remove_tag' :
$tag_id = $_GET['tag_id'];
$this->store->removeTagForEntry($id, $tag_id);
Tools::redirect();
break;
default: default:
break; break;
} }
@ -434,6 +464,7 @@ class Poche
# tags # tags
$tags = $this->store->retrieveTagsByEntry($id); $tags = $this->store->retrieveTagsByEntry($id);
$tpl_vars = array( $tpl_vars = array(
'entry_id' => $id,
'tags' => $tags, 'tags' => $tags,
); );
break; break;

View file

@ -8,11 +8,13 @@
no tags no tags
{% endif %} {% endif %}
<ul> <ul>
{% for tag in tags %}<li>{{ tag.value }} <a href="#">✘</a></li>{% endfor %} {% for tag in tags %}<li>{{ tag.value }} <a href="./?action=remove_tag&amp;tag_id={{ tag.id }}&amp;id={{ entry_id }}">✘</a></li>{% endfor %}
</ul> </ul>
<form method="post" action="#"> <form method="post" action="./?action=add_tag">
<label for="value">New tags: </label><input type="text" id="value" name="value" required="required" /> <label for="value">New tags: </label><input type="text" id="value" name="value" required="required" />
{% trans "you can type several tags, separated by comma" %}<br /> <p>{% trans "you can type several tags, separated by comma" %}</p>
<input type="hidden" name="entry_id" value="{{ entry_id }}" />
<input type="submit" value="add tags" /> <input type="submit" value="add tags" />
</form> </form>
<a href="./?view=view&id={{ entry_id }}">{% trans "back to the article" %}</a>
{% endblock %} {% endblock %}

View file

@ -21,7 +21,7 @@
<h1>{{ entry.title|raw }}</h1> <h1>{{ entry.title|raw }}</h1>
</header> </header>
<aside class="tags"> <aside class="tags">
tags: {% for tag in tags %}<a href="#">{{ tag.value }}</a> {% endfor %}<a href="./?view=edit-tags&amp;id={{ entry.id|e }}" title="{% trans "edit tags" %}">✎</a> tags: {% for tag in tags %}<a href="./?view=tag&amp;id={{ tag.id }}">{{ tag.value }}</a> {% endfor %}<a href="./?view=edit-tags&amp;id={{ entry.id|e }}" title="{% trans "edit tags" %}">✎</a>
</aside> </aside>
<article> <article>
{{ content | raw }} {{ content | raw }}