Summer of Code/2009/Print Support: Difference between revisions
| Line 51: | Line 51: | ||
:'''2 Describe your project in 10-20 sentences'''. | :'''2 Describe your project in 10-20 sentences'''. | ||
:As the self explanatory name suggests, the project is to add print support to the laptops.For the time being, the print requests will be sent to the school server | :As the self explanatory name suggests, the project is to add print support to the laptops.For the time being, the print requests will be sent to the school server through a moodle print page | ||
then the teacher can view the files through his login in the same application, and approve them for printing to a print server. Later on as we are going with a CUPS architecture, we can include USB | |||
printing on demand! | |||
:''Why should my idea be considered:'' | :''Why should my idea be considered:'' | ||
:My refined version of the print support idea is actually a better way of ensuring that paper abuse | :My refined version of the print support idea is actually a better way of ensuring that paper abuse will be curbed, as the kids wouldn't really take into account :all the predicaments associated with printing. And needless to say printing does take place with the teacher's intervention. | ||
:A step by step | :A step by step abstraction: | ||
:'''1) ''' During boot of the XO laptops, Sugar will compile itself in compliance to supported file types, and have the print button enabled only when they are available. | :'''1) ''' During boot of the XO laptops, Sugar will compile itself in compliance to supported file types, and will have the print button enabled only when they are available. | ||
:'''2)''' The print button on click saves the | :'''2)''' The print button on click, prints in PDF format locally,that is, saves them under a specific 'print objects' category in the journal | ||
:'''3)''' There will be a | :'''3)''' There will be a send-for-printing interface( a moodle plugin) which allows the user to send his request to the datastore in the school server. On a successful send the user's page will display him the details of his job, whether in queue for printing and waiting for approval from the teacher or done printing or disapproved for printing along with an optional reason why, he can also cancel his request from the page. There wll a quota of maximum 3 live jobs per student. | ||
:'''4)''' | :'''4)''' Through moodle the teacher will have a page displaying the contents of the print datastore along with user names attached, and he/she will be able to download them to his remote system, and check them and approve them for printing if he/she wishes. After his/her approval or disapproval (that is a delete along with an option why) the information is held in the datastore, and the user can view it in the form of history transactions pertaining to his id, and teacher can view a finite list of previous transactions pertaining to all. | ||
:''' | :'''In-Depth analysis:''' | ||
:''' | |||
:The easiest way to implement step-1 would be to check which mime types exist on the | :The easiest way to implement step-1 would be to check which mime types exist on the client side in the etc/cups/mime.types file with a simple python method (getAllowableMIMETypes) , and access it with a python script and compile our sugar shell accordingly. So any mime type non-existent there will have its corresponding activities print button disabled. | ||
:As an Alternative, CUPS print function returns a python -1/ C 0 when a non-supported MIME type is used, so | :As an Alternative, CUPS print function returns a python -1/ C 0 when a non-supported MIME type is used, so I can take advantage of that and display a non supported format error. | ||
: | :for step-2, We use CUPS. The API has a nice array of functions, one of which is to get the printers name (the cups-pdf virtual printer). Since we know the name is CUPS-PDF, we can check it, and print our file as a PDF to the journal under a special category. We will also be using a automatic script to configure the network printers client sides when user (although only | ||
For the sake of our python convenience we will be using a python wrapper to cups, pycups. We will be using our Sugar api to create a nice simple widget for this. And we will use D-Bus for transfer of objects to journal. The print button will be just saving the file in its original mime format, and then a Cups-PDF job takes place and outputs a pdf in the to print objects category. And, the original saved mime type is destroyed. | |||
:for step-3, | :for step-3, We will be creating a new print management page in moodle, which accepts at most 3 print requests(the pdfs) from the user at a time until one of them is processed or deleted. We will be creating a plugin with the FILE_API of moodle( which enables us to do things like uploading client side files, and sending them, and receiving back the files, deleting them) in php, and access the local to print files, send upload them to the moodle server datastore. I will be taking the already available "upload one file for teacher's review" plugin's code as basis for this. [http://docs.moodle.org/en/Upload_a_single_file_assignment] | ||
:for step-4, | :for step-4, We will be using the same plug-in/interface already created, but for the teacher we will issue global access privileges enabling him/her to access all the sent requests, and the approve button will initiate shell commands to send the particular file to a network printer.This can again be achieved through hacking into moodle and understanding how notifications are sent to the students from teacher. The notifications would be relating to whether the teacher has approved or disapproved the print. | ||