• أعضائنا الكرام بخصوص تنفيذ الطلبات قد يستغرق بعض الوقت،شكرا لحسن تفهمكم.
  • أعضاء وزوار معهد زين العربية، نود أن نعلمكم أن المعهد سيشهد في الفترة القادمة الكثير من التغيرات سواءا على المستوى الاداري او مستوى الاقسام، لذا نرجو منكم التعاون، وأي ملاحظات او استفسارات يرجى التواصل معنا عبر قسم الشكاوي و الإقتراحات و الطلبات ونشكركم على حسن تفهمكم وتعاونكم ،مع خالص الشكر والتقدير والاحترام من إدارة زين العربية.

[ تم الحل ] تغيير مسار المرفقات في مكتبة الميديا (المعرض)

الحالة
مغلق و غير مفتوح للمزيد من الردود.

Wolf Knight

:: الأعضاء ::
28 يناير 2019
504
1
188
63
السلام عليكم ورحمة الله وبركاته

عندي اضافة تسمح لي ان احفظ المرفقات في سيرفر خارجي غير سيرفر المنتدى
كل الخصائص تعمل بشكل ممتاز ما عدا مكتبة الميديا لا تعمل .. لم تتمكن من معرفة مسار سيرفر حفظ الملفات الخارجي
علما ان اضافة (المنتجات) تعمل بشكل طبيعي (بخصوص المرفقات).

كيف يمكن ان نعّرف مسار حفظ المرفقات المرفوعة على مكتبة الميديا ؟

ياريت نتعاون ونحل المشكلة

وشكرا لكم مقدما .
 
وعليكم السَلام ورحمة الله وبركاته
بالنسبة للفيديوهات أخي فيتم رفعها داخل مجلد باسم video
وهو يكون داخل المجلد الرئيسي المسمى data
وأعتقد نفس الشيء ينطبق على باقي ملفات الميديا
تحياتي
 
اخي الكريم ..
بشكل افتراضي فان الاضافة التي استخدمها حاليا والتي تسمح لي بحفظ الصور والملفات (المرفقات) في سيرفر خارجي غير سيرفر المنتدى تستخدم كود خاص بها في ملف config
وكل شي يعمل بشكل طبيعي في كافة اقسام المنتدى واضافاته ما عدا اضافة مكتبة الميديا .. لا تتعرف على مسار السيرفر الخارجي
وعليه فلا بد من ملف معين في الاضافة ذاتها يمكن التعديل على مسار حفظ المرفقات الخاصة بالمكتبة.
اتوقع اني مرة اعطيتك الاضافة صح؟
هل تعمل معك بشكل طبيعي مع مكتبة الميديا؟
 
اخي الكريم ..
بشكل افتراضي فان الاضافة التي استخدمها حاليا والتي تسمح لي بحفظ الصور والملفات (المرفقات) في سيرفر خارجي غير سيرفر المنتدى تستخدم كود خاص بها في ملف config
وكل شي يعمل بشكل طبيعي في كافة اقسام المنتدى واضافاته ما عدا اضافة مكتبة الميديا .. لا تتعرف على مسار السيرفر الخارجي
وعليه فلا بد من ملف معين في الاضافة ذاتها يمكن التعديل على مسار حفظ المرفقات الخاصة بالمكتبة.
اتوقع اني مرة اعطيتك الاضافة صح؟
هل تعمل معك بشكل طبيعي مع مكتبة الميديا؟
بصراحة لا استخدم الميديا لدي لذا لا أعرف
طيب ما هو المجلد الذي تتعرف منه الإضافة على الملفات ثم تقوم برفعها إلى السرفر الآخر
 
هذا هو الكود المسؤول عن المرفقات
وأعتقد منه يتم التعديل لو احتجنا للتعديل

PHP:
<?php

namespace XFMG\Attachment;

use XF\Attachment\AbstractHandler;
use XF\Entity\Attachment;
use XF\Mvc\Entity\Entity;

class Media extends AbstractHandler
{
    public function canView(Attachment $attachment, Entity $container, &$error = null)
    {
        /** @var \XFMG\Entity\MediaItem $container */
        return $container->canView();
    }

    public function canManageAttachments(array $context, &$error = null)
    {
        $em = \XF::em();

        /** @var \XFMG\XF\Entity\User $visitor */
        $visitor = \XF::visitor();

        if (!empty($context['media_id']))
        {
            /** @var \XFMG\Entity\MediaItem $mediaItem */
            $mediaItem = $em->find('XFMG:MediaItem', intval($context['media_id']));
            if (!$mediaItem || !$mediaItem->canView() || !$mediaItem->canEdit())
            {
                return false;
            }
        }
        else if (!empty($context['category_id']))
        {
            /** @var \XFMG\Entity\Category $category */
            $category = $em->find('XFMG:Category', intval($context['category_id']));
            if (!$category || !$category->canView() || !$category->canAddMedia())
            {
                return false;
            }
        }
        else if (!empty($context['album_id']))
        {
            /** @var \XFMG\Entity\Album $album */
            $album = $em->find('XFMG:Album', intval($context['album_id']));
            if (!$album || !$album->canView() || !$album->canAddMedia())
            {
                return false;
            }
        }
        else
        {
            // Uploading but not created an album yet.
            return $visitor->canCreateAlbum();
        }

        return true;
    }

    public function validateAttachmentUpload(\XF\Http\Upload $upload, \XF\Attachment\Manipulator $manipulator)
    {
        if (!$upload->getTempFile())
        {
            return;
        }

        $extension = $upload->getExtension();

        /** @var \XFMG\Repository\Media $repo */
        $repo = \XF::repository('XFMG:Media');

        $mediaType = $repo->getMediaTypeFromExtension($extension);

        if ($mediaType == 'video')
        {
            $videoInfo = new \XFMG\VideoInfo\Preparer($upload->getTempFile());
            $result = $videoInfo->getInfo();

            $requiresTranscoding = (!$result->isValid() || $result->requiresTranscoding());
        }
        else if ($mediaType == 'audio')
        {
            /** @var \XFMG\Service\Media\MP3Detector $MP3Detector */
            $MP3Detector = \XF::service('XFMG:Media\MP3Detector', $upload->getTempFile());

            $requiresTranscoding = ($MP3Detector->isValidMP3() ? false : true);
        }
        else
        {
            $requiresTranscoding = false;
        }

        if ($requiresTranscoding)
        {
            $ffmpegOptions = \XF::options()->xfmgFfmpeg;
            if (!$ffmpegOptions['ffmpegPath'] || !$ffmpegOptions['transcode'])
            {
                $upload->logError('xfmgCannotTranscode', \XF::phrase('xfmg_this_file_is_not_encoded_in_supported_format_and_cannot_be_transcoded'));
            }
        }

        if (in_array($mediaType, ['audio', 'image', 'video']))
        {
            $visitor = \XF::visitor();
            $constraints = $manipulator->getConstraints();

            $thisFileSize = $runningTotal = $upload->getFileSize();
            $newAttachments = $manipulator->getNewAttachments();
            if (count($newAttachments))
            {
                foreach ($newAttachments AS $attachment)
                {
                    /** @var \XF\Entity\Attachment $attachment */
                    $runningTotal += intval($attachment->getFileSize());
                }
            }

            $totalSize = $constraints['total'];
            $userQuota = $visitor->xfmg_media_quota;

            if ($totalSize !== PHP_INT_MAX && ($userQuota + $runningTotal > $totalSize))
            {
                // calculate remaining quota, minus the file that tipped it over the limit.
                $fileSize = \XF::language()->fileSizeFormat($thisFileSize);
                $remaining = \XF::language()->fileSizeFormat($totalSize - $userQuota - $runningTotal + $thisFileSize);
                $upload->logError('xfmgStorageExceeded', \XF::phrase('xfmg_file_you_have_uploaded_is_x_which_exceeds_your_storage_quota', ['size' => $fileSize, 'remaining' => $remaining]));
            }
        }
    }

    public function onNewAttachment(Attachment $attachment, \XF\FileWrapper $file)
    {
        /** @var \XFMG\Service\Media\TempCreator $tempCreator */
        $tempCreator = \XF::app()->service('XFMG:Media\TempCreator');
        $tempCreator->setAttachment($attachment);
        if ($file->getExif())
        {
            $tempCreator->setExif($file->getExif());
        }
        $tempCreator->save();
    }

    public function prepareAttachmentJson(Attachment $attachment, array $context, array $json)
    {
        $em = \XF::em();

        /** @var \XFMG\Entity\MediaTemp $tempMedia */
        $tempMedia = $em->findOne('XFMG:MediaTemp', ['attachment_id' => $attachment->attachment_id]);

        if (!$tempMedia)
        {
            return $json;
        }

        $json['attachment'] += [
            'temp_media_id' => $tempMedia->temp_media_id,
            'media_hash' => $tempMedia->media_hash,
            'media_type' => $tempMedia->media_type,
            'temp_thumbnail_url' => $tempMedia->temp_thumbnail_url,
            'thumbnail_date' => $tempMedia->thumbnail_date,
            'title' => $tempMedia->title,
            'description' => $tempMedia->description,
            'requires_transcoding' => $tempMedia->requires_transcoding
        ];
        return $json;
    }

    public function onAssociation(Attachment $attachment, Entity $container = null)
    {
        /** @var \XFMG\Entity\MediaTemp $tempMedia */
        $tempMedia = \XF::em()->findOne('XFMG:MediaTemp', ['attachment_id' => $attachment->attachment_id]);

        /** @var \XFMG\Entity\MediaItem $container */
        if (!$container)
        {
            $tempMedia->delete();
            return;
        }

        if ($tempMedia->thumbnail_date)
        {
            $tempThumbPath = $tempMedia->getAbstractedTempThumbnailPath();
            $mediaThumbPath = $container->getAbstractedThumbnailPath();

            $tempFile = \XF\Util\File::copyAbstractedPathToTempFile($tempThumbPath);
            \XF\Util\File::copyFileToAbstractedPath($tempFile, $mediaThumbPath);

            $container->fastUpdate('thumbnail_date', $tempMedia->thumbnail_date);

            \XF\Util\File::deleteFromAbstractedPath($tempThumbPath);
        }

        $updatePath = false;

        if ($container->media_type == 'video')
        {
            $updatePath = 'data://xfmg/video/%FLOOR%/%DATA_ID%-%HASH%.mp4';
        }
        else if ($container->media_type == 'audio')
        {
            $updatePath = 'data://xfmg/audio/%FLOOR%/%DATA_ID%-%HASH%.mp3';
        }

        if ($updatePath)
        {
            $oldPath = $container->getAbstractedDataPath();
            $attachment->Data->fastUpdate('file_path', $updatePath);
            $newPath = $container->getAbstractedDataPath();

            \XF::fs()->move($oldPath, $newPath);
        }

        $tempMedia->delete();

        if ($container->canAddWatermark(false) && !$container->canAddMediaWithoutWatermark())
        {
            /** @var \XFMG\Repository\Media $mediaRepo */
            $mediaRepo = \XF::repository('XFMG:Media');
            $tempWatermark = $tempWatermark = $mediaRepo->getWatermarkAsTempFile();

            /** @var \XFMG\Service\Media\Watermarker $watermarker */
            $watermarker = \XF::service('XFMG:Media\Watermarker', $container, $tempWatermark);
            $watermarker->watermark();
        }
    }

    public function onAttachmentDelete(Attachment $attachment, Entity $container = null)
    {
        if (!$container)
        {
            return;
        }

        $container->delete(false);
    }

    public function getConstraints(array $context)
    {
        $em = \XF::em();

        if (!empty($context['media_id']))
        {
            /** @var \XFMG\Entity\MediaItem $mediaItem */
            $mediaItem = $em->find('XFMG:MediaItem', intval($context['media_id']));
            return $mediaItem->getAttachmentConstraints();
        }
        else if (!empty($context['category_id']))
        {
            /** @var \XFMG\Entity\Category $category */
            $category = $em->find('XFMG:Category', intval($context['category_id']));
            return $category->getAttachmentConstraints();
        }
        else if (!empty($context['album_id']))
        {
            /** @var \XFMG\Entity\Album $album */
            $album = $em->find('XFMG:Album', intval($context['album_id']));
            return $album->getAttachmentConstraints();
        }
        else
        {
            // no context will mean we're in the proces of creating an album

            /** @var \XFMG\Entity\Album $album */
            $album = $em->create('XFMG:Album');
            return $album->getAttachmentConstraints();
        }
    }

    public function getContainerIdFromContext(array $context)
    {
        return isset($context['media_id']) ? intval($context['media_id']) : null;
    }

    public function getContainerLink(Entity $container, array $extraParams = [])
    {
        return \XF::app()->router('public')->buildLink('media', $container, $extraParams);
    }

    public function getContext(Entity $entity = null, array $extraContext = [])
    {
        if ($entity instanceof \XFMG\Entity\MediaItem)
        {
            $extraContext['media_id'] = $entity->media_id;
        }
        else if ($entity instanceof \XFMG\Entity\Album)
        {
            $extraContext['album_id'] = $entity->album_id;
        }
        else if ($entity instanceof \XFMG\Entity\Category)
        {
            $extraContext['category_id'] = $entity->category_id;
        }
        else if (!$entity)
        {
            // need nothing
        }
        else
        {
            throw new \InvalidArgumentException("Entity must be media, album or category");
        }

        return $extraContext;
    }
}
 
ياريت لو تعرف اي كود منهم الخاص بمسار المرفقات والي يتم استبداله بمسار السيرفر الخارجي .. ياريت توضحه لي
لك كل الود
انا قمت بالتعديل على الملف الآن لمحاولة تغيير مسار المرفقات
سوف أجربه الآن وأخبرك نجح أو لا
ثوان وراجع لحضرتك :)
 
السلام عليكم ورحمة الله وبركاته ،،
أستاذ @SAEED M SALLAM, تم غلق الموضوع لأحد الأسباب التالية:
  1. تم حل المشكلة أو تلبية الطلب و الحمد لله.
  2. بقاء الموضوع لمدة 3 أيام بدون الرد عليه أو وجود إشارة تدل على رجوع العضو إليه.
  3. لا يوجد حل لهذه المشكلة (إذا وجد الحل سوف يتم إعادة فتح الموضوع).
عزيزي العضو حرصا على عدم تداخل المواضيع ببعضها وبالتالي صعوبة إستخدام عملية البحث بالنسبة للأعضاء قررت إدارة المعهد بإغلاق المواضيع التي تتوافق مع الأسباب السابقة. بإمكانك بدأ موضوع جديد أو مراسلة أحد المشرفين إن كنت متأكد من رغبتك في الإستمرار ليتم فتج الموضوع من جديد.


مع خالص الإحترام و التقدير
إدارة زين العربية
 
الحالة
مغلق و غير مفتوح للمزيد من الردود.

إحصائيات المنتدى

المواضيع
1,544
المشاركات
17,544
الأعضاء
1,103
آخر عضو مسجل
mcartier
أعلى