-
Notifications
You must be signed in to change notification settings - Fork 2
Images
Plaristote edited this page Nov 9, 2015
·
5 revisions
void AvatarController::update()
{
const Params::File* avatar_file = params.get_upload("user[avatar]");
if (avatar_file)
response["status"] = 422;
else
set_avatar(avatar_file);
}
void AvatarController::set_avatar(const Crails::Params::File* file)
{
typedef odb::pgsql::query<User> query;
odb::pgsql::database& database = CRAILS_DATABASE(ODB, "main").get_database();
safe_ptr<User> user = database.query_one<User>(query::id == params["id"].as<unsigned long>());
if (user)
{
odb::transaction t(database.begin());
user->set_avatar(file);
database.persist(user);
t.commit();
}
else
reponse["status"] = 404;
}
User model
#ifndef USER_HPP
# define USER_HPP
# include <odb/core.hxx>
# include <crails/image.hpp>
# include <crails/params.hpp>
# pragma db object
class User
{
friend class odb::access;
class Avatar : Crails::BasicImage
{
public:
std::string get_default_image_path() const { return "/images/default_avatar.png"; }
void generate_thumbnails() { perform_crop("thumb", 200, 200, BasicImage::PreserveAspectRatio); }
};
public:
void set_avatar(const Crails::Params::File* file)
{
Avatar avatar(avatar_uid);
avatar.use_uploaded_file(file);
avatar.generate_thumbnails(); // you may want to do this in a task or thread, rather than during the client's request
}
std::string get_avatar_path(const std::string& transformation_name = "")
{
return (Avatar(avatar_uid)).get_path(transformation_name);
}
private:
#pragma db id auto
unsigned long id;
std::string avatar_uid;
}
#endif