{"action":"closed","issue":{"url":"https://api.github.com/repos/concrete5/concrete5/issues/6447","repository_url":"https://api.github.com/repos/concrete5/concrete5","labels_url":"https://api.github.com/repos/concrete5/concrete5/issues/6447/labels{/name}","comments_url":"https://api.github.com/repos/concrete5/concrete5/issues/6447/comments","events_url":"https://api.github.com/repos/concrete5/concrete5/issues/6447/events","html_url":"https://github.com/concrete5/concrete5/issues/6447","id":298498573,"number":6447,"title":"Sites, SiteTrees and Pages","user":{"login":"mlocati","id":928116,"avatar_url":"https://avatars3.githubusercontent.com/u/928116?v=4","gravatar_id":"","url":"https://api.github.com/users/mlocati","html_url":"https://github.com/mlocati","followers_url":"https://api.github.com/users/mlocati/followers","following_url":"https://api.github.com/users/mlocati/following{/other_user}","gists_url":"https://api.github.com/users/mlocati/gists{/gist_id}","starred_url":"https://api.github.com/users/mlocati/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mlocati/subscriptions","organizations_url":"https://api.github.com/users/mlocati/orgs","repos_url":"https://api.github.com/users/mlocati/repos","events_url":"https://api.github.com/users/mlocati/events{/privacy}","received_events_url":"https://api.github.com/users/mlocati/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":2,"created_at":"2018-02-20T07:46:36Z","updated_at":"2018-02-28T23:15:56Z","closed_at":"2018-02-28T23:15:56Z","author_association":"COLLABORATOR","body":"AFAIK, concrete5 page structure is currently organized in:\r\n- *Sites*: even if at the moment there's no way to handle it, a single concrete5 installation supports multiple sites. Sites are listed in the `Sites` database table.\r\n- *Site Trees*: every site has one or more site trees, each one consisting in a multilingual section. SiteTrees are described in the `SiteTrees` + `SiteTreeTrees` database tables (persisting the `SiteTree` entity) with a 1:1 relation with the `SiteLocales` database table\r\n- *Pages*, that are associated to Site Trees (via the `Pages`.`siteTreeID` database column). Pages that are not site-specific have a value of `0` in the `siteTreeID` column.\r\n\r\nCurrently:\r\n- the \"system\" pages that are not site-specific are:\r\n  - the dashboard pages\r\n  - stacks and global areas\r\n  - the trash\r\n  - account pages (`/account` - but not `/account/welcome`)\r\n  - the file download page\r\n  - the login page\r\n  - the page forbidden page\r\n  - the register page\r\n- the \"system\" pages that are site specific are:\r\n  - the `/account/welcome` page\r\n  - the drafts\r\n  - the page not found page\r\n\r\nI know absolutely nothing about handling different Sites in the same instance (no public information, no helper class, ...), but the above structure about Site Trees seems to have the following problems to me:\r\n\r\n- why all the `/account` pages are not site-specific, but `/account/welcome` is? Is this wrong?\r\n- why pages like \"page forbidden\" are global but \"page not found\" is site-specific?\r\n- having drafts depending on the site trees leads to big problems:\r\n  - why are them language specific?\r\n  - what if someone deletes a multilingual section? Drafts will loose the link to the site ([here's the result](https://github.com/concrete5/concrete5/issues/6445)).\r\n  - I'd make drafts depending on the site, not on the site tree (so, I'd add a `Pages`.`siteID` column)\r\n"}}
{"actor":{"display_login":"aembler"}}