Get the SQL object.
public static getSql ( ) : |
||
Результат |
/** * Delete dynamic field files * * @param int $fieldId * @param int $modelId * @param string $model * @param boolean $encrypt * @param Application $app * @param string $uploadFolder * @param string $mediaLibrary * @return void */ protected static function saveFiles($fieldId, $modelId, $model, $encrypt, $app, $uploadFolder, $mediaLibrary = null) { $field = T\Fields::findById($fieldId); if (isset($field->id)) { $time = time(); $newValues = []; $oldValues = new Record(); $oldValues->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name); $oldValues->findRecordsBy(['model_id' => $modelId, 'model' => $model], ['order' => 'id ASC']); $old = $oldValues->rows(false); foreach ($_FILES as $key => $file) { $id = substr_count($key, '_') == 2 ? substr($key, strrpos($key, '_') + 1) : 0; if (!empty($_FILES[$key]['tmp_name']) && !empty($_FILES[$key]['name'])) { if (null !== $mediaLibrary) { $library = new \Phire\Media\Model\MediaLibrary(); $library->getByFolder($mediaLibrary); if (isset($library->id)) { $settings = $library->getSettings(); $mediaUpload = new Upload($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/' . $library->folder, $settings['max_filesize'], $settings['disallowed_types'], $settings['allowed_types']); if ($mediaUpload->test($_FILES[$key])) { $media = new \Phire\Media\Model\Media(); $media->save($_FILES[$key], ['library_id' => $library->id]); $value = $media->file; if ($encrypt) { $value = (new Mcrypt())->create($value); } if (isset($old[$id])) { $replaceValue = new Record(); $replaceValue->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name); $replaceValue->findRecordById($old[$id]['id']); if (isset($replaceValue->id)) { $replaceValue->value = $value; $replaceValue->save(); if (file_exists($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $old[$id]['value'])) { unlink($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $old[$id]['value']); } if (file_exists($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/' . $library->folder . '/' . $old[$id]['value'])) { $media = new \Phire\Media\Model\Media(); $media->getByFile($old[$id]['value']); if (isset($media->id)) { $media->remove(['rm_media' => [$media->id]]); } } } } else { $newValues[] = $value; } copy($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/' . $library->folder . '/' . $media->file, $_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $media->file); } } } else { $upload = new Upload($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/', $app->module('phire-fields')->config()['max_size'], $app->module('phire-fields')->config()['disallowed_types'], $app->module('phire-fields')->config()['allowed_types']); $value = $upload->upload($_FILES[$key]); if ($encrypt) { $value = (new Mcrypt())->create($value); } if (isset($old[$id])) { $replaceValue = new Record(); $replaceValue->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name); $replaceValue->findRecordById($old[$id]['id']); if (isset($replaceValue->id)) { $replaceValue->value = $value; $replaceValue->save(); if (file_exists($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $old[$id]['value'])) { unlink($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $old[$id]['value']); } } } else { $newValues[] = $value; } } } } foreach ($newValues as $v) { if (!empty($v)) { $fv = new Record(['model_id' => $modelId, 'model' => $model, 'timestamp' => $time, 'revision' => 0, 'value' => $v]); $fv->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name); $fv->save(); $fvs = new Record(); $fvs->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name); $sql = $fvs->getSql(); $sql->update(['timestamp' => ':timestamp'])->where('model_id = :model_id')->where('model = :model'); $fvs->execute($sql, ['timestamp' => $time, 'model_id' => $modelId, 'model' => $model]); } } } }
/** * Remove any media files * * @param Application $application * @return void */ public static function removeMedia(Application $application) { $uploadFolder = BASE_PATH . CONTENT_PATH . '/files'; $mediaLibrary = $application->module('phire-fields')->config()['media_library']; if ($_POST && isset($_POST['rm_media']) && null !== $mediaLibrary && $application->isRegistered('phire-media')) { $media = new \Phire\Media\Model\Media(); $fields = Table\Fields::findBy(['type' => 'file']); $fieldIds = []; foreach ($fields->rows() as $field) { $fieldIds[$field->id] = $field->name; } foreach ($_POST['rm_media'] as $mid) { $media->getById($mid); if (isset($media->id) && !empty($media->file)) { $sql = Table\FieldValues::sql(); $sql->select()->where('value LIKE :value'); $fv = Table\FieldValues::execute((string) $sql, ['value' => '%"' . $media->file . '"%']); // Remove field value media files from EAV field table if ($fv->count() > 0) { if (file_exists($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $media->file)) { unlink($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $media->file); } foreach ($fv->rows() as $val) { $v = json_decode($val->value); if (is_array($v) && in_array($media->file, $v)) { $sql = Table\FieldValues::sql(); $sql->select()->where('field_id = :field_id')->where('model_id = :model_id')->where('value LIKE :value'); $f = Table\FieldValues::execute((string) $sql, ['field_id' => $val->field_id, 'model_id' => $val->model_id, 'value' => '%"' . $media->file . '"%']); if (isset($f->field_id)) { unset($v[array_search($media->file, $v)]); if (count($v) > 0) { $v = array_values($v); $f->value = json_encode($v); $f->save(); } else { $f->delete(); } } } else { $f = Table\FieldValues::findBy(['field_id' => $val->field_id, 'model_id' => $val->model_id, 'value' => '"' . $media->file . '"']); $f->delete(); } } } // Remove field value media files from field tables foreach ($fieldIds as $fieldId => $fieldName) { $fv = new Record(); $fv->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $fieldName); $sql = $fv->getSql(); $sql->select()->where('value LIKE :value'); $fv->executeStatement($sql, ['value' => '%"' . $media->file . '"%']); if ($fv->count() > 0) { if (file_exists($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $media->file)) { unlink($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $media->file); } foreach ($fv->rows() as $val) { $f = new Record(); $f->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('fields_' . $fieldName); $f->findRecordById($val->id); if (isset($f->id)) { $f->delete(); } } } } } } } }