Commit Graph

280 Commits

Author SHA1 Message Date
Ashesh Vashi
3ca29b18b5 Resolved an issue related to quoting the wrong keywords for the types.
It was due to wrong index used for the COL_NAME_KEYWORD, used by the
'needsQuoting' function.

Also, replaced a tab with a space in the generate_keyword.py file.

Reported by: Sanket Mehta, Khushboo Vashi
2016-02-05 10:15:23 +05:30
Ashesh Vashi
71a69f1dd4 Adding the Tablespace node
Author: Murtuza Zabuawala
Reviewed by: Neel Patel, Ashesh Vashi
2016-02-05 09:51:02 +05:30
Ashesh Vashi
91c0388a47 Adding the Login/Group Role Node.
Also - includes:
* Added 'parent_id' in the 'generate_browser_node' function of the Nodes
  to allow them to move around the parents objects (specially through
  update/save functionality).

* Handles the issue related to adding the older object back to the
  collection (DataModel).

Author: Ashesh Vashi
Reviewed by: Neel Patel, and Akshay Joshi.
2016-02-05 09:48:38 +05:30
Harshal Dhumal
3ff77e9866 Common functions to convert the privileges format to/from the database
server.
2016-02-04 21:02:15 +05:30
Murtuza Zabuawala
359dff0f78 Fixed the NodeAjaxOtionsControl formatter, which was causing malformed
string, when have special character.
2016-02-03 16:41:28 +05:30
Murtuza Zabuawala
79cd9d518c Modified the variable jinja2 macros to allow to set/reset multiple
options in a single command, instead of multiple commands.
2016-02-03 16:35:46 +05:30
Khushboo Vashi
e90fef7b5b Fixes an issue in the backform schema generation logic to allow to use
the NodeAjaxOptionsControl in the subnode grid.
2016-02-03 16:27:15 +05:30
Neel Patel
8a06d5bd54 Remove a duplicate code line and add Windows environment setup info. 2016-02-03 09:58:58 +00:00
Ashesh Vashi
fc676efa30 Do not trigger 'pgadmin-session:invalid' event, when a child object do
not have any validation error, or the validation error message is null.

Thanks Murtuza for find out the root cause.
2016-02-02 19:42:50 +05:30
Murtuza Zabuawala
e9497687d0 Adding the macros to set variable options for objects other than Role. 2016-02-02 19:40:00 +05:30
Neel Patel
efc8815ecb Update the runtime to properly support Windows. 2016-02-02 13:16:01 +00:00
Murtuza Zabuawala
14583e68b2 Allow to run the transform to be evaluated as function in the NodeAjaxOptionsControl 2016-02-01 16:37:05 +05:30
Harshal Dhumal
b77c5a6c54 Python 2.6 support fixes. 2016-01-27 15:59:54 +01:00
Neel Patel
d6d8a2348e Fix tab auto-hiding to work with Qt < 5.4. 2016-01-26 10:03:15 +00:00
Dave Page
39e822e846 Further nice-ification of the runtime UI. 2016-01-25 17:21:00 +00:00
Dave Page
f1f09242ed Set the window title. 2016-01-22 14:24:06 +00:00
Dave Page
af742011a5 Further UI improvements for the runtime. 2016-01-22 14:24:06 +00:00
Harshal Dhumal
c421bef0d0 Changed the Unique Columns of the Variable Control based on the input
from the user.

i.e.
Set the uniqueCol as ['name', 'role'] in case of hasRole is set to true
in schema for it, ['name', ['database'] in case of hasDatabase is set to
true, otherwise ['name'].

Also - fixed a typo in the callback function headerDataChanged(..).
2016-01-22 18:19:13 +05:30
Harshal Dhumal
d0f7e69ad7 Added two jinja2 template macro for support for priviliges and default
privileges.

Also, made a change in the privilege.js to scroll the div to make the
opening div visible properly.
2016-01-22 18:07:12 +05:30
Harshal Dhumal
7f3c972d06 Resovled a typo in rendering the NodeAjaxOptionsCell about getting the
options from the column schema for the cell.
2016-01-22 13:23:09 +05:30
Sanket Mehta
0eadd92a7f Fetch the last system oid for the database connection too. 2016-01-22 10:38:02 +05:30
Ashesh Vashi
0a21beca17 Resolved a typo in the psycopg2 driver, qtTypeIdent checking the wrong
list, because - in specific type match comma (,) was missing.
2016-01-21 16:54:40 +05:30
Harshal Dhumal
8f18ff04ae Fix border display issue in unique column collection 2016-01-21 09:11:14 +00:00
Harshal Dhumal
c6cfad4f01 Fix minor status bar display issue. 2016-01-21 09:10:00 +00:00
Dave Page
b39943e3ff Fix comment 2016-01-21 09:07:48 +00:00
Harshal Dhumal
720a9c819b Resolved a typo in the datamodel javascript. 2016-01-21 12:25:31 +05:30
Murtuza Zabuawala
d2f6135a98 [Python 3] Fixed the issue processing the request data (decoding issue)
for UPDATE operation of the server node.
2016-01-21 12:24:20 +05:30
Ashesh Vashi
ba4a6faaa4 Resolved a typo in the frame javscript 2016-01-20 20:23:59 +05:30
Harshal Dhumal
422bad4394 Allow the privileges control to work properly. Resolved few typos and
trivial bugs within the privilige control.

i.e.
- Do not show 'ALL' for only one privilege type.
- Show correct privilege label in PrivilegeEditor.
- Typo in TEMPORARY privilege.
- Added missing toJSON function call, while calling the parent's toJSON
  function.
2016-01-20 20:23:23 +05:30
Ashesh Vashi
3b1bbe55fa Model needs to update the parent collection object, that - it has been
modified, and please do the needful.

This allows us to track down the nested objects within the nested
objects.
2016-01-20 20:17:30 +05:30
Surinder Kumar
4f4ce74518 Setting a missing parameter - 'empty_value' in NodeAjaxOptionsControl 2016-01-19 19:20:14 +05:30
Ashesh Vashi
8120b380bb Introduced a event manager for the browser, which will generate certain
known events, when any activity happens on the browser layout.

The following types of events will be triggered through the browser
event manager.
- pgadmin-browser:frame:* [1]
- pgadmin-browser:frame-<name>:* [1]
- pgadmin-browser:panel:* [1]
- pgadmin-browser:panel-<name>:* [1]
- pgadmin-browser:panel
- pgadmin-browser:frame
- pgadmin-browser:tree
- pgadmin-browser:tree:* [2]

[1] The '*' denotes some of the events generated by the wcDocker, which
    can be useful to do some operations.
	These events are:
	+ wcDocker.EVENT.UPDATED
	+ wcDocker.EVENT.VISIBILITY_CHANGED
	+ wcDocker.EVENT.BEGIN_DOCK
    + wcDocker.EVENT.END_DOCK
	+ wcDocker.EVENT.GAIN_FOCUS,
	+ wcDocker.EVENT.LOST_FOCUS
	+ wcDocker.EVENT.CLOSED
	+ wcDocker.EVENT.BUTTON
	+ wcDocker.EVENT.ATTACHED
	+ wcDocker.EVENT.DETACHED
	+ wcDocker.EVENT.MOVE_STARTED
	+ wcDocker.EVENT.MOVE_ENDED
	+ wcDocker.EVENT.MOVED
	+ wcDocker.EVENT.RESIZE_STARTED
	+ wcDocker.EVENT.RESIZE_ENDED
	+ wcDocker.EVENT.RESIZED
	+ wcDocker.EVENT.SCROLLED

[2] The '*' denotes all the events generated by the Browser Tree
    (aciTree).

The extension modules can utilize these events to do some operations on
nodes, and panels.

This patch includes showing 'Reversed Engineered Query' for the selected
node (if allowed) using the above approch.

The ShowNodeSQL module looks for two events.
1. SQL Panel Visibility change.
   - Based on the visibility of that panel, we start/stop listening the
	 node selection event.
2. Node Selection in Browser tree
   - Based on the selected node type, it will look for 'hasSQL'
	 parameter of the node, and fetch the Query from the server, and
	 show it in the SQL editor.
2016-01-19 18:18:47 +05:30
Ashesh Vashi
0cea682e88 Initialize and parse the neseted schema too.
Renamed the type of the nested schema type to 'nested' from 'uiLayout'
to be more relatevant.
2016-01-19 17:54:39 +05:30
Dave Page
7c9347873f Use a custom configuration dialogue and allow the user to specify
the application path as well as the Python path.
2016-01-19 10:26:36 +00:00
Ashesh Vashi
2acba32c86 Moving the data model and collection to separate module for better code
handling.
2016-01-19 10:16:02 +05:30
Dave Page
694506453b Copyright updates for 2016. 2016-01-18 14:48:14 +00:00
Neel Patel
8f146ebb4c Support tabs in the runtime browser.
Added functionality to open different website link and load the
website data to different tab. To achieve this, new customized
QTabWidget and QWebView are added to render the data to WebView
widget. All the widgets (New Tab, WebViewWinodw, and QToolButton)
are added dynamically. QToolButton is used to traverse back and
forward to web document opened in WebViewWindow.

Introduced the New class called WebViewWindow which is derived
from QWebView. Each tab of the QTabWidget contains the instance
of WebViewWindow class. WebViewWindow class is useful to display
the web document.

Introduced New class called TabWindow which is derived from
QTabWidget. This class is useful to achieve following functionality:
  - Customize the close button of tabbar so that it can only be
    visible other then main pgAdmin 4 window.
  - Enable/Disable the toolbutton added left side of tabbar
    depending on the web history traversed by the user in WebViewWindow.
  - Set the tooltip text of the tabbar depending on the title change
    event of WebViewWindow class.

Modified the Qt project file to support the both the version
of python 2 and python 3.

Qt5 is recommended to test pgAdmin4 in dektop mode.
2016-01-18 14:33:28 +00:00
Dave Page
94bed721bd Bump the version requirement for Flask-Gravatar to 0.4.2.
This version has been restructured and plays nicely with our runtime.
2016-01-18 13:27:40 +00:00
Ashesh Vashi
d9f349b60b Chagned the variable control to use the new format of
generateSchemaView(...) output. Also, set the value in proper format
before rendering them using DynamicVariableCell.
2016-01-18 14:49:40 +05:30
Ashesh Vashi
7e621c9d7f Using the new logic after using generateViewSchema(...) function for
generating schema properly for the collection for rendering the grid.
2016-01-17 22:31:54 +05:30
Ashesh Vashi
0edf29b534 Fixed the missing translation in the 'Connetion' group, while defining
the schema.
2016-01-17 22:21:59 +05:30
Ashesh Vashi
6a071292aa Adding two new controls tab and fieldset for better layout management
used in some of the nodes.
2016-01-17 22:21:05 +05:30
Ashesh Vashi
e7bcba0050 Send the consistent data from both menus and context menus. 2016-01-15 19:46:45 +05:30
Murtuza Zabuawala
45240f3850 Use the same schema parameter 'visible' instead of separate one (i.e.
show) for both control and cell, while generating the columns and field
Schema. And, it was resulting into wrong behaviour because of that.

Also - includes the server changes, which was using 'show' parameter
earlier for showing version, when server was connected.
2016-01-15 19:26:03 +05:30
Harshal Dhumal
4e5e7755b5 Make the privilege control to work as expected. Using the
NodeListByNameCell for selecting the grantee.

This patch includes:
- Change the RolePrivilegesModel schema to allow to use the
  NodeListByNameCell for showing grantee, and granter information.
- When setting some value - do not use the silent flag in Select2Cell, which
  will allow the session manager to take the value in account, which is
  used by the NodeListByNameCell.
- Set the top object in the children of the UniqueControl collections.
  [Ashesh Vashi]
- Pass on the node information to the actual data model, so that - we can use
  node information by the control itself. [Ashesh Vashi]
- While adding the new privilege, set the granter to the current user.
  [Ashesh Vashi]
2016-01-15 19:10:49 +05:30
Harshal Dhumal
1ce0db3b58 Introducing NodeAjaxOptionsCell, NodeListByNameCell, NodeListByIdCell
for using them with Backgrid.

It has similar functionality which we have done for fetching node
options for select2 cell using ajax at the time of initialization to use
it with Backgrid.
2016-01-15 18:25:34 +05:30
Ashesh Vashi
3a06758b94 Integrate the new mechanism for the data session management in the
variable control, privilege control, which specifies the keys - which
helps identify the data from the collection. Also, resolved an version
compatibility issue with the variable control.
2016-01-15 16:47:22 +05:30
Ashesh Vashi
586b81b162 Data management within the properties dialog in Create/Edit mode is not
done using the Backbone event management.

Emitting 'pgadmin-session:*' for different operations, when we
create/modify the data within the properties dialog.

We will keep track of each child node using the handler object within
the Model, and Collection objects, also - provides them the name of the
attribute, it represents. It will be used to identify the invalid nested
objects within the existing object.

Also, provide the array of modified variables, which were modified in
the validation function to avoid checking each, and every thing in the
validation function. We will need to validate that particular and the
dependent attributes only.

Also - avoid multiple validation operations from the parent object to
improve performance. And, depends on the event based operations for
validation, instead of integrate the data operation and view operation
within one operation. We do maintain the invalid objects, and validate
them only from the collection objects, which also helps improve the
performance during validation.
2016-01-15 16:41:36 +05:30
Dave Page
07fac62bce Improve sizing of Python Path input box. 2016-01-14 15:53:29 +00:00
Dave Page
81405dbe0a Use the modern pgAdmin icon on Mac 2016-01-14 15:22:49 +00:00