Giter VIP home page Giter VIP logo

data-hub's Introduction

Pimcore - Own the digital World

Pimcore Core Framework - Open Source Data & Experience Management Platform: PIM, MDM, CDP, DAM, DXP/CMS & Digital Commerce

Packagist Software License Gitter

Contribute

Bug fixes: please create a pull request including a step by step description to reproduce the problem
Contribute features: contact the core-team on our Gitter channel before you start developing
Security vulnerabilities: please see our security policy

For details, please have a look at our contributing guide.

Overview

Technology and Architecture

Key Benefits and Advantages

โš’ Data Modelling and UI Design at the same Time

No matter if you're dealing with unstructured web documents or structured data for MDM/PIM, you define the UI design (web documents by a template and structured data with an intuitive graphical editor), Pimcore knows how to persist the data efficiently and optimized for fast access.

๐ŸŽ› Agnostic and Universal Framework for your Data

Due to the framework approach, Pimcore is very flexible and adapts perfectly to your needs. Built on top of the well-known Symfony Framework you have a solid and modern foundation for your project.

๐Ÿš€ Extensible and huge Symfony Community

Benefit from all existing Symfony Components and Bundles provided by the community or create your own Bundles to extend your Projects with reusable components.

๐Ÿ’Ž Your Digital World consolidated in one Platform

No more API, import/export and synchronization hell between MDM/PIM, E-Commerce, DAM, and your Web-CMS. All is working seamlessly together, natively ... this is what Pimcore is built for.

โœจ๏ธ Modern and Intuitive UI

We love good-looking user interfaces, designed to be efficient for daily use and optimized for a great experience for editors.

Preview and Demo

Data Objects

Pimcore Admin Interface Screenshot PIM/MDM Manage any structured data based on a predefined data model, either manually or automatically via the APIs. Define the structure and attributes of your objects by using the class editor. Manage any data โ€“ products (PIM/MDM), categories, customers (CDP), orders (digital commerce), blog articles (DXP/CMS). Data Objects provide the possibility to manage structured data for multiple output channels from a single source. By centralizing data in one place, Pimcore's data objects enable you to achieve better data completeness and data quality, allowing you to create and maintain a consistent, up-to-date customer experience across multiple touchpoints in less time.

Digital Assets

Pimcore Admin Interface Screenshot DAM Assets are the DAM part of Pimcore. Store, manage and organize digital files such as images, videos, PDFs, Word/Excel documents in a folder structure. Preview 200+ file types directly in Pimcore, edit pictures, and enrich files with additional meta-data. Facial recognition for focal points in images is available. Editors only need to maintain one high-resolution version of a file in the system. Pimcore can automatically generate all required output formats for various channels such as commerce, apps, websites. Of course, including comprehensive user management and version control.

Documents

Pimcore Admin Interface Screenshot CMS The DXP/CMS part of Pimcore for managing unstructured content such as the pages of a website and its navigation. Based on Twig templates, documents render physical HTML/CSS pages and provide the capabilities to manage the presentation of data, exactly how customers will experience it. They can be composed by administrators by arranging predefined layout elements. Pimcore documents provide multilingual and multi-site capabilities for websites, including emails and newsletters. Total frontend flexibility enables a perfect blend of content and commerce. You can also use them to create content for offline channels, such as printed catalogs (web-to-print).

Demo (Community Edition)

Admin-URL (stable): https://demo.pimcore.fun/admin/
Admin-URL (dev): https://11.x-dev.pimcore.fun/admin/
Username: admin
Password: demo

Getting Started

Only 3 commands to start! ๐Ÿ˜Ž

COMPOSER_MEMORY_LIMIT=-1 composer create-project pimcore/skeleton ./my-project
cd ./my-project
./vendor/bin/pimcore-install

This will install an empty skeleton application, but we're also offering a demo package for your convenience - of course also with 3 commands ๐Ÿ’ช Click here for more installation options and a detailed guide

Supported Versions and LTS

Community support of a minor version of Pimcore packages ends with the release of the next minor version. After end of community support, long term supported is provided in combination with enterprise edition.

LTS versions are based on our Platform Version Releases which cover the Core Framework as well as extensions provided by Pimcore. For details on versions and their support state see our documentation.

Copyright and License

Copyright: Pimcore GmbH For licensing details please visit LICENSE.md

data-hub's People

Contributors

ab-kily avatar adriaans avatar alsonx avatar blankse avatar bobo23 avatar bramstroker avatar brusch avatar corepex avatar ctippler avatar dpfaffenbauer avatar dvesh3 avatar fashxp avatar iblis avatar juckerf avatar julkue avatar kingjia90 avatar leitge avatar lukmzig avatar mcassier31 avatar mcop1 avatar mugge6 avatar nagarciah avatar niklasbr avatar robertst7 avatar rubanooo avatar simonbader avatar skoch98 avatar solverat avatar vmalyk avatar weisswurstkanone avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

data-hub's Issues

empty graphql preview screen

Using

pimcore/pimcore v5.7.3
pimcore/data-hub dev-master 0d578c1 Pimcore Data Hub - Early Preview
, no matter how simple my configuration, the graphQL window opens without any content, just the commented out window.
image
image

image

Remove usage of Pimcore::getContainer

Overall, remove the usage of the global container. This is considered to be an anti pattern and only is in Pimcore for special legacy reasons.

  • Some of the calls are inside containers that could be replaced with action-arguments or $this->get calls. ($this->get will also break in Symfony 4 when the service is private, but its still more symfony like)
  • Some others are in resolvers, types and operators. Those should be created using the Symfony Container and could be registered in some sort of Registry Class.

Pimcore will sooner or later upgrade to Symfony 4 and further remove legacy stuff. So, usage of that function should only be when there is absolutely no chance otherwise. I don't see that here.

These classes shouldn't even know that there is something like a container.

Don't get me wrong please, this bundle is great, it works amazingly good. But: New code should be created in a form that is not legacy, in a form that is maintainable, sticks to current patterns and doesn't rely on any legacy stuff.

Class panels should not be added to definition

When defining the Graph QL schema it is possible to add panels to the queyable fields, this has no detrimental effect (that I can find) but they should not be able to de added to the query definition.

Skรคrmbild (133)

Error "type definition ... not found" in advanced many-to-many-fields.

Issue:
Object of type A contains an advanced many to many-relation with object of type B.

You make a data-hub config for type A and you want to display some info of type B.

{
  getA (id: 1){
    id,
    b {
      ... on object_B {
        id
      }
    }
  }
}

This results in the error "type definition B not found". You get this error even without requesting any info of object B.

I found \Pimcore\Bundle\DataHubBundle\GraphQL\ClassTypeDefinitions::build to be partly responsible. In that method the classes are loaded alphabetically, first class A, then class B. However, class A has a reference to class B, so it executes \Pimcore\Bundle\DataHubBundle\GraphQL\ClassTypeDefinitions::get with "B" as parameter, but at that moment, class B isn't loaded yet, so it throws the error.

This is not the case with simple many-to-one fields. In that case, all the classes are loaded before the get() method gets executed.

This screenshot contains a real life example. Class "Dealer" (A) has a reference to "Order" (B). Dealer gets loaded in the build() foreach-loop, then jumps to the get() method to collect Order, which at that time isn't loaded yet, because the foreach-loop in build() is still processing "Dealer".
Selection_999(121)

Hope this is clear :)

[Question] Progress on fieldcollections/galleries

We would like to continue improving this bundle, but to avoid doing duplicate work, could you tell us if any work has been done on either Structured: Field-Collections or Media: Image Gallery object data components?

Thumbnail Transformer is not aware of media queries

Steps to reproduce

  1. Create a new Image Thumbnail
  2. Define at least one breakpoint.
  3. Run a client query against the thumbnail field.

Expected result

To either be able to get an entire <img srcset...> tag or an array with data objects representing the different image objects (which may include the different paths).

Actual result

I get the path to one of the thumbnails only.

Create the basis for mutations

  • create objects

  • update objects (support a few datatypes and operators)

  • delete objects

  • create/read/update/delete assets (at least data + filename)

  • create/read/update/delete asset & object folders

Configuration::getByName() returns 500 if not found, 404 better?

/**
* @param $name
*
* @return Configuration
*/
public static function getByName($name): Configuration
{
return Dao::getByName($name);
}

When querying against a configuration that does not exists, this will throw a 500 Internal Server Error: Return value of Pimcore\Bundle\DataHubBundle\Configuration::getByName() must be an instance of Pimcore\Bundle\DataHubBundle\Configuration, null returned

Maybe return a 404 error instead?

Clarify usage of totalCount

There are no code comments or clear documentation I can find on the totalCount Schema.

For example, the query:

query categories($first: Int) {
  getCategoryListing(first: $first, published: false) {
    totalCount
    edges {
      node {
        fullpath
      }
    }
  }
}

with query variables:

{
  "first": 3
}

returns:

{
  "data": {
    "getCategoryListing": {
      "totalCount": 29,
      "edges": [
        {
          "node": {
            "fullpath": "/Categories/Hage"
          }
        },
        {
          "node": {
            "fullpath": "/Categories/Landbruk"
          }
        },
        {
          "node": {
            "fullpath": "/Categories/Maskiner"
          }
        }
      ]
    }
  }
}

The number 29 is correct so far as to the total number of Category objects, but not the number of returned objects. Is this the expected behaviour: To show the total query-able number of data objects. Or should it calculate the number of returned objects?

The description is a bit sparse at the moment:

https://github.com/pimcore/data-hub/blob/master/src/GraphQL/Query/QueryType.php#L188

Feature request: Allow filtering via input types

Today the only way(?) that we can use filtering is via Filter Listings, however, I would like to move these filters into Query variables, like this:

query news(published: Boolean, $first: Int, $filter: Filter) {
    ...
}
variables: {
    "published": true,
    "first": 5,
    "filter": What goes here?
}

However, I can't figure out how to do it and I have come to the conclusion that it is probably not possible with today's solution, is it because the dollar sign?

Lowercasing image fields always, is it really required?

Maybe a bug?

When I'm creating an image field in the Schema called mainImageThumbnail I noticed that it became mainimagethumbnail.

There is likely a good reason for this, but it is a bit odd when creationDate, and some other fields can retain their camelcasing.

"Main Image Thumbnail" โ†’ "main_image_thumbnail" works (I personally prefers snakes, but our coding style asks for camels, which is why I ask)

Query for Objects Asset (image) requries ID

Summary

When querying for an Object with an image field the query returns null for the asset unless the Client Query also requests the ID of the object.

Expected

I expect to be able to get the mainImage Asset data even though I do not include id in the Client Query.

To reproduce

This works:

{
  getProductListing {
    edges {
      node {
        id
        mainImage {
          fullpath
        }
      }
    }
  }
}

But this does not:

{
  getProductListing {
    edges {
      node {
        mainImage {
          fullpath
        }
      }
    }
  }
}

Fix for the creates mutations

The creates mutations are not working, this is due to a mistake in the class Pimcore\Bundle\DataHubBundle\GraphQL\Mutation\MutationType on line 186

replace :
call_user_func_array($resolver, [ $newInstance, $value, $args, $context, $info]);

By

call_user_func_array($resolver, [ $value, $args, $context, $info]);

Access-Control-Allow-Origin

First, thanks for this bundle it will be a great feature for pimcore !

Is it possible to add Access-Control-Allow-Origin in order to test on local frontend dev ?

Pimcore 6 problems, logger: Level "info" is not defined

Just for the record, this is very similar to pimcore/pimcore#4476, but we have never used any translations at all. It might not be a Data-hub issue at all. That said, after upgrading from 5.8.4 to 6.0 everything in Pimcore and Data-hub seems to be working fine, with the exception of actually running queries, which throws this error, either with the graphical interface or direct queries from simpler clients like Curl.

While that issue gave me some ideas where to look for the source of the error I can't find it.

There are also other related errors, like Monolog throws error 'info' severity is not supported, etc.

While trying to debug I noticed that locale_get_default() returned tr_TR, but System Settings said that en was the only and default Pimcore language (no fallback). And PHP Info's intl.default_locale reports en

Clearing all the caches and resetting the System Settings does not help. Any ideas what might have happened?

Stack trace:

Psr\Log\InvalidArgumentException:
Level "info" is not defined, use one of: 100, 200, 250, 300, 400, 500, 550, 600

  at vendor/monolog/monolog/src/Monolog/Logger.php:516
  at Monolog\Logger::getLevelName('info')
     (vendor/monolog/monolog/src/Monolog/Logger.php:298)
  at Monolog\Logger->addRecord('info', 'User Deprecated: The Symfony\\Bundle\\FrameworkBundle\\Templating\\Helper\\ActionsHelper class is deprecated since version 4.3 and will be removed in 5.0; use Twig instead.', array('exception' => object(ErrorException)))
     (vendor/monolog/monolog/src/Monolog/Logger.php:609)
  at Monolog\Logger->log('info', 'User Deprecated: The Symfony\\Bundle\\FrameworkBundle\\Templating\\Helper\\ActionsHelper class is deprecated since version 4.3 and will be removed in 5.0; use Twig instead.', array('exception' => object(ErrorException)))
     (vendor/symfony/symfony/src/Symfony/Component/Debug/ErrorHandler.php:503)
  at Symfony\Component\Debug\ErrorHandler->handleError(16384, 'The Symfony\\Bundle\\FrameworkBundle\\Templating\\Helper\\ActionsHelper class is deprecated since version 4.3 and will be removed in 5.0; use Twig instead.', '/var/www/pimcore/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Templating/Helper/ActionsHelper.php', 14, array('class' => 'Symfony\\Bundle\\FrameworkBundle\\Templating\\Helper\\ActionsHelper', 'e' => 22519, 'file' => '/var/www/pimcore/vendor/composer/../symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Templating/Helper/ActionsHelper.php'))
  at trigger_error('The Symfony\\Bundle\\FrameworkBundle\\Templating\\Helper\\ActionsHelper class is deprecated since version 4.3 and will be removed in 5.0; use Twig instead.', 16384)
     (vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Templating/Helper/ActionsHelper.php:14)
  at require('/var/www/pimcore/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Templating/Helper/ActionsHelper.php')
     (vendor/symfony/symfony/src/Symfony/Component/Debug/DebugClassLoader.php:156)
  at Symfony\Component\Debug\DebugClassLoader->loadClass('Symfony\\Bundle\\FrameworkBundle\\Templating\\Helper\\ActionsHelper')
  at spl_autoload_call('Symfony\\Bundle\\FrameworkBundle\\Templating\\Helper\\ActionsHelper')
     (var/cache/dev/ContainerWeY7xTr/appAppKernelDevDebugContainer.php:3197)
  at ContainerWeY7xTr\appAppKernelDevDebugContainer->getTemplating_Helper_ActionsService()
     (var/cache/dev/ContainerWeY7xTr/appAppKernelDevDebugContainer.php:1565)
  at ContainerWeY7xTr\appAppKernelDevDebugContainer->getPimcore_Templating_ActionRendererService()
     (var/cache/dev/ContainerWeY7xTr/getDocumentRendererService.php:9)
  at require('/var/www/pimcore/var/cache/dev/ContainerWeY7xTr/getDocumentRendererService.php')
     (var/cache/dev/ContainerWeY7xTr/appAppKernelDevDebugContainer.php:408)
  at ContainerWeY7xTr\appAppKernelDevDebugContainer->load('getDocumentRendererService.php')
     (var/cache/dev/ContainerWeY7xTr/getResponseExceptionListenerService.php:9)
  at require('/var/www/pimcore/var/cache/dev/ContainerWeY7xTr/getResponseExceptionListenerService.php')
     (var/cache/dev/ContainerWeY7xTr/appAppKernelDevDebugContainer.php:408)
  at ContainerWeY7xTr\appAppKernelDevDebugContainer->load('getResponseExceptionListenerService.php')
     (var/cache/dev/ContainerWeY7xTr/appAppKernelDevDebugContainer.php:1098)
  at ContainerWeY7xTr\appAppKernelDevDebugContainer->ContainerWeY7xTr\{closure}()
     (vendor/symfony/symfony/src/Symfony/Component/EventDispatcher/EventDispatcher.php:275)
  at Symfony\Component\EventDispatcher\EventDispatcher->sortListeners('kernel.exception')
     (vendor/symfony/symfony/src/Symfony/Component/EventDispatcher/EventDispatcher.php:92)
  at Symfony\Component\EventDispatcher\EventDispatcher->getListeners('kernel.exception')
     (vendor/symfony/symfony/src/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcher.php:334)
  at Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher->preProcess('kernel.exception')
     (vendor/symfony/symfony/src/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcher.php:162)
  at Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher->dispatch(object(ExceptionEvent), 'kernel.exception')
     (vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:222)
  at Symfony\Component\HttpKernel\HttpKernel->handleException(object(InvalidArgumentException), object(Request), 1)
     (vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:79)
  at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true)
     (vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php:198)
  at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
     (web/app.php:36)

Link type field trows exception

Summary

The Link type data field on Objects does not work when it has data. If the field is empty on an object it will return null as expected, but if there is some link content (text+url) then the server will throw an UndefinedMethodException.

To reproduce

  1. Create an object class.
  2. Add the Other: Link data component.
  3. Create an object of the class, but leave the link empty when saving.
  4. Query for the object in GraphiQL, note the result.
  5. Fill in some data in the object's link field and save it.
  6. Run the query again, you should now get an error.
Attempted to call an undefined method named "resolveText" of class "Pimcore\Bundle\DataHubBundle\GraphQL\Resolver\Link"

Question

Did Geopoint and Link get mixed up? In that case I have a commit here ๐Ÿ˜„

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.