# FIXME general: you cannot create edges if disconnected from the internet # FIXME: look at removing ORM joins via: http://scottlobdell.me/2015/01/sql-database-best-practices-django-orm/ # FIXME: what's the difference between password_reset.html and password_reset_from_key.html, i.e. are both actually used? # @author Ron Newman ron.newman@gmail.com # DESIGN NOTE, creating path endpoints for analysis: # Provide a context menu to create Path Origin/End node. First thought: put these in the node context menu, and convert an existing node. But this # requires keeping node shape, color, etc. so that they can change back. Much cleaner: put it in the graph context menu, as if Path endpoint nodes are # a special case, which they are (you can only have one of each of them per map). # DESIGN NOTE: # To add an item to a context menu: # 1. Add an entry in Configuration.js # 2. Add a templates in RichGraph.html # 3. Add an entry in ContextualOperations.js, including the function, modeled after one of the others, which are wrapped in a client transaction. Be sure to # run the operation both in the transaction and in the client graph, for example graph.setNodeAttribute() (transaction sent to server) and graph.setNodeShape() (client graph). # The actual UI for the context menu is built dynamically in Controller.js # DESIGN NOTE: # New functionality is in two types: # 1. Client says it wants to do something (like create a node), and server authorizes the client to do that. # 2. Client asks for something to be done (prettify, analyze, layout). Server goes ahead and does the work first, then sends results to the client. # For #1, a 'jsToExec' string is returned, in a format the client understands, consisting of commands to be executed by the client (which typically turn around # and send requests to the server to do things. # For #2, the server returns a proprietary transaction, a list of commands, in JSON format. See misc.js or ContextualOperations.js and Configuration.js. # FIXME NEXT: # Spammers are getting through ReCaptcha to send messages from Contact form. # In demo map, disable the Upgrade Account link. # Editing a path origin crashes the system. # Changing a node shape to rounded rect isn't persistent. # Block card tests from happening on Stripe. # Check fonts in allauth pages now that they inherit from style.css # URGENT: bug in environ(): booleans aren't read correctly when using Apache # If user doesn't have permission to add a node, the error message doesn't get displayed, though sent in HTTP request." # Path Origin/End don't work when imported from Excel or from dot files. # Write test that dates on the node mouseover are correct. # Any problem with changing the domain name under Admin from ideatreelive.com to ideatree.net? Shows up in validation emails, for one. # Why two template directory trees? templates/account/email/ and templates/templates/ideatree/allauth/account/email/ But this one may be the only one used: ideatree/templates/ideatree/allauth/account/email/email_confirmation_message.txt # Menu 'Graph Summary' always uses 'Graph' when the term being used is 'Map'. # Warning Exception in def uploadFile() doesn't display a message to the user. # Is the management command to upload new users to mailchimp needed? # Clusters don't work on Excel import/export # Clusters don't work on dot export. (import works) # Support colors in Excel import/export. # Allow non-asci upload file names in Apache: https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/modwsgi/ # When a user account is cancelled, remove them from shared maps, friends, etc. # Why did I do pdf publish when there were already read-only maps? Consider going back! # Prompt when importing without choosing a file first. # Change mailing list name to IdeaTree.net in Mailchimp, then update the name in .env # Compare error handling in executeServerCommands() vs. _getImportExecCommands() vs. everywhere else. # Edge Weight help calls them 'Arrows' in menu but 'Edges' in the help text. # Is static/admin/js/vendor/jquery/jquery.js needed, since we have the minified version? # Fix social media share buttons in footer. # Some maps won't publish due to file permissions. # Empty map, try something, popup appears that you must create a node. In that that popup, return button doesn't work. # Undo fails to update the layoutengine variable in Map_desc. # Twopi layout trying to use prism, unsupported. # Revisit use case of initiatePull vs. mapLoader # graphviz: 'Prism' not available, falling back to ... # Make edges thicker. # Code cleanup in views.py # If fixedsize=true labels spill out of node. If false, labels are too small. Differs from PDF export and regular layout. # Simplify the multiple code for handling URL hashes. # URGENT: On each successive import in the same map, size and xpos values get progressively larger. When fixed, reduce node.size value back to 13 in Model. # URGENT: Verify that ACCOUNT_USERNAME_BLACKLIST is working, and if so, remove GUEST_USERID from .env and settings.py # Layout with some engines blows up tunnel nodes very large. # When map is full, give option to upgrade. # After user has upgraded from Free account, increment nodesleft on all their maps. # When retracting menus at top, increase height of remaining viewport. # Revisit permissions and group/user Id setting in views.py # If session times out, clicking Publish will bring up a popup with ugly login info or just refuse to Prettify rather than redirect to the login page. # Make production wsgi run as wsgiuser # When creating new map, if the word appears anywhere in other map names, it's not allowed. # 'Home' and logo link are not the same on sign-in page. # Double clicking an edge doesn't follow it, but opens a label box. # When map fills up, empty nodes are added, but left as active. # URGENT: when js issues "outgoing" and it comes back a 406, put up a message box. I lost an hour of work due to js errors that weren't showing up, and everything looked ok until reload, when they weren't in the db. # dbGarbageCollect doesn't clean map 27,31 on test Firebase # Persist comments and votes in Excel export/import. # Square nodes not saved. # Heavier edges # Named clusters in Excel imports. # Mouseovers are empty in empty nodes. # "graph xxx size too small for label" # captcha not catching all spam on contact us form. # Node change messages have duplicate "style" and "nodestyle". # Node change messages have duplicate "owner" and "ownerID". # Entering empty edge weight doesn't set to zero. # Show reason in user popup for timeouts. # pdf export fails for 'Ideatree Call Graph: simpleajax: import excel' # Successive Excel imports progressively changes zoom. # imports dir, exports dir, xx.json being written with root as owner (xx.gv and xx.layout ok) # erase output/xxx dir when logging out. # Export file name is shorter than graph name. # Mouseover label should be longer. # If import file not found, give a user message. # Renaming a graph does not propagate to tunnel nodes # Enable Ideatree.net domain. # Cluster name dialog saves name even if you click X # Reversing edge direction hides it under a connected node is moved. # On live site: 'testing' map shows chat with 'systemswiki' being online, also in Notify, but not in Teams. # Import Excel doesn't preserve nodes being inside clusters. # Excel validator. # Force empty-map function. # Prettify doesn't preserve hidden nodes in clusters. # pdf export inserts a name into cluster # Server 500 when logging in 'info@myideatree.com' # Check garbage collection of map #1 on live Firebase. # Understand diff between Stripe Subscription and Product with a subscription plan. # Nodel label font sizes. # Reset button for edge color, or prompt to use Undo. # Configure apache2 on server for secure caching. # Do security scan. # Check map size limit BEFORE provisionals are allocated. # With a very large map, Prettify puts up message: "You can create a topic by dragging one of the icons at the upper right to this area.". # New node created by map context menu can't have label edited. # New node created by map context menu can't have comments added. # If there's a map 'Test for Ron', it won't allow you to create a new map 'test' # Map name entry should only allow 1 line # URGENT: remove firebase dir from static dir on host # URGENT: block inline scripts using CSP # FIXME URGENT: check that whos_viewing_map table has unique viewer ids # Numerous 'FIXME URGENT' fixes. # New node doesn't get a mouseover even though it says 'Hover Here' # Put up spinner on cancel account while waiting for Stripe. # Tell somewhere that shortest paths don't take clusters into account. # A cluster with nothing inside it is mistaken for a node. # Delete one of initClientPermissions.py or initPermissionsTable.py # Export sets the view to dialog, making the map look like it's disappeared. # Check that edge colors are never assigned an opacity value. # If you don't own the map, you can't swap direction of an edge. And if it refuses, no message to user given (should be Warning). # Tunnels can't edit description or label # Add clearsessions to garbage collection cron job. # timeToExpiration error if user is not free account # Prevent negative or string values in edge weights. # Prevent edge weight values over 32767. # Echo current edge weight in entry form. # Mailing list link at bottom of page goes to page with missing image. # Require normal login before admin: http://django-allauth.readthedocs.io/en/latest/advanced.html # url.py path for map pull isn't capturing the map id # Make upgrading isolatable from the open source code. # Cancel account button in My Account # Return To Map button in Import Excel # Revisit warning on signup.html if Edge actually does work # output directory not allowed when apache rebooted # Implement CleverCSV for csv imports. See bookmarks under 'Python'. # Standardize pdf links to open new page. # Cancelling from LinkedIn login brings up allauth error page with 'Error:none'. # Auto-add new sign ups to mailing list. # Undo of Path End creation just changes the shape. # Write tests for all the actions in executeServerCommands() # Does production postgresql ever have to be vacuumed? # Sign in page: make initial focus in email form # demoMap works on site but not in test. # Figure out how to filter naughty strings in tests.py. # Reinstate security settings in settings.py. # Make clusters work on Excel import/export. # Shapes/clusters for excel export/import. # Extraneous [] chars on Delete File. # Put up spinner on excel import. # Make excel import under one transaction. # Make download pdf work, and clear the dialog and put up status message while it works. # Captcha not being required on Sign Up. # Make top-page arrow more obvious # Minimize cluster while maintaining edges from all nodes that lead to within it? # Show instructions on how to minimize a cluster. # Superfish menus won't work if there's no internet connection and firebase load fails. # Both tables whosloggedin and whosviewingmap needed? # Warning that a linked-to map is inaccessible erases the current graph, and Refresh does not bring it back, but you can reload it. # Write test of initPermissions table that no more than one of these exists for every methodName: ClientPermission.objects.get(action=methodName, iown=iOwn) # Write tests of Warnings for every def. # The acknowledgement after contactus: "Your message has been sent successfully. Thank you! We'll be in touch shortly.", is completely unformated, and should provide a "You can close this window." prompt, too. # Find out why/where a json file is generated during layout, in addition to a .gv and .layout file. And rename .layout to what format it really is. # In Voting summary: 'Function reserved for creator of this map": Cancel button doesn't work. # Following tunnel to a map that doesn't exist: 'You don't have access', but then doesn't return you to where you were, or to any map. # Write test for doing shortest path analysis with improper negative edges. # Write test that map requested is actually the one that's opened. # Write test that deleted vote doesn't show up in vote summary, even as 'None'.. # Write test for if votable is deleted its votes are deleted, too. # Write test for naughty strings. See https://github.com/minimaxir/big-list-of-naughty-strings # Change allauth's confusing connect-to-account message. # Write test for hanging edges in db. # Write test for reversing directions of an edge. # Write test for creating path origin/end when an origin/end already exists. # Make superfish menus fall back to local if CDN is not available. # both initClientPermissions.py and initPermissionTable.py exist. Which one is correct? # Db for client dumps. # Map background colors appears to be mostly transparent. # Give minimum to graphviz node separation # Prevent coincident edges in graphviz # Obscure bug in outline layout of map that has double-nested loops # Test all Warning exceptions. # Warning message if delivered to screen instead of popup is too big and shows tags and needs 'Return to Map' button. # Make tooltips always keep a wide margin from the edge of the viewport so they don't prevent using the mouse, or else never covering the node they represent. # Bottom row of shapes won't work on Edge. # Why does Friend table have email field? allauth keeps it in two other places. # Tunnel to non-existent or name-changed map. # FIXED ------------------------------------------------------------- #3.0.16 # Remove 'Upgrade' links when user is already a paid user. # Stripe integration revisited, improved. # Add message to prettify after importing, or figure out how to do it for them. # Import/Export dot files. #3.0.15 # Make node labels wrap and also overflow:none. # Remove Outline graphing # Remove far end of tunnels. # Make default node size larger. # PDF Export flips Y axis. # Don't allow publishing for map you don't own. # Change wording for notice that Radial and Circule don't support clusters. # Warning when publishing about security. # UnPublish # Don't publish 'Hover Here' labels. # Change edge 'weight' to 'cost' for shortest path analysis, retaining 'weight' for graphviz layout. # Support edge labels, including cost, in publishing. # Larger font size in publish. # Show message on the public publish page if the graph was unpublished. #3.0.14 # What should the permissions be on templates? # Reverse edge direction after prettify fixed. # Defer writeHashToURL until DOM loaded. # 3.0.13 # Got trial days working. # Warnings that Safari not supported # Use last layout parameters for pdf export. # twopi, circo, and fdp layout. # Copy ssl.conf to production. # SECURITY: Enabled stronger SSL ciphers. # SECURITY: disabled SSLv3, TLS1.0, and TLS 1.1, resulting in 'A' rating from SSLlabs.com # SECURITY: in conf-available/security.conf, disabled being embedded in a frame # Allow ID to be specified instead of label in import Excel. # Preserve all node attributes in Excel import/export # Nested clusters in Excel imports. # Tunnels imported from Excel don't delete far node when it is itself deleted. # Appended random num to ideatree.js loads to prevent caching. # 3.0.12 # Updated to compatibility with Ubuntu 18.04 (required updating Django to 2.2 and psycopg2. # Removed style tags, replaced with css classes. # Archived video stuff. # Change 'IdeaTreeLive' to 'IdeaTree' # Put final / on links. # Made logo and 'home' links go to /ideatree/map/, which redirects if not logged in. # Captcha not being required for ContactUs form. # Captcha not being required at sign up (tabled). # Stripe integration # Set more secure file permissions. # Ideatree title is out of place on login/logout page. # Double quotes in edge label aren't escaped. # Formatting of logo on signup page. # 'Blind' blue arrow pulldown icon shows through popups. # Endpoint nodes for Shortest Path analysis always have black font in export pdf. # Contact Us says it goes/comes from info@ but really it's ron.newman@ # More consistent use of 'map' vs. 'graph'. # Edge color not changing. # My Account needs Back to Map button. # After successful contact us, show a nice page. # Contact Us from within map looks like it leaves map but is still signed in. # Made Firebase switchable between development and production databases # fillcolor in nested clusters # Node description being lost. # Node size lost when exporting or prettifying. # Nodes pop out of clusters after prettify. # Edge labels overwritten by nodes. # Export: pdf looks roughly like the live site. # Neato and fdb layout engines (graphviz) don't handle clusters correctly. Dot doesn't handle 'pos' or 'pin', so exports don't look like the display. # Prettify places clusters incorrectly on TB, BT orientations. # Deleted from git: ideatreeEnvOld, ideatreeEnv, venv, and all json files (to remove Firebase login credentials) # 3.0.11 # Fixed map hash issues. # Reinstated separate common_meta.html file for map_base.html # Removed construction demo elements. # 3.0.10 # Fixed jQuery 'unexpected token '<' error: openMap was sending content_type javascript instead of html type. # Fixed 'firebase.auth' not a function (new firebase needs separate module loads) # Fixed 'firebase.database' not a function # Fixed missing favicon # Removed common_meta.html head directives and put them in map_base.html # 3.0.9 # CSV I/O to vibrantdata (openmappr.org) # 3.0.8 # Override of issueJsExec action to correctly do node description. # 3.0.7 # Fixed chat. # 3.0.6 # Batch excel import commands into a single transaction. # Integration test of import/export. # Gene's excel export from Kudu.io fixed for import/export. # Chat not working. # Clean fields in createNode. # Clean fields in createEdge. # Install Google Analytics. #3.0.5 # Fixed demo map not coming up. # Fixed context menu node creation broken after other code changes. # Fixed saving node description broken after other code changes. # dbGarbageCollect doesn't delete stale chats. # Top line menu: 'Zoom-fit' instead of 'Refresh' # Find popup has wrong word for 'Node'. # Mistaken identities of nodes with identical labels in excel export/import. # Take 'Create Edge' out of the map context dialog. #3.0.4 # Each paragraph indicates a git commit. # intermittent addChild javascript error on sign in. # if you follow a tunnel to a map you don't have access to, it needs a return to the current map button. #3.0.2 # first attempt to prevent intermittent appendChild() error in NodeShapes.js: move dom element up earlier in map_page.html. # larger form input font size in allauth css # bug in mapOpen with account expiration variable # use currently_opened_map() instead of explicit map open checks. # Larger type for outline map output # re-fixed signout and home page links on map page. # standardized form of hrefs in map_page.html # if user has only the default map, it shows up twice on Open Map. # Fixed: share map fails if friend has both deleted (pending garbage collection) and accepted entry. # 'Share Map' shows all your shares. Make prompts clear about that. # Fixed: 'Share Map' shows shares by everyone, not just you. # simplified all_accessible_maps() query (reported in previous commit, but not actually done). # make signout correctly call django logout() # placeholder for login changed to 'email' # verified_email_required decorator added # all_accessible_maps reduced to one query # save some image base pieces # some FIXMEs added # Restyling of allauth screens. # Captcha # Contact forms won't accept input. # Favicon # Temporarily remove blog link from home page. # Remove outdated video. # Change account upgrade instructions. # After new map, reports that user doesn't have access. # Bug fix in Map Open button after map create, make it write a URL hash. # 'Cards remaining' prompt in tunnel dialog much smaller. # Bug fixes for layout with nested clusters. # Handle _draw_:null being sent from client on first node move after a layout. # Catch 'null' edge draw arguments sent from client. # 'Remove' becomes 'UnShare' in 'Share Map' # Allauth login screens re-design. # Streamlined stripping of spaces from attributes. # Upgraded from Django 11.5 to 2.0.2 and allauth from 0.33 to 0.35 # Trim edge labels before saving # In Outline, show edges as italic, with arrow before and after, and not in parentheses. # Some popups don't have grey header in drag bar. # Firebase logout. # Security rules on Firebase. # Firebase token refresh after expire. # Blog link. # Make node default work. # Minor bug fixes and better Exception handling in _doHandler() # Refined arguments presented to funcs in _doHandler() # Prettify won't draw edges. # Tunnels broken after all_accessible maps change. # 'Blind' effect the top of the screen. # Width of viewport. # Hands-free zoom. # Ellipses appear in tooltips even when label isn't long. # 'Maps you've already created' in New Map doesn't keep up to date. # After deletion of map, give map open button. # After new map, provide button to open it. # handle putNodeInCluster change message. # Comments: only show header in popup if there are comments. # Just get rid of the "Create More of These" popups. Too big. # Get rid of map color change. No way to get back to white. # Group label edit. # Drag-in links # Garbage collection for firebase. # Open map: change font to show owned vs. shared. # "cancel" and return to map buttons. # Trying to rename a map you share crashes. # Show username at top of page. # Team stuff: sharing, notification, chat. # Pyrebase code removed. # Coronas don't work after first creation of node. # pass vars in changeMessageHandler rather than globals. # removed previousfarendmap field from Node model # Map settings aren't loading on sign-in # Remove transparency slider in color wheel # Color selector puts up spinner that doesn't go off. # Restore Defaults doesn't work on settings. # Adding a node description creates a new node. # Tunnel creation not saying when there's nothing to tunnel to. # numcomments not loaded on map load. # Tunnel deletion not removing connected edges at far end. # Use change message parser in main change message loop. # Trim error on client for new tunnel. # Tunnel creation/deletion not going to separate Firebase channels. # Refactor change message handling, esp. for tunnels. # Reposition a tunnel, target node isn't created. # Reposition a tunnel, previous target node isn't deleted. # 'Browser does not support changing maps by this method' comes up when trying to reload a map with a hash in the URL, and that map has been deleted. # Fixed Firebase event sending empty data. # Removed docket 'click' tab # Tooltip owner # Limit height of comment popup. # Delete button on Comment "Are You Sure" template. # Comment tally not being sent to firebase. # Re-design of comment mechanism. # warning for tunnel to non-accessible map # prettify loses edge on RL orientation # mouseovers on tunnels # warning doesn't work in prettify. # time zone on comment time # positions of things on map load # sizing of nodes after prettify # button to turn off bubble help # UserProfile automatically generated when new User created. # Export to PDF # Docket not working. # More home page rewording (others also done but not listed above). # Voting doesn't work. And improved security by running input thru a form. # If vote record has been deleted, vote summary shows as 'None'. # When votable node deleted, delete its votes. # Map load just reloads current map. # Make allauth template pages go to landing page, or to map page, from 'Home', depending on login status. # Adjusted position of 'IdeaTree' in logo html. # If you delete a tunnel that goes to a graph to which you no longer have access, it brings up a warning. Should just delete this end and leave the other. # reloading a map loses minimized branch info, still shows the nodes and the cloud icon both. # Many unit tests. Coverage considered essentially complete for now. # Populate MyAccount with existing First/Last name. # Help screen for pdf export. # some weights don't survive reload # tunnelDialog allows tunneling to the current map # New feature: node comment sends email notifications if checkbox selected.