Giter Club home page Giter Club logo

una's Introduction

UNA Platform

Unified Networking Applications

UNA Official Website GitHub license UNA All Releases Follow UNA Team GitHub forks

UNA is a Community Management System. The core platform is a full-stack framework for independent community websites and apps. With UNA content management, collaboration, e-commerce, learning and communication modules - aka UNA Apps - you can create communities of all types—from small interest groups to global social media networks.

screenshot

Key Features

  • Unlimited Scalability: Hundreds, thousands or millions - get as many users as your hosting can handle. UNA won't limit you.
  • Absolute Control: You own the data, you set the rules, you lead the community. We give you the tools and support.
  • Permissive License: MIT - the license allowing unrestricted commercial and private use, distribution and modification..
  • Continious Improvement: Regular security, performance and feature updates for the core platform, apps and integrations.
  • Collective Innovation: Improvements and revisions initiated and co-funded by the platform users community.
  • Integrations-Friendly: Intergate 3rd-party services as UNA apps or use UNA REST API to talk to your external apps.
  • Secure-By-Design: Full-site SSL encryption, SPD development, regular service updates and vulnurability audits.
  • Compliance Readiness: We offer HIPAA, GDPR, CCPA (and any other regulations) compliance preparation service.

Documentaion

To install and run UNA platform, you'll need to a web-hosting server or you can use UNA Cloud hosting for instant launch.

Download

You can download the latest installable version of UNA Core and install to your server. You will need to create an UNA.IO account and link it with UNA Studio to install and update UNA Apps.

Support & Development

UNA is managed by Yasko.Studio team and developed with the help of UNA Community.

License

MIT


Twitter @unaplatform


This project is tested with BrowserStack.

una's People

Contributors

alexeyuna avatar alextr avatar andreyasko avatar antonlv avatar dependabot[bot] avatar ph-7 avatar rednaxal avatar romanlesnikov 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

una's Issues

Persons: always create persons under account profile

This is needed because creation of one person profile under another person profile make no sense.
Also upon deletion - all profile content should be deleted, so it it cause that when you delete one profile - many profiles can be deleted.
Profile editing is also difficult because you need to switch to profile, you used to created this profile, but it is not even shown anywhere.

Time and Date

DATE TIME

  1. use only php time() function for all internal date - it generates unix timestamp and this time is GMT/UTC

  2. create function

  BxBaseFunction::timeForJs($iTime, $iFormatIdentifier) 

which will output:

  <time datetime="gmt-date" data-bx-format="custom-format" data-bx-autoformat="N seconds">gmt-date</time>
  • gmt-date - format it with gmdate php function (2011-11-12 14:54:39Z)
  • custom-format - LDML format - http://momentjs.com/docs/#/displaying/format/
  • data-bx-autoformat - will display "N time ago" date with autoupdate in runtime (set data-bx-autoupdate=1 for < 22 hours dates) if less than N seconds - now and provided date, then use specified format
  1. Create short version of BxBaseFunction::timeForJs:
bx_time_js
  1. it maybe that <time>text</time> will be better to display close to the actual date generated in javascript than UTC time ?

  2. for any dates displayed somewhere outside browser, use GMT/UTC dates, use bx_time_utc function

  3. use the following settings (use some predefined format which is already localisedzed for current locale):

  • datetime format in LDML format
  • date format in LDML format
  • time format in LDML format
  • number of seconds for automatic 'time ago' format, 0 - to disable automatic 'time ago' format

Timeline

Create Timeline module in D8 similar to Timeline/Outline in D71

  1. use one representation for Outline and Timeline (one common view will be close to outline view in D71)

  2. remove all unnecessary/unused code, or simplify existing if possible

  3. register change and delete events to make data in Timeline more actual

  4. make integration in modules more simple, now getWallPost, getWallPostOutline, getWallPostCommentmethods are too complicated. Try to make them more simple, move as more as possible functionality to Timeline module. Maybe separate 1 big method to several more simple and short methods. Use templates/css files from Timeline module, modules should use these predefined templates/css, but with possibility to create custom ones. 

  5. instead of friends updates in D71 (in account), use connections in D8, allow to use any connections object, by default use subscription connections (to be added soon).

  6. for public timeline show only public content, so it looks like you need to store content privacy in Timeline module

  7. for design refer to profile.png and profile2.png files in btsync

Views

View objects remake.

Notes

notes modules enhancements and fixes

Installer

New D8 installer

  • build-in audit
  • API support for automated/test installs
  • multilanguage

Developer Module Problems

  • page export - incorrect SQL fields
  • menu export - doesn't export 'copyable' database field, also this field is missing in main installation sql and maybe in some modules
  • add "name" and "uri" in edit page settings
  • "system title" named "system name" in edit page settings

Default sizes for thumbnails/icons

Use the following classes for default sizes of thumbnail and icon:
.bx-def-thumb-size
.bx-def-icon-size
It maybe that some other helper classes maybe required (for example: bx-def-thumb-size-max-height), but first try to use only these ones if possible

Unit tests

Add unit test for critical functionality, like installation.
Later add tests to CI.
Later cover more code with tests.
Now start writing test for newly added code!

Comments

Implement comments functionality similar to the functionality in D7.1.

I think that tables and BxDolCmts* classes should not be changed, but design can be rewritten, since it will look different and get rid of old staff. Add something to tables and BxDolCmts* classes if it is really necessary, if in doubt ask me (AlexT).

Try to use KISS (keep it stupid simple) principle.

Comments will look and work (from user side) similar to comments on boonex.com

Comments objects

Use same object as in 7.1 with the following changes

  1. Allow to configure number of levels: 0 - flat, 1 - one level of replies (if level exeeded add comment to the latest level (like boonex) (save real context/parent-comment always, to show "in reply of")
  2. Sorting: oldest first / newest first / rate
  3. Pagination: ajax pagination - but different number of comment in main thread and replies for each object (for example 50 comment in main thread and 5 comment in replies)
  4. Add setting to object to allow to change sorting and flat/threaded view in user interface
  5. Chars limit for each object: for posting (min/max) and for displaying (max) , if more than max chars are displayed, show 'more' link (don't cut words, use getStringWithLimitedLength func

Features

  1. Each comments thread have own page (by clicking on comment's time), like on boonex.com (with nofollow attr)
  2. No HTML, text only.
  3. Automatic link highlight.

User interface

  1. Show reply area inline, where it is going to be shown (for example if sorting latest first - show it in the beginning of thread, if oldest first - show it at the end of thread)
  2. Always show reply box by default.

Preview

note comments

JS/CSS in Template engine.

  1. cache two js/css files instead of one:
    • first js/css file will contain common files which are attached to every page. So it will be the same for all pages.
    • second js/css file will contain custom js/css files which are unique for most pages.
      Since those files are cached, first file will be the same for all pages and will not load again upon page reload, only small second js/css file will be different.
  2. Integrate CSS - LESS compiler.

Connections

TABLES

Connections table

  • id
  • initiator
  • content
  • mutual
  • added

Objects table:

  • id
  • object
  • table
  • type
  • override_class_name
  • override_class_file

METHODS Main

  • addConnection: initiator, content // automatically check and update mutual field based on connection type
  • removeConnection: initiator, content // automatically check and update mutual field based on connection type
  • getConnectedContent: initiator, is_mutual = false, start = 0, limit = N
  • getConnectedContentAsSQLParts: for using in SQL queries
  • getConnectedContentAsSearchResults: for using in SearchResults classes
  • isConnected: initiator, content, is_mutual

METHODS Additionals

  • getSuggestedContentAsArray: initiator, content, start = 0, limit = N // think of algorithm based on connections, consider situation when initiator can be undefined
  • getSuggestedContentAsSQLParts: initiator, content, start = 0, limit = N 
  • getCommonContentAsArray: initiator1, initiator2, start = 0, limit = N // mutual friends between two profiles
  • getCommonContentAsSQLParts: initiator1, initiator2 

EMAIL NOTIFICATIONS

smb connected to smth (one way)
smb want to connect to smth (mutual): same as above, but works as ”request”
smb connected to smth (mutual)
smb disconnected from smth: in case of mutual, send email to both

ALERTS

  • connection_added: pass some parameters to determine if it is mutual request/accept
  • connection_removed: pass some parameter to determine if mutual connection was deleted, most probably two alerts for both connections

Privacy

Leave old system but use it a bit different way.

1) get rid of evals in get_content field in sys_privacy_groups table and use methods markers, for example:

@public, @members, @friends, @me_only - it will call methods (privacyCheckPublic, privacyCheckMembers, privacyCheckFriends, privacyCheckMeOnly) in Privacy object

custom implementations of Privacy object can add new methods

*2) *There are different types of content which is shown on the site, I divided it into the following groups and described methods how to show this content, this approach will get rid of “padlocks” in browsing (almost):

a) global browsing - show only @public and @members content (private content will not be shown at all, even if user have permission to view it, but I think that pages/blocks with this content can be named appropriately to avoid confusion).

b) member-to-member content - check member-to-member relationship then get content based on this relationship, for example if two members are friends - then show @public, @members and @friends, as the result it will not be needed to check every item in browsing (it maybe some reverse methods will be needed for each group to identify that two members belongs to particular privacy group)

c) mixed content (like wall, timeline) - check on adding/editing and build custom lists based on this data, or use current system, this is custom module implementation , so I think there is nothing to do about this for now

d) search - use global browsing (pros: no locks, faster; cons: private content excluded from search), or old system with “locks” (pros: private content included in search; cons: slower, “lock” will be displayed, private content maybe predicted by search phrase) 

3) Remake sys_privacy_actions table (maybe it's will better to name sys_objects_privacy) and add table, table_field_id, table_field_author, override_class_name and override_class_file fields and rename to sys_objects_privacy. 

As the result the privacy can be called and checked somewhere else in external code using BxDolPrivacy::getObjectInstance('lalal'), not only in own module.

Responsive layout

Main principles of responsive design in D8

  1. Design page for mobile first, then adopt for tablet and PC
  2. Use em's for font size and for other sizes dependant on font size, def-font-* classes already uses em's
  3. Use media-*.css files to define elements for responsive design, but try to not add new classes and use already defined classes:
  • .bx-def-media-phone-hide - hide element on phone size screen
  • .bx-def-media-phone-show-block - show element on phone size screen
  • .bx-def-media-tablet-hide - hide element on table screen size screen
  • .bx-def-media-tablet-show-block - show element on table size screen
  • .bx-def-media-print-hide - hide element when page is printed
  • .bx-def-media-print-show-block - show element when page is printed 
  1. TODO: automatically resize images for different screen sizes/devices
  2. automatically rearrange page blocks for different screen sizes

Studio

Studio related fixes, improvements and updates.

Retina images support

automatically provide 2x bigger images for retina devices for all transcoder based images

PHP 5.4 compatibility issues

  1. PHP 5.4 doesn't allow to change parameters for overridden methods.
    Some of these problems are easily fixable, but some of them need more serious changes.

  2. There are a lot of places where static methods aren't declared as static but called as static.

Correct Permissions Check

Check for CHECK_ACTION_RESULT_ALLOWED must be checked with strict comparison check using:

===

and

!==

Persons Profile

Profile, with boxless design. Next two blocks, INFO and FRIENDS will go one under another.

First, let's use our new round Action buttons instead of buttons in splash screen. If they would perform well, we would need no buttons in splash.

Additionally, the site submenu in this case would also have additional items, like “[Andrew Boon]___ > ____Info_____Friends_____Notes“

profile2

Developer Module: add languages compilation

add new section to developer module and add language compilation links, example links:

  • restore/recompile language file
  • restore/recompile all modules languages
  • restore/recompile language files for specified module

maybe more/less recompilation/restoration links are required, implement available recompilation/restoration function

I think it should be implemented as Grid with list of all modules + some links above Grid for bulk actions or system wide language actions

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.