Example #1
0
 /**
  * Сохранить инфомацию о файле в базу
  * @param Z_File_Storage_File $file
  * @return bool
  */
 public function save(Z_File_Storage_File $file)
 {
     $id = $file->get('id');
     if ($id == null) {
         $item = $this->getModel()->createRow($file->get());
     } else {
         $item = $this->getModel()->fetchRow(array('id=?' => $id));
         $item->setFromArray($file->get());
     }
     return $item->save();
 }
Example #2
0
    protected function renderCropped($crop_options)
    {
        $this->initCropoptions();
        $previews = $headers = $footer = '';
        $img = $this->getValue();
        //id обрезаемой картинки
        $layout = Zend_Layout::getMvcInstance();
        $view = $layout->getView();
        $sizes = $cropped_coord = null;
        $i = -1;
        $image_size = getimagesize($this->_file->getFullName());
        //размер обрезаемой картинки
        foreach ($crop_options as $copt) {
            //цикл нужен для того, чтобы выдать все возможные превью генерируемые по входной картинке например 200х150 на главной странице и 300х250 на внутренней
            $i++;
            if (!isset($copt['label']) || !$copt['label']) {
                continue;
            }
            if (!isset($copt['width']) || (int) $copt['width'] == 0) {
                continue;
            }
            if (!isset($copt['height']) || (int) $copt['height'] == 0) {
                continue;
            }
            $headers .= '<td rel="' . $i . '" class="h">' . $copt['label'] . '</td>';
            $image = $view->z_Preview($img, array('w' => $copt['width'], 'h' => $copt['height']), true);
            $hoverer = '<div class="hoverer" style="width:' . $copt['width'] . 'px;height:' . $copt['height'] . 'px;overflow:hidden;display:none;"><img src="' . $this->_file->getSiteName() . '"></div>';
            $previews .= '<td rel="' . $i . '" valign="middle">' . '<img id="init_preview" rel="' . $i . '" src="' . $image . '"/>' . $hoverer . '</td>';
            $footer .= '<td rel="' . $i . '"><a href="#" class="z-button ui-button ui-state-default ui-corner-all ui-button-text-only select_preview" rel="' . $i . '"><span class="ui-button-text">Изменить</span></a></td>';
            $cropped_coord = $this->getCroppedParamsFromCroppedFile($image);
            //анализирует имя обрезанного вручную файла и вычленяет параметры обрезки x,y - начальные координаты верхнего левого угла обрезки, w,h - высоту и ширину вырезаемой области,
            if (!$cropped_coord) {
                //если координаты не получены значит файл не является обрезанным вручную
                $cropped_coord = $this->getCroppedCoordinates($copt['width'], $copt['height'], $image_size[0], $image_size[1]);
            }
            //пытаемся получить параметры обрезки которые делаются в автоматическом режиме при вызове скрипта generatepreview.php
            $sorted_coord['x'] = $cropped_coord['x'];
            //порядок параметров очень важен
            $sorted_coord['y'] = $cropped_coord['y'];
            $sorted_coord['w'] = $cropped_coord['w'];
            $sorted_coord['h'] = $cropped_coord['h'];
            $sizes[] = "[" . $copt['width'] . "," . $copt['height'] . ",[" . str_replace(',', '.', implode('|', $sorted_coord)) . "]]";
            //[[100,50,[0,2.445,100.2,100.4]],[150,200,[0,3,400,500]]]; [ширина выходной картинки, высота выходной картинки [параметры обрезки в автоматическом режиме или в ручном если есть обрезанный файл с такой шириной и высотой]] замену , на . делаем потому что при конвертации в float (полученный из json серилизованного массива параметров обрезки), цифры имеют вид 100,2 а нам нужны точки
        }
        if (!$headers) {
            return '';
        }
        $sizes = str_replace('|', ',', $sizes);
        $js_sizes = '[' . implode(',', $sizes) . ']';
        //var_dump($js_sizes);
        $previews = '<table class="previews"><tr>' . $headers . '</tr><tr>' . $previews . '</tr><tr>' . $footer . '</tr></table>';
        jQuery::evalScript("\n\t\tvar sizes = " . $js_sizes . ";\n\t\tvar k = 0;\t\n  \t\t \$(function(){\n  \t\t  var sizes = " . $js_sizes . ";\n\t\t\t//initCropbox();\n\t\t\t\$(\".select_preview\").click(function(){\n\t\t\t\tvar rel = \$(this).attr('rel');\n\t\t\t\tvar r = parseInt(rel, 0);\n\t\t\t\tvar w =sizes[rel][0];\n\t\t\t\tvar h = sizes[rel][1]; \n\t\t\t\t\$(\"#thumb_w\").val(w);\n\t\t\t\t\$(\"#thumb_h\").val(h);\n\t\t\t\t\$(\".accordion\").attr('sel',r);\n\t\t\t\tk=r;\n\t\t\t\t\$(\".accordion\").show();\n\t\t\t\tvar selectr_img = \"img[rel!='\"+rel+\"']\";\n\t\t\t\tvar selectr_td = \"td[rel='\"+rel+\"']\";\n\t\t\t\t\$(\"table.previews\").find(\"img\").removeClass('opacity');\n\t\t\t\t\$(\"table.previews\").find(selectr_img).addClass('opacity');\n\t\t\t\t\$(\"table.previews\").find(\"td\").removeClass('selected');\n\t\t\t\tvar active_td = \$(\"table.previews\").find(selectr_td);\n\t\t\t\t\$(active_td).addClass('selected');\n\t\t\t\t\n\t\t\t\t\$(\"img#init_preview\").show();\n\t\t\t\t\$(active_td).find(\"img#init_preview\").hide();\n\t\t\t\t\$(\".hoverer\").hide();\n\t\t\t\tvar active_hoverer = \$(active_td).find(\".hoverer\");\n\t\t\t\t\$(active_hoverer).show();\n\t\t\t\t\$(active_hoverer).find(\"img\").removeClass('opacity');\n\t\t\t\t\$(\".hoverer\").find(\"img\").removeClass('preview');\n\t\t\t\t\$(active_hoverer).find(\"img\").addClass('preview');\n\t\t\t\t\n\t\t\t\t\$(this).parent().parent()\n\t\t\t\tinitCropbox();\n\t\t\t\t\$(\"#hoverer\").css({\n\t\t\t\t\twidth:w+'px',\n\t\t\t\t\theight:h+'px',\n\t\t\t\t\toverflow:'hidden'\n\t\t\t\t});\t\n\t\t\t\treturn false;\n\t\t\t});\n\t\t\t\n\t\t\t\$(\"#cancel\").click(function (){\n\t\t\t\t\$(\".accordion\").hide();\n\t\t\t\t\$(\"table.previews\").find(\"img\").removeClass('opacity');\n\t\t\t\t\$(\"table.previews\").find(\"td\").removeClass('selected');\n\t\t\t\tclearValues(true);\n\t\t\t\t\n\t\t\t})\n\t\t });\n\t\t\tfunction initCropbox(){\n\t\t\t\t\$(\"#cropbox\").Jcrop({\n\t\t\t\t\taspectRatio: sizes[k][0]/sizes[k][1],\n\t\t\t\t\tonChange: showPreview,\n\t\t\t\t\tonSelect: showPreview,\n\t\t\t\t\tonRelease: clearValues,\n\t\t\t\t\tsetSelect:sizes[k][2],\n\t\t\t\t\tboxWidth: 1000, \n\t\t\t\t\tboxHeight: 1000 ,\n\t\t\t\t\tbgOpacity: 0.4,\n\t\t\t\t\t\n\t\t\t\t});\n\t\t\t\tclearValues(false);\n\t\t\t}\t\t\nfunction clearValues(thumb_size){\n\t\$('#x').val('');\n\t\t\t\t\$('#y').val('');\n\t\t\t\t\$('#w').val('');\n\t\t\t\t\$('#h').val('');\n\tif(thumb_size){\n\t\t\$(\"#thumb_w\").val('');\n\t\t\$(\"#thumb_h\").val('');\n\t}\n\t\t\t\t\n}\t\t\t\nfunction showPreview(coords)\n{\n\tvar rx = sizes[k][0] / coords.w;\n\tvar ry = sizes[k][1] / coords.h;\n\n\t\$('.preview').css({\n\t\twidth: Math.round(rx * " . $image_size[0] . ") + 'px',\n\t\theight: Math.round(ry * " . $image_size[1] . ") + 'px',\n\t\tmarginLeft: '-' + Math.round(rx * coords.x) + 'px',\n\t\tmarginTop: '-' + Math.round(ry * coords.y) + 'px'\n\t});\n\t//updateCoords();\n\t\$('#x').val(coords.x);\n\t\t\t\t\$('#y').val(coords.y);\n\t\t\t\t\$('#w').val(coords.w);\n\t\t\t\t\$('#h').val(coords.h);\n}\n\t\t\tfunction updateCoords(c)\n\t\t\t{\n\t\t\t\t\$('#x').val(c.x);\n\t\t\t\t\$('#y').val(c.y);\n\t\t\t\t\$('#w').val(c.w);\n\t\t\t\t\$('#h').val(c.h);\n\t\t\t};\n\n    ");
        return $this->_style . '<br/>' . $previews . '<div class="accordion">
    			<div class="buttons_group z_form_buttons">
			<input type="submit" name="apply" id="apply" value="Вырезать" class="z-form-apply ui-button ui-state-default ui-corner-all z-button">
			<a href="#" id="cancel" class="z-button ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only">
				<span class="ui-button-text">Отмена</span>
			</a>
			</div>
        <img src="' . $this->_file->getSiteName() . '" id="cropbox"/>
			<input type="hidden" id="image" name="get_cropped_options[]" value="' . $this->getValue() . '"/>
			<input type="hidden" id="thumb_w" name="get_cropped_options[]" />
			<input type="hidden" id="thumb_h" name="get_cropped_options[]" />
			<input type="hidden" id="x" name="get_cropped_options[]" />
			<input type="hidden" id="y" name="get_cropped_options[]" />
			<input type="hidden" id="w" name="get_cropped_options[]" />
			<input type="hidden" id="h" name="get_cropped_options[]" />
		</div>';
    }