public function uploadiconAction()
 {
     if ($datas = $this->getRequest()->getPost()) {
         try {
             $uploader = new Core_Model_Lib_Uploader();
             $file = $uploader->savecrop($datas);
             if (!empty($file)) {
                 $option_value = new Application_Model_Option_Value();
                 $option_value->find($datas['option_id']);
                 $lib = new Media_Model_Library();
                 $lib->find($option_value->getLibraryId());
                 $library_name = $lib->getName();
                 $formated_library_name = Core_Model_Lib_String::format($library_name, true);
                 $base_lib_path = Media_Model_Library_Image::getBaseImagePathTo($formated_library_name);
                 $files = Core_Model_Directory::getTmpDirectory(true) . '/' . $file;
                 $CanBeColorized = $datas['is_colorized'] == 'true' ? 1 : 0;
                 if (!is_dir($base_lib_path)) {
                     mkdir($base_lib_path, 0777, true);
                 }
                 if (!copy($files, $base_lib_path . '/' . $file)) {
                     throw new exception($this->_('An error occurred while saving your picture. Please try againg later.'));
                 } else {
                     $icon_lib = new Media_Model_Library_Image();
                     $icon_lib->setLibraryId($option_value->getLibraryId())->setLink('/' . $formated_library_name . '/' . $file)->setOptionId($option_value->getOptionId())->setAdminId($this->getSession()->getAdmin()->getId())->setCanBeColorized($CanBeColorized)->setPosition(0)->save();
                     $option_value->setIcon('/' . $formated_library_name . '/' . $file)->setIconId($icon_lib->getImageId())->save();
                     $icon_saved = $this->setIcon($icon_lib->getImageId(), $datas['option_id']);
                     // Charge l'option_value
                     $option_value = new Application_Model_Option_Value();
                     $option_value->find($datas['option_id']);
                     $icon_color = $this->getApplication()->getDesignBlock('tabbar')->getImageColor();
                     $html = array('success' => 1, 'file' => '/' . $formated_library_name . '/' . $file, 'icon_id' => $icon_lib->getImageId(), 'colorizable' => $CanBeColorized, 'icon_url' => Media_Model_Library_Image::getImagePathTo($formated_library_name . '/' . $file), 'colored_icon_url' => $this->getUrl('template/block/colorize', array('id' => $option_value->getIconId(), 'color' => str_replace('#', '', $icon_color))), 'colored_header_icon_url' => $icon_saved['colored_header_icon_url'], 'message' => '', 'message_button' => 1, 'message_loader' => 1);
                 }
             }
         } catch (Exception $e) {
             $html = array('message' => $e->getMessage(), 'message_button' => 1, 'message_loader' => 1);
         }
         $this->getLayout()->setHtml(Zend_Json::encode($html));
     }
 }
 public function saveAction()
 {
     if ($data = Zend_Json::decode($this->getRequest()->getRawBody())) {
         try {
             $previews = $data["previews"];
             $option_id = !empty($data["option_id"]) ? $data["option_id"] : null;
             $preview_id = !empty($data["preview_id"]) ? $data["preview_id"] : null;
             if (empty($previews)) {
                 throw new Exception($this->_("An error occurred while saving your previews. Please try again later."));
             }
             $preview = new Preview_Model_Preview();
             if (!empty($option_id) and empty($preview_id)) {
                 //No preview for this option yet, we create one if it doesn't exists.
                 $preview->find($option_id, "option_id");
                 if ($preview->getId()) {
                     throw new Exception($this->_("Sorry, but an existing preview for this feature has been found. Please edit existing one."));
                 }
                 $preview->setData("option_id", $option_id);
             } else {
                 //Existing preview
                 if (!empty($preview_id)) {
                     $preview->find($data["preview_id"]);
                 } else {
                     throw new Exception($this->_("An error occurred while saving your previews. Please try again later."));
                 }
             }
             $previews_language_data = array();
             foreach ($previews as $language_code => $data) {
                 $option = new Application_Model_Option();
                 $option->find($preview->getOptionId());
                 if ($preview->getId()) {
                     $library_id = $preview->findLibraryIdByLanguageCode($language_code);
                 } else {
                     $library_id = null;
                 }
                 if (!$library_id) {
                     $library = new Media_Model_Library();
                     $library->setName('preview_' . $language_code . '_' . $option->getCode())->save();
                     $data["library_id"] = $library->getId();
                 } else {
                     $data["library_id"] = $library_id;
                 }
                 //IMAGES------------------------------------------------
                 foreach ($data["images"] as $key => $image) {
                     $library_image = new Media_Model_Library_Image();
                     //We only copy new files
                     if ($image["new"] == 1) {
                         $old_path = Core_Model_Directory::getTmpDirectory(true);
                         $new_path = Core_Model_Directory::getBasePathTo("images/previews/" . $language_code . "/" . $option->getCode());
                         $new_path_base = Core_Model_Directory::getPathTo("images/previews/" . $language_code . "/" . $option->getCode());
                         if (!is_dir($new_path)) {
                             if (!@mkdir($new_path, 0777, true)) {
                                 throw new Exception($this->_("Unable to create the directory."));
                             }
                         }
                         if (!@rename($old_path . "/" . $image["filename"], $new_path . "/" . $image["filename"])) {
                             throw new Exception($this->_("Unable to copy the file."));
                         }
                         $data_image = array("library_id" => $data["library_id"], "link" => $new_path_base . "/" . $image["filename"], "can_be_colorized" => 0, "position" => $key);
                         $library_image->setData($data_image)->save();
                     } else {
                         //For existing images, we save position
                         $library_image->find($image["id"]);
                         if ($library_image->getImageId()) {
                             $library_image->setPosition($key)->save();
                         }
                     }
                     //We delete images to delete
                     if ($image["to_delete"] == 1 and $image["new"] == 0) {
                         if (!@unlink(Core_Model_Directory::getBasePathTo($image["link"]))) {
                             throw new Exception($this->_("Unable to delete the file."));
                         }
                         $library_image = new Media_Model_Library_Image();
                         $library_image->find($image["id"]);
                         $library_image->delete();
                     }
                 }
                 unset($data["images"]);
                 //<--IMAGES------------------------------------------------
                 unset($data["from_database"]);
                 $data['language_code'] = $language_code;
                 $data['preview_id'] = $preview->getId();
                 $previews_language_data[] = $data;
             }
             $preview->setLanguageData($previews_language_data);
             $preview->save();
             $data = array("success" => 1, "message" => $this->_("Preview successfully saved"));
         } catch (Exception $e) {
             $data = array("error" => 1, "message" => $e->getMessage());
         }
         $this->_sendHtml($data);
     }
 }