Git Product home page Git Product logo

shopware's Introduction

Shopware 5

Build Status Crowdin Latest Stable Version Total Downloads Slack

Overview

Shopware 5 collage

Shopware 5 is an open source e-commerce software made in Germany. Based on technologies like Symfony 4, Doctrine 2 & Zend Framework Shopware comes as the perfect platform for your next e-commerce project. Furthermore, Shopware 5 provides an event-driven plugin system and an advanced hook system, giving you the ability to customize every part of the platform.

Visit the forum at https://forum.shopware.com/


Shopware Server Requirements

  • PHP 7.4.0 or above
  • Apache 2.2 or 2.4
  • Apache's mod_rewrite module
  • MySQL 5.7.0 or above

Required PHP extensions:

Installation via Git

Follow the instruction below if you want to install Shopware 5 using Git.

1.) Clone the git repository to the desired location using:

git clone https://github.com/shopware5/shopware.git

In case you wish to contribute to Shopware, fork the 5.7 branch rather than cloning it, and create a pull request via GitHub. For further information please read the section "Get involved" of this document.

2.) Set the correct directory permissions:

chmod -R 755 custom/plugins
chmod -R 755 engine/Shopware/Plugins/Community
chmod -R 755 files
chmod -R 755 media
chmod -R 755 var
chmod -R 755 web

Depending on your server configuration, it might be necessary to set whole write permissions (777) to the files and folders above. You can also start testing with lower permissions due to security reasons (644 for example) as long as your PHP process can write to those files.

3.) A Makefile may be used to set up the configuration and database connection:

  • Copy .env.dist to .env and modify variables if needed
  • make init

Info regarding platform inter-compatibility

The Makefile is intended to work with Linux and Mac systems alike which means that we're not able to use all features of modern GNU make. Some workarounds are in place because of this and place constraints on the functionality of this way to set up Shopware (there might be issues when using special characters inside the variables of the .env file). The Makefile is therefore only to be used for testing and development setups at the moment.

4.) Download the test images and extract them:

Go to the root directory of your shopware system and download the test images:

wget -O test_images.zip http://releases.shopware.com/test_images_since_5.1.zip

For older Shopware versions < 5.1

wget -O test_images.zip http://releases.shopware.com/test_images.zip

Unzip the files inside the root directory:

unzip test_images.zip

You can now access your shop

Backend

The backend is located at /backend example http://your.shop.com/backend. Backend Login: demo/demo

The test_images.zip file includes thumbnails for the new responsive theme and the old deprecated template.

If you want to have full-featured demo data, you should download the respective demo data plugin in the First Run Wizard or in the Plugin Manager.

Frontend users in demo data

Get involved

Shopware is available under dual license (AGPL v3 and proprietary license). If you want to contribute code (features or bugfixes), you have to create a pull request and include valid license information. You can either contribute your code under New BSD or MIT license.

If you want to contribute to the backend part of Shopware, and your changes affect or are based on ExtJS code, they must be licensed under GPL V3, as per license requirements from Sencha Inc.

If you are not sure which license to use, or want more details about available licensing or the contribution agreements we offer, you can contact us at [email protected].

For more information about contributing to Shopware, please see CONTRIBUTING.md.

How to report bugs / request features?

We've always had a sympathetic ear for our community, so please feel free to submit tickets with bug reports or feature requests. In order to have a single issue tracking tool, we've decided to close the GitHub issue panel in favor of our Jira issue tracker, which is directly connected to our development division.

Copying / License

Shopware is distributed under a dual license (AGPL v3 and proprietary license). You can find the whole license text in the license.txt file.

Changelog

The changelog and all available commits are located under https://github.com/shopware5/shopware.

Further reading

shopware's People

Contributors

aragon999 avatar bcremer avatar dnoegel avatar ennasus4sun avatar hlohaus avatar htkassner avatar j-rahe avatar janbuecker avatar jenskueper avatar jkrzefski avatar joshuabehrens avatar king-of-babylon avatar marcelbrode avatar marcelschmaeing avatar mitelg avatar ndzoesch avatar oliverskroblin avatar pascalheidmann-bedarf avatar pascalthesing avatar phil23 avatar philipreinken avatar screeny05 avatar shyim avatar soebbing avatar svenmuennich avatar swdennis avatar taltholtmann avatar teiling88 avatar tinect avatar tobiasberge 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  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

shopware's Issues

empty form causes 'fatal error' at new customer registration

Hi guys,

so sending an empty new customer registration form (../register and ./register/saveRegister) makes PHP crash with following error:

Fatal error: Cannot use string offset as an array in
/usr/www/users/swissmk/swissmobilia-parts.de/engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php on line 306

But unfortunately this only happens on my live system - also a fresh new install of Shopware delivers the same failure.

On my local testing system both the mirrored live version and a fresh installed version work flawlessly.

My guess is, that it has something to do with the PHP Version as for my local testing system I run PHP 5.3.10 but my hoster uses 5.3.24.

However, I would appreciate any help to solve this issue.

I also posted a new thread in the shopware community forum, you can find it here: http://forum.shopware.de/allgemein-f25/leeres-registrierung-formular-fuhrt-zu-fatal-error-t12954.html

Greetings
AR

Enlight_Loader::checkFile allow round brackets for windows 64bit compatibility

Hey guys,

as i've just installed shopware on my local windows 64 box, i have a directory "Program FIles (x86)" for 32bit programs. but this path doesnt pass the regex defined in Enlight_Loader::checkFile().
I think we should change the regex to /[^a-z0-9()\\/\\\\_. :-]/i to allow square brackets. otherwise it wont work if webserver document root lies inside this directory as it is per default.

Add files/downloads/ to repository

After cloning the repository it's not possible to execute the installer due to an requirement error.

The directory files/downloads/ should be included in the repository as is files/documents/ and the other required directories.

Workaround:
mkdir files/downloads -m 0770

Tag for 4.0.7 Release

Why is there a tag vor nearly each shopware version (even 4.0.6 RC versions) but not for version 4.0.7?

unused files in ZIP release of 4.0.8 : './engine/Library/ExtJs/build'

Hello guys,

I just stumbled up on the fact, that there are two files related to ExtJs SDK which in my opinion do not belong to the release files.

As mentioned in the topic, you can find these files at:

engine/Library/ExtJs/build

please give me some feedback on my assumption and in case fix this ;-)

Greetings
AR

'Close shop due to maintenance' requires cache flush in order to work.

Hey guys,
I just noticed that after I close the web shop with the checkbox under 'Basic Settings/System/Service' (while assigning an exception IP, not sure if this affects this issue in any way) the frontend continues to be available for customers.

I need to manually empty the cache in order to make the maintenance message appear.
In my opinion this is not the correct way for this to work.
It should be possible to integrate the cache flush step after the 'Save' confirmation (maybe some warning box could appear, that the cache will be flushed or something).

Suggest feature branches for pull requests

Often it is common usage to suggest people should create feature branches for their feature enhancements and then submit pull requests.

Thus, everything is more in order and a discussion inside the feature branch can take place before accepting and merging it upstream into the master (or whatever) branch on this repo.

Affects README.md

Errors in backend after git clone

Hi,

I just did a fresh checkout from Git after forking it. After installation and going to Configuration -> Settings and clicking on Shop Settings -> Shops I get the following:

Ups! Ein Fehler ist aufgetreten! Die nachfolgenden Hinweise sollten Ihnen weiterhelfen. 
SQLSTATE[42S22]: Column not found: 1054 Unknown column 's0_.base_url' in 'field list' in Doctrine/DBAL/Connection.php on line 633 Stack trace: 
#0 Doctrine/DBAL/Connection.php(633): PDO->query('SELECT s0_.id A...') 
#1 Doctrine/ORM/Query/Exec/SingleSelectExecutor.php(46): Doctrine\DBAL\Connection->executeQuery('SELECT s0_.id A...', Array, Array, NULL) 
#2 Doctrine/ORM/Query.php(260): Doctrine\ORM\Query\Exec\SingleSelectExecutor->execute(Object(Doctrine\DBAL\Connection), Array, Array) 
#3 Doctrine/ORM/AbstractQuery.php(595): Doctrine\ORM\Query->_doExecute() 
#4 Doctrine/ORM/AbstractQuery.php(432): Doctrine\ORM\AbstractQuery->execute(Array, 2) 
#5 Shopware/Controllers/Backend/Config.php(278): Doctrine\ORM\AbstractQuery->getArrayResult() 
#6 Enlight/Controller/Action.php(135): Shopware_Controllers_Backend_Config->getListAction() 
#7 Enlight/Controller/Dispatcher/Default.php(521): Enlight_Controller_Action->dispatch('getListAction') 
#8 Enlight/Controller/Front.php(214): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp)) 
#9 Shopware/Bootstrap.php(79): Enlight_Controller_Front->dispatch() 
#10 Enlight/Application.php(192): Shopware_Bootstrap->run() 
#11 shopware.php(74): Enlight_Application->run() #12 {main}  

(linebreaks are mine...)

Then if I click away the error (cause I got too little to go on now) and add a new Shop (which afaik should have already been added during installation) I get the following error:

Ups! Ein Fehler ist aufgetreten! Die nachfolgenden Hinweise sollten Ihnen weiterhelfen. 
SQLSTATE[42S22]: Column not found: 1054 Unknown column 's0_.base_url' in 'field list' in Doctrine/DBAL/Connection.php on line 633 Stack trace: 
#0 Doctrine/DBAL/Connection.php(633): PDO->query('SELECT s0_.id A...') 
#1 Doctrine/ORM/Query/Exec/SingleSelectExecutor.php(46): Doctrine\DBAL\Connection->executeQuery('SELECT s0_.id A...', Array, Array, NULL) 
#2 Doctrine/ORM/Query.php(260): Doctrine\ORM\Query\Exec\SingleSelectExecutor->execute(Object(Doctrine\DBAL\Connection), Array, Array) 
#3 Doctrine/ORM/AbstractQuery.php(595): Doctrine\ORM\Query->_doExecute() 
#4 Doctrine/ORM/AbstractQuery.php(432): Doctrine\ORM\AbstractQuery->execute(Array, 2) 
#5 Shopware/Controllers/Backend/Config.php(278): Doctrine\ORM\AbstractQuery->getArrayResult() 
#6 Enlight/Controller/Action.php(135): Shopware_Controllers_Backend_Config->getListAction() 
#7 Enlight/Controller/Dispatcher/Default.php(521): Enlight_Controller_Action->dispatch('getListAction') 
#8 Enlight/Controller/Front.php(214): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp)) 
#9 Shopware/Bootstrap.php(79): Enlight_Controller_Front->dispatch() 
#10 Enlight/Application.php(192): Shopware_Bootstrap->run() 
#11 shopware.php(74): Enlight_Application->run() #12 {main}  

Which is well, the same error ;)

However in the Table s_core_shops there are 2 records, one is referred to as the Hauptshop Deutsch and the other Englisch. The Hauptshop Deutsch looks like it was filled out (mostly) correct, however some fields are missing
Hauptshop Deutsch

  • main_id
  • title
  • base_path
  • secure_host
  • secure_base_path
  • fallback_id

Englisch

  • title
  • host
  • base_path
  • hosts
  • secure_host
  • secure_base_path
  • template_id
  • document_template_id
  • fallback_id

Now there's no mention of the base_url field in this table and not sure yet in which it should be. However I assume something went haywire during the initial install. Hence the issue. Any thoughts?

[Feature?] (Sub-)Properties per Category

Hi,

At least in Shopware 3 this is not possible and from my experimentations with Shopware 4 it still doesn't seem to be possible.
I have a set of products that should for the convenience of the user appear in multiple categories. However, every category has a different subset of properties. At the moment I solved it by duplicating the product. This is of course, very cumbersome to update a product on price or availability.

To describe the problem more clearly, I have products that fit into specific models of cars. Now having -every- possible car it fits into set for 1 product makes the list -huge- if you want to filter. The cars itself can be divided into categories which makes the selection of properties already a lot smaller.

What would be perfect for example is having sub-properties. Based on a specific property certain other one's become available. This would solve the problem too. I don't necessarily need categories (this was just a fallback for the current situation).

What are the recommendations here? Or where should I poke around in Shopware to add/extend the functionality needed for this? Am I attacking the problem wrong?

Thank you for your time :)

HTTPS detection broken via http-proxy

If somebody comes via a http-proxy server which sends the x-forfarded-for header shopware thinks it is https.
We created at Emotion Page and placed a Banner Slider on it. The Images in this Banner Slider are filtered by the Output Filter Plugin to https://
The Server actualy did not run under https but was behind a reverse Proxy / Load Balancer (Apache mod_proxy).
The Problem was finaly found inside engine/Shopware/Plugins/Default/Core/Router/Bootstrap.php#162

if (($host = $request->getHeader('X_FORWARDED_HOST')) !== null && $host === $shop->getSecureHost() ) {

I think its better to set the https-header in the proxy-server and remove the line in the code (if you use a reverse-proxy for https).
thanks to Rene for helping to solve this issue ;)
Greetings Sascha.

Product properties: broken option and value order update with drag&drop

Hey guys, some kind of nasty bug: as stated in the Product properties menu after reordering option or value items the new order will not be saved - this also affects directly the filter appearance at the frontend.

Added a pic to illustrate what I mean.

issue1

Sure one could work around and delete all items & reinsert them in the correct order, but I guess in the long run this is not the ideal solution.

move away from *GPL license

*GPL licenses are more than a gray area for interpreted languages. not sure if ExtJS is really worth this mess .. also the license interpretation of ExtJS "infecting" server side code is questionable. But with a more decoupled philosophy (http://decoupledcms.org) it should be possible to separate the ExtJS dependency in such a way that there should be no reason to influence your license decision.

Bugs in Shop sites - Groups assignment component

There's a bug on the "Content - Shop site" form when assigning/unassigning groups using the arrow buttons instead of double-clicking an entry. Altough there are two different problems I file this as one issue as it is a problem affecting the whole component.

Problem 1:
Assign group (select group from left selectbox, click on the right arrow button): group is assigned on the right side, left list is empty (even if there would be more groups on the left side).

Problem 2:
Unassign a group (select group on right selectbox, click on the left arrow button): group is moved to the left selectbox, but all other entries in the left selectbox are cleared so the moved item is the only one in the left box. The right box is completely empty (even if there are morge assigned groups).

Tested on 4.0.4 and 4.0.5 / FF, Chrome

ORIGINAL ISSUE IN GERMAN:
Im Backend besteht im Menü "Inhalte - Shopseiten" ein Bug (eigentlich zwei) bei der Zuordnung von Seiten zu Gruppen, wenn die Gruppen über die Pfeil-Buttons zugewiesen/entfernt werden. Bei Doppelklick besteht das Problem nicht.

Problem 1:
Gruppe zuweisen (Auswahl Gruppe in der linken Liste, Klick auf Pfeil nach rechts): Gruppe wird rechts zugewiesen, aber Liste links ist anschließend leer.

Problem 2:
Zuweisung entfernen (Auswahl Gruppe in der rechten Leiste, Klick auf Pfeil nach links): Gruppe erscheint in der linken Liste, jedoch ist linke Liste bis auf die gerade entfernte Gruppe leer. Rechte Liste ist komplett leer (auch wenn weitere Gruppen zugewiesen waren).

Getestet auf 4.0.4 und 4.0.5 / FF, Chrome

Question: Incorrect path generated for SMARTY-function "{link"?

Hello all,

i was trying to setup a new shopware installation and run into some problems. After Installation the html pages were having the full path to the local file:

http://domain/path/to/htdocs/shopware/templates/_default/frontend/_resources/styles/framework.css

what i would have wanted was something like:
http://domain/shopware/templates/_default/frontend/_resources/styles/framework.css

i found that this error did come from the link() inside compiler.link.php (showare/engine/Library/Enlight/Template/Plugins).

Did i miss something during setup which caused this kind of problem or is there a issue with the function?
My Current Fix:

 /**
     * @param $params
     * @param $template
     * @return mixed|string
     */
    public static function link($params, $template)
    {
        $file = $params['file'];

        /** @var $front Enlight_Controller_Front */
        $front = Enlight_Application::Instance()->Front();
        $request = $front->Request();

        // check if we got an URI or a local link
        if (!empty($file) && strpos($file, '/') !== 0 && strpos($file, '://') === false) {

            $useIncludePath = $template->smarty->getUseIncludePath();

            // try to find the file on the filesystem
            foreach ($template->smarty->getTemplateDir() as $dir) {
                if (file_exists($dir . $file)) {
                    $file = realpath($dir) . DS . str_replace('/', DS, $file);
                    break;
                }
                if ($useIncludePath) {
                    if ($dir === '.' . DS) {
                        $dir = '';
                    }
                    if (($result = Enlight_Loader::isReadable($dir . $file)) !== false) {
                        $file = $result;
                        break;
                    }
                }
            }

            if (method_exists(Enlight_Application::Instance(), 'DocPath')) {
                $docPath = Enlight_Application::Instance()->DocPath();
            } else {
                $docPath = getcwd() . DIRECTORY_SEPARATOR;
            }

            // some clean up code
            if (strpos($file, $docPath) === 0) {
                $file = substr($file, strlen($docPath));
            }
            // make sure we have the right separator for the web context
            if (DIRECTORY_SEPARATOR !== '/') {
                $file = str_replace(DIRECTORY_SEPARATOR, '/', $file);
            }
            if (strpos($file, './') === 0) {
                $file = substr($file, 2);
            }
            // if we did not find the file, we are returning a false
            if (strpos($file, '/') !== 0) {
                if (!file_exists($docPath . $file)) {
                    //return false;
                }
                $file = $request->getBasePath() . '/' . $file;
            }
        }

        if (empty($file)) {
            $file = $request->getBasePath() . '/';
        }

        if (strpos($file, '/') === 0 && !empty($params['fullPath'])) {
            $file = $request->getScheme() . '://' . $request->getHttpHost() . $file;
        }

        //replace the file system folders with nothing to make sure the path is correct
        return str_ireplace(Enlight_Application::Instance()->DocPath(), "", $file);
    }

doppelte System.xml und checks

Was mir auffällt ist das an ganz vielen Stellen System.xml mit fast identischen Inhalt liegen, das der PHP Check an verschiedenen stellen arbeitet und das gleiche ausgibt, jedes mal doppelter Code.

Wie wäre es eine zentrale Klasse zu schreiben welche den PHP Check ausführt und ne Meldung auswirft, um so doppelten Code verschwinden zu lassen, sowie sich auf eine System.xml zu beschränken in der einfach alle Abhängigkeiten geregelt sind?

Better support for I18n in backend config

Shopware_Controllers_Backend_Config::getFormAction() currently only translates the label.
If you have a description including the corresponding translation added to your Form-Field it's not shown on the module configuration page.
It's also not possible to translate values of e.G. select fields.

Commandline importing/updating

Hi,

it would be very nice to have a commandline interface for updating and importing articles/images into Shopware.
For example I am now running an import of product images into Shopware from my browser. This however is of course going to take a while and the chances that it might halfway quit because of a timeout/ip change is realistic.
If I could just through SSH do something like:
./tools/import.php --images somefile.csv &

It would just happily run in the background (implied by the &) or just run along in an detached screen session through the night :)

Symfony2 has an extremely nice CLI Component ( http://symfony.com/doc/master/components/console/index.html ) designed for creating things like these. But before I spend a few hours on coding this for Shopware while there is already something on the way I wanted to ask here first.

Minimaler Schreibfehler im Backend

Einstellungen > Storefront > SEO/Router-Einstellungen
Meta description von Artikel/Kategorien aufbereiteten
muss heißen
Meta description von Artikel/Kategorien aufbereiten

Method "Shopware::PasswordEncoder" not found failure in Shopware/Components\Auth\Adapter\Default.php on line 218

https://github.com/ShopwareAG/shopware-4/blob/master/engine/Shopware/Components/Auth/Adapter/Default.php#L218

Method "Shopware::PasswordEncoder" not found failure in Shopware/Components\Auth\Adapter\Default.php on line 218

<h3>Stack trace:</h3>
<div style="overflow:auto;">
<pre>#0 Shopware/Components\Auth\Adapter\Default.php(218): Enlight_Application-&gt;__call(&#039;PasswordEncoder&#039;, Array)

#1 Shopware/Components\Auth\Adapter\Default.php(218): Shopware->PasswordEncoder()
#2 Zend\Auth\Adapter\DbTable.php(386): Shopware_Components_Auth_Adapter_Default->_authenticateValidateResult(Array)
#3 Enlight\Components\Auth\Adapter\DbTable.php(142): Zend_Auth_Adapter_DbTable->authenticate()
#4 Shopware/Components\Auth\Adapter\Default.php(109): Enlight_Components_Auth_Adapter_DbTable->authenticate()
#5 Zend\Auth.php(117): Shopware_Components_Auth_Adapter_Default->authenticate()
#6 Enlight\Components\Auth.php(74): Zend_Auth->authenticate(Object(Shopware_Components_Auth_Adapter_Default))
#7 Shopware/Components\Auth.php(136): Enlight_Components_Auth->authenticate(Object(Shopware_Components_Auth_Adapter_Default))
#8 Shopware/Components\Auth.php(92): Shopware_Components_Auth->authenticate(Object(Shopware_Components_Auth_Adapter_Default))
#9 Shopware/Controllers\Backend\Login.php(64): Shopware_Components_Auth->login('admin', 'dspdevel')
#10 Enlight\Controller\Action.php(148): Shopware_Controllers_Backend_Login->loginAction()
#11 Enlight\Controller\Dispatcher\Default.php(521): Enlight_Controller_Action->dispatch('loginAction')
#12 Enlight\Controller\Front.php(214): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp))
#13 Shopware/Components\HttpCache\HttpKernel.php(79): Enlight_Controller_Front->dispatch()
#14 Symfony\Component\HttpKernel\HttpCache\HttpCache.php(434): Shopware\Components\HttpCache\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#15 Shopware/Components\HttpCache\AppCache.php(234): Symfony\Component\HttpKernel\HttpCache\HttpCache->forward(Object(Symfony\Component\HttpFoundation\Request), true, NULL)
#16 Symfony\Component\HttpKernel\HttpCache\HttpCache.php(230): Shopware\Components\HttpCache\AppCache->forward(Object(Symfony\Component\HttpFoundation\Request), true)
#17 Shopware/Components\HttpCache\AppCache.php(99): Symfony\Component\HttpKernel\HttpCache\HttpCache->pass(Object(Symfony\Component\HttpFoundation\Request), true)
#18 Shopware/Bootstrap.php(70): Shopware\Components\HttpCache\AppCache->handle(Object(Symfony\Component\HttpFoundation\Request))
#19 Enlight\Application.php(192): Shopware_Bootstrap->run()
#20 shopware.php(83): Enlight_Application->run()
#21 {main}

</div>
 

Installation dir

Hi,

the installation dir is currently in the master / community-branch which means that on a fork you cannot remove the install dir without Git going insane about it. Sure I can ignore it and never commit it but it would be nicer if there's a different way.
I'm thinking either a git submodule for initial setup which you can remove (or not fork at all).

Thoughts?

undocumented security flaw

the change from PHP clearing the cache to a shell script clearing it is undocumented, and also very insecure, as PHP has to be configured to (re)allow exec, a function disabled on most hosts.

Not accepted AGBs on checkout triggers confirm action even twice

If you register Enlight_Controller_Action_PostDispatch_Frontend_Checkout the event for confirm Action is triggered twice (but the action itself is correctly called only once).

This causes a serious issue in my extension :)

Steps to rebuild this issue:

  1. Download http://digitale-avantgarde.com/Example.zip
  2. Clear shopware cache & install the Example Extension
  3. Finish the checkout process but DO NOT accept the AGB
  4. Look your Chrome console printing out "Confirm was called" twice.

Language / Localisation setting derived from HTTP-Header instead of preference

Hey guys,
running a shop with German localisation set under 'Basic Settings/Shop Settings/Shop/' AND choosing 'Deutsch (Deutsch)' as language at backend login page it happens to me that some Snippet components (like 'Order status' or 'Payment status') appear still in English (see below).

Bildschirmfoto 2013-02-27 um 09 01 24

However, I figuered out that this behavior is due to the HTTP Post Header Line:
Accept-Language:en-US,en;q=0.8

On the other side, when my browser sends the following Line (different System):
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4

the Snippets appear in German though I choose 'English (United Kingdom)' at login (see below).

Bildschirmfoto 2013-02-27 um 09 43 36

Finally I would say that the language selection for (at least the above mentioned) Snippets is "broken", as user selection should overwrite browser default.

Prozentrabat für Artikel defekt

im aktuellen master sowie in der 4.04 Rev 6174 kann ich beim Prozentrabatt nichts eintragen.
Auch mit Pfeil hoch/runter ändert sich nichts.

"Zur Kasse gehen!" Button funktioniert beim zweiten mal nicht

Wenn man auf der letzten Seite vom Bestellprozess wieder zurück geht und erneut auf den Button "Zur Kasse gehen" klickt, funktioniert der Button nicht.

Firebug gibt mir folgende Meldung:

jQuery172009927556357087419_1349428699956("<h2><span class=\"frontend_error_exception\">Ups! Ein Fehler ist aufgetreten!<\/span><\/h2>\n\n\t<p>\n\t\t<span class=\"frontend_error_exception\">Die nachfolgenden Hinweise sollten Ihnen weiterhelfen.<\/span>\n\t<\/p>\n\n\t<h3>Template was not loaded failure in Enlight\/View\/Default.php on line 97<\/h3>\n\t\n\t<h3>Stack trace:<\/h3>\n\t<div style=\"overflow:auto;\">\n\t<pre>#0 Enlight\/View\/Default.php(179): Enlight_View_Default-&gt;Template()\n#1 Shopware\/Plugins\/Community\/Frontend\/SwagBackgroundImage\/Bootstrap.php(77): Enlight_View_Default-&gt;extendsTemplate(&#039;frontend\/plugin...&#039;)\n#2 Enlight\/Event\/Handler\/Plugin.php(149): Shopware_Plugins_Frontend_SwagBackgroundImage_Bootstrap-&gt;onPostDispatch(Object(Enlight_Event_EventArgs))\n#3 Enlight\/Event\/EventManager.php(156): Enlight_Event_Handler_Plugin-&gt;execute(Object(Enlight_Event_EventArgs))\n#4 Enlight\/Controller\/Action.php(147): Enlight_Event_EventManager-&gt;notify(&#039;Enlight_Control...&#039;, Array)\n#5 Enlight\/Controller\/Dispatcher\/Default.php(521): Enlight_Controller_Action-&gt;dispatch(&#039;ajaxLoginAction&#039;)\n#6 Enlight\/Controller\/Front.php(214): Enlight_Controller_Dispatcher_Default-&gt;dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp))\n#7 Shopware\/Bootstrap.php(79): Enlight_Controller_Front-&gt;dispatch()\n#8 Enlight\/Application.php(192): Shopware_Bootstrap-&gt;run()\n#9 shopware.php(74): Enlight_Application-&gt;run()\n#10 {main}<\/pre>\n\t<\/div>\n<div class=\"doublespace\">&nbsp;<\/div>");

Wenn ich das Plugin deaktiviere, funktioniert alles.
Das Problem gibt's auch, wenn andere Plugins aktiv sind. Scheint also nicht direkt an den Plugins zu liegen.

missing s_article_configurator_templates

Nach einer frischen 4.0.4 Installation fehlt die Tabelle s_article_configurator_templates.

Möchte ich einen Artikel anlegen wird nen Fehler ausgegeben aber der Artikel an sich angelelgt.

Im Frontend gibts dann die Meldung:

Ups! Ein Fehler ist aufgetreten!

Die nachfolgenden Hinweise sollten Ihnen weiterhelfen.
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'shopware_andys-musicshop.s_article_configurator_templates' doesn't exist in Doctrine/DBAL/Connection.php on line 628

Add config.php to repository

After cloning the repository it's not possible to execute the installer due to an requirement error.

The file config.php should be included in the repository or documented in the README.md.

Workaround:
touch config.php && chmod ug+w config.php

i18n in article data

Hey,

That Shopware ships with a multi-language backend and frontend is great. But we need also Multilang-Fields for the Database stored items, like Categories, Articles...

... just found the right options. Everything is already there :)

Versandart wird nicht übersetzt beim Checkout

Beim Checkout wird trotz Übersetzung die Versandart nicht auf z.B. Englisch angezeigt. Die Zahlungsart und das Lieferland werden korrekt übersetzt.

Getestet bei einer frischen Shopware 4.0.4 Installation.

Dies scheint ein Bug zu sein, deshalb denke ich, dass mir der öffentliche Forumssupport nicht helfen kann.

setPricegroup in Shopware\Models\Article\Price\Price does nothing

setPricegroup() references a property named priceGroup that does not exist. The associated column 'pricegroup' can only be set like:

 $groupRepository = Shopware()->Models()->getRepository('Shopware\Models\Customer\Group');
    /** @var Shopware\Models\Customer\Group $group  */
    $group = array_shift($groupRepository->findBy(array('key' => 'EK')));
$myPrice->setCustomerGroup($group);

Customer fields not overwritable

Due to the documentation, I should be able to change the labels of textfields in customer billings like that - but it has no effect.

This issue seems common, as I found multiple threads where people did not get it to work.

This is how i added the label:

+------+------------------------------+--------+----------+----------------------+----------+---------------------+---------------------+
| id   | namespace                    | shopID | localeID | name                 | value    | created             | updated             |
+------+------------------------------+--------+----------+----------------------+----------+---------------------+---------------------+
| 3130 | backend/customer/view/detail |      1 |        1 | billing/text_1_label | Testtest | 2013-06-13 00:00:00 | 2013-06-19 00:00:00 |
+------+------------------------------+--------+----------+----------------------+----------+---------------------+---------------------+
1 row in set (0,16 sec)

Previewing invoice PDF, getting: 'The identifier id is missing for a query of Shopware\Models\Shop\Currency'

Hey guys,
I just noticed that somehow the pdf invoice (same for other 3 document types) preview function (accessed trough: configuration/basic configuration/) is broken, as the following error is thrown:

Ups! Ein Fehler ist aufgetreten!
Die nachfolgenden Hinweise sollten Ihnen weiterhelfen.

The identifier id is missing for a query of Shopware\Models\Shop\Currency in Doctrine/ORM/ORMException.php on line 150
Stack trace:
#0 Doctrine/ORM/EntityRepository.php(116): Doctrine\ORM\ORMException::missingIdentifierField('Shopware\Models...', 'id')
#1 Shopware/Components/Model/ModelRepository.php(164): Doctrine\ORM\EntityRepository->find(NULL, 0, NULL)
#2 Shopware/Components/Document.php(461): Shopware\Components\Model\ModelRepository->find(NULL)
#3 Shopware/Components/Document.php(162): Shopware_Components_Document->setOrder(Object(Shopware_Proxies_ShopwareModelsDocumentOrderProxy))
#4 Shopware/Controllers/Backend/Document.php(115): Shopware_Components_Document::initDocument(NULL, '4', Array)
#5 Enlight/Controller/Action.php(135): Shopware_Controllers_Backend_Document->indexAction()
#6 Enlight/Controller/Dispatcher/Default.php(521): Enlight_Controller_Action->dispatch('indexAction')
#7 Enlight/Controller/Front.php(214): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp))
#8 Shopware/Bootstrap.php(79): Enlight_Controller_Front->dispatch()
#9 Enlight/Application.php(192): Shopware_Bootstrap->run()
#10 shopware.php(74): Enlight_Application->run()
#11 {main}

However, if I want to generate a invoice out of the order tab, it is working flawlessly.

Image Article import fails

So after having redone the import a few times to find out it's running in against the max execution time I've now raised that to 1 whole hour for the test enviroment only. However... not other stuff fails :) This is the HAR result from the Chrome Dev tools:
{ "log": { "version": "1.2", "creator": { "name": "WebInspector", "version": "537.17" }, "pages": [], "entries": [ { "startedDateTime": "2013-01-31T11:03:21.342Z", "time": 0, "request": { "method": "GET", "url": "data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==", "httpVersion": "HTTP/1.1", "headers": [], "queryString": [], "cookies": [], "headersSize": 97, "bodySize": 0 }, "response": { "status": 0, "statusText": "", "httpVersion": "HTTP/1.1", "headers": [], "cookies": [], "content": { "size": 43, "mimeType": "image/gif" }, "redirectURL": "", "headersSize": 13, "bodySize": 0 }, "cache": {}, "timings": { "blocked": 0, "dns": -1, "connect": -1, "send": -1, "wait": -1, "receive": 0, "ssl": -1 } }, { "startedDateTime": "2013-01-31T11:03:21.502Z", "time": 0, "request": { "method": "GET", "url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAASCAIAAAAVNSPrAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAJ0lEQVQIHQXBgQ0AAAjDoKX/3yxCaFss07ZYyNZZ6Ih1dDTrrKM7D9KDJfc8DkCSAAAAAElFTkSuQmCC", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Referer", "value": "http://4.shop.caramo.de/backend/" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17" } ], "queryString": [], "cookies": [], "headersSize": 369, "bodySize": 0 }, "response": { "status": 0, "statusText": "", "httpVersion": "HTTP/1.1", "headers": [], "cookies": [], "content": { "size": 117, "mimeType": "image/png", "compression": 130 }, "redirectURL": "", "headersSize": 13, "bodySize": -13 }, "cache": {}, "timings": { "blocked": 0, "dns": -1, "connect": -1, "send": 0, "wait": 0, "receive": 0, "ssl": -1 } }, { "startedDateTime": "2013-01-31T11:03:21.503Z", "time": 0, "request": { "method": "GET", "url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAASCAIAAAAVNSPrAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAK0lEQVQIW2NIePSf6d0fBqZb7xmY/v1lYPoPwv/QaCBm+IcmDsQMUHGgPgDs0yDjUYa+3gAAAABJRU5ErkJggg==", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Referer", "value": "http://4.shop.caramo.de/backend/" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17" } ], "queryString": [], "cookies": [], "headersSize": 377, "bodySize": 0 }, "response": { "status": 0, "statusText": "", "httpVersion": "HTTP/1.1", "headers": [], "cookies": [], "content": { "size": 121, "mimeType": "image/png", "compression": 134 }, "redirectURL": "", "headersSize": 13, "bodySize": -13 }, "cache": {}, "timings": { "blocked": 0, "dns": -1, "connect": -1, "send": 0, "wait": 0, "receive": 0, "ssl": -1 } }, { "startedDateTime": "2013-01-31T11:03:21.634Z", "time": 9, "request": { "method": "GET", "url": "about:blank", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Referer", "value": "http://4.shop.caramo.de/backend/" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17" } ], "queryString": [], "cookies": [], "headersSize": 202, "bodySize": 0 }, "response": { "status": 0, "statusText": "", "httpVersion": "HTTP/1.1", "headers": [], "cookies": [], "content": { "size": 0, "mimeType": "text/html", "compression": 0 }, "redirectURL": "", "headersSize": 13, "bodySize": 0 }, "cache": {}, "timings": { "blocked": 0, "dns": -1, "connect": -1, "send": -1, "wait": -1, "receive": 9, "ssl": -1 } }, { "startedDateTime": "2013-01-31T11:03:21.710Z", "time": 195623, "request": { "method": "POST", "url": "http://4.shop.caramo.de/backend/ImportExport/import", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Accept", "value": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" }, { "name": "Referer", "value": "http://4.shop.caramo.de/backend/" }, { "name": "Origin", "value": "http://4.shop.caramo.de" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17" }, { "name": "Content-Type", "value": "multipart/form-data; boundary=----WebKitFormBoundarylGLDm0fXUBqTPwTd" } ], "queryString": [], "cookies": [], "headersSize": 433, "bodySize": 279, "postData": { "mimeType": "multipart/form-data; boundary=----WebKitFormBoundarylGLDm0fXUBqTPwTd", "text": "------WebKitFormBoundarylGLDm0fXUBqTPwTd\r\nContent-Disposition: form-data; name=\"type\"\r\n\r\nimages\r\n------WebKitFormBoundarylGLDm0fXUBqTPwTd\r\nContent-Disposition: form-data; name=\"file\"; filename=\"images.csv\"\r\nContent-Type: text/csv\r\n\r\n\r\n------WebKitFormBoundarylGLDm0fXUBqTPwTd--\r\n" } }, "response": { "status": 0, "statusText": "", "httpVersion": "HTTP/1.1", "headers": [], "cookies": [], "content": { "size": 0, "compression": 0 }, "redirectURL": "", "headersSize": 13, "bodySize": 0 }, "cache": {}, "timings": { "blocked": 0, "dns": -1, "connect": -1, "send": -1, "wait": -1, "receive": null, "ssl": -1 } }, { "startedDateTime": "2013-01-31T11:06:07.329Z", "time": 30002, "request": { "method": "GET", "url": "http://4.shop.caramo.de/backend/login/getLoginStatus?_dc=1359630367329", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Referer", "value": "http://4.shop.caramo.de/backend/" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17" }, { "name": "X-Requested-With", "value": "XMLHttpRequest" } ], "queryString": [ { "name": "_dc", "value": "1359630367329" } ], "cookies": [], "headersSize": 295, "bodySize": 0 }, "response": { "status": 0, "statusText": "", "httpVersion": "HTTP/1.1", "headers": [], "cookies": [], "content": { "size": 0, "compression": 0 }, "redirectURL": "", "headersSize": 13, "bodySize": 0 }, "cache": {}, "timings": { "blocked": 0, "dns": -1, "connect": -1, "send": -1, "wait": -1, "receive": null, "ssl": -1 } }, { "startedDateTime": "2013-01-31T11:06:37.333Z", "time": 4, "request": { "method": "GET", "url": "http://4.shop.caramo.de/backend", "httpVersion": "HTTP/1.1", "headers": [], "queryString": [], "cookies": [], "headersSize": 46, "bodySize": 0 }, "response": { "status": 301, "statusText": "Moved Permanently", "httpVersion": "HTTP/1.1", "headers": [], "cookies": [], "content": { "size": 0, "mimeType": "text/html" }, "redirectURL": "", "headersSize": 32, "bodySize": 0 }, "cache": {}, "timings": { "blocked": 0, "dns": -1, "connect": -1, "send": -1, "wait": -1, "receive": 0, "ssl": -1 } }, { "startedDateTime": "2013-01-31T11:06:37.337Z", "time": 299997, "request": { "method": "GET", "url": "http://4.shop.caramo.de/backend/", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Referer", "value": "http://4.shop.caramo.de/backend/" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17" } ], "queryString": [], "cookies": [], "headersSize": 223, "bodySize": 0 }, "response": { "status": 0, "statusText": "", "httpVersion": "HTTP/1.1", "headers": [], "cookies": [], "content": { "size": 0, "compression": 0 }, "redirectURL": "", "headersSize": 13, "bodySize": 0 }, "cache": {}, "timings": { "blocked": 0, "dns": -1, "connect": -1, "send": -1, "wait": -1, "receive": null, "ssl": -1 } }, { "startedDateTime": "2013-01-31T11:11:37.334Z", "time": 3, "request": { "method": "GET", "url": "http://4.shop.caramo.de/backend", "httpVersion": "HTTP/1.1", "headers": [], "queryString": [], "cookies": [], "headersSize": 46, "bodySize": 0 }, "response": { "status": 301, "statusText": "Moved Permanently", "httpVersion": "HTTP/1.1", "headers": [], "cookies": [], "content": { "size": 0, "mimeType": "text/html" }, "redirectURL": "", "headersSize": 32, "bodySize": 0 }, "cache": {}, "timings": { "blocked": 0, "dns": -1, "connect": -1, "send": -1, "wait": -1, "receive": 0, "ssl": -1 } }, { "startedDateTime": "2013-01-31T11:11:37.337Z", "time": -1, "request": { "method": "GET", "url": "http://4.shop.caramo.de/backend/", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Referer", "value": "http://4.shop.caramo.de/backend/" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17" } ], "queryString": [], "cookies": [], "headersSize": 223, "bodySize": 0 }, "response": { "status": 0, "statusText": "", "httpVersion": "HTTP/1.1", "headers": [], "cookies": [], "content": { "size": 0, "compression": 0 }, "redirectURL": "", "headersSize": 13, "bodySize": 0 }, "cache": {}, "timings": { "blocked": 0, "dns": -1, "connect": -1, "send": -1, "wait": -1, "receive": -1, "ssl": -1 } } ] } }

Feeded CSV: Images are hosted on the original domain (the testing is a sub-domain, same server) and are readable. It imports a few images and then runs out of time.

edit: oddly enough it does continue to execute the import. The browser however is having issues figuring out if it is or not.
I don't know atm (didn't check yet) how the import tool does this. Does it feed 1 line of CSV per time to the script and wait for a respond or does it just throw a file and hope it works? Cause the progressbar just keeps running happily but isn't realistic at all :(

REST-API: create/update should return success state / no redirect

Each REST-Controller for post/put (repective create/update) ends with this code:

$this->View()->assign(array('success' => true, 'data' => $data));
$this->Response()->setHeader('Location', $location);

Please remove the last line. Returning the json-response ist a better way for the REST-client to determine if the action was successful.

REST Api SQL Error: Integrity constraint violation: 1062 Duplicate entry

Hi,

in the Table "s_article_configurator_options" is an index on "name" which is case insensitive.
The comparision in "engine/Shopware/Components/Api/Resource/Article.php" if an options already exists should be case insensitive, too (Line 529 in 4.0.5 release) to prevent SQL errors if you transfer "black" and "Black" as Option.

Feature Request: Wrap cart items in smarty blocks

Please add a smarty block to _default/checkout/cart.tpl around the lines 82-86, to make it possible to adjust the basket item listing.

{* Article items *}
{block name='frontend_checkout_cart_article_items'}
{foreach name=basket from=$sBasket.content item=sBasketItem key=key}
    {include file='frontend/checkout/cart_item.tpl'}    
{/foreach}
{/block}

Suggest feature branches for pull requests

Regarding issue 2: perhaps there was some misunderstanding. The common practice is:

I, as a community member, fork the shopware-4 repository from master. Then I create a feature/topic branch in my forked repository, contribute and commit code. If I'm ready to push it to the upstream, I then create a pull request for your master branch.

Please refer to https://help.github.com/articles/using-pull-requests for further details.

Core sArticles deprecated

Hi,

according to annotation in the sArticle Class: https://github.com/ShopwareAG/shopware-4/blob/master/engine/core/class/sArticles.php#L35 it's been deprecated.
However it's still being actively used by code and I wanted to modify this file itself. However since it doesn't (to me anyway, considering the only docs I could find on Shopware Extending were in German (which I understand most of the time :p)) seem to follow the other Classes in naming/extending I'm not totally sure how to Extend this file.
I need to do this cause I want to take function sGetCategoryProperties https://github.com/ShopwareAG/shopware-4/blob/master/engine/core/class/sArticles.php#L1247
And replace it with a modified version. I now for testing purposes just hacked it in and it works flawlessly but I'd like to release it as a Plugin :)

So two questions:

  1. What will replace sArticles
  2. How do I currently extend upon sArticles in a way I can release it as a Plugin? Referring me to docs is absolutely not an issue. I might have overlooked/not found the correct one.

Thank you

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.