diff options
author | King | 2016-06-17 14:52:20 +0530 |
---|---|---|
committer | GitHub | 2016-06-17 14:52:20 +0530 |
commit | dcb2f3c220ee444af88f862dd7c001c17412ae74 (patch) | |
tree | c68a830f6dc828270d37f60ab8fb2a9ec0ece826 | |
parent | 3af69e46f2fae02a50992fdd56cd7d887cd4cc9d (diff) | |
parent | b5652fa76a08bb7e5ce2a0cf8934589533315bab (diff) | |
download | certificate-generator-dcb2f3c220ee444af88f862dd7c001c17412ae74.tar.gz certificate-generator-dcb2f3c220ee444af88f862dd7c001c17412ae74.tar.bz2 certificate-generator-dcb2f3c220ee444af88f862dd7c001c17412ae74.zip |
Merge pull request #6 from komalsheth236/master
Osdag Workshop Feedback
21 files changed, 1288 insertions, 18 deletions
diff --git a/certificate/esim_workshop_template/Makefile b/certificate/esim_workshop_template/Makefile new file mode 100755 index 0000000..c741438 --- /dev/null +++ b/certificate/esim_workshop_template/Makefile @@ -0,0 +1,36 @@ +# Makefile for Certificate + +# bashful package available @ +# http://www.ctan.org/tex-archive/macros/latex/contrib/bashful + +# pst-barcode package available @ +# http://www.ctan.org/tex-archive/graphics/pstricks/contrib/pst-barcode + +# target is not a real file +.PHONY: help certificate clean + +# following line is because on server texlive is not installed system-wide +export PATH := /usr/local/texlive/2015/bin/x86_64-linux:$(PATH) +# default help +help: + @echo "current make version is: "$(MAKE_VERSION) + @echo "Please use \`make <target>' where <target> is one of" + @echo "" + @echo "participant_cert file_name=xyz Generate certificate." + @echo "clean clean all tmp and pdf files." + @echo "help Show this help." + @echo "" + +name = $(file_name) + +# certificate +participant_cert: $(name).tex fossee-logo.png bashful.sty + pdflatex -shell-escape $(name).tex + +paper_cert: $(name).tex fossee-logo.png bashful.sty + pdflatex -shell-escape $(name).tex + +clean: + @echo "removing all tmp+pdf files" + -rm -rvf $(name)*.pdf *~ $(name).aux $(name).log $(name).tex *.vrb *.out *.toc *.nav *.snm + -rm -rvf *.std* *.sh diff --git a/certificate/esim_workshop_template/bashful.sty b/certificate/esim_workshop_template/bashful.sty new file mode 100755 index 0000000..21b6f43 --- /dev/null +++ b/certificate/esim_workshop_template/bashful.sty @@ -0,0 +1,544 @@ +% Copyright (C) 2011,2012 by Yossi Gil yogi@cs.technion.ac.il +% --------------------------------------------------------------------------- +% This work may be distributed and/or modified under the conditions of the +% LaTeX Project Public License (LPPL), either version 1.3 of this license or +% (at your option) any later version. The latest version of this license is in +% http://www.latex-project.org/lppl.txt and version 1.3 or later is part of all +% distributions of LaTeX version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Yossi Gil. +% +% This work consists of the files bashful.tex and bashful.sty and the derived +% bashful.pdf + +\NeedsTeXFormat{LaTeX2e}% + +% Auxiliary identification information +\newcommand\date@bashful{2012/03/08}% +\newcommand\version@bashful{V 0.93}% +\newcommand\author@bashful{Yossi Gil}% +\newcommand\mail@bashful{yogi@cs.technion.ac.il}% +\newcommand\signature@bashful{% + bashful \version@bashful{} by + \author@bashful{} \mail@bashful +}% + +% Identify this package +\ProvidesPackage{bashful}[\date@bashful{} \signature@bashful: + Write and execute a bash script within LaTeX, with, or + without displaying the script and/or its output. +] +\PackageInfo{bashful}{This is bashful, \signature@bashful}% + +\RequirePackage{xcolor} +\RequirePackage{catchfile} +\RequirePackage{xkeyval} % Use xkeyval for retrieving parameters +\RequirePackage{textcomp} % For upquote + +% If true, all activities take place in a designated directory. +\newif\if@hide@BL@\@hide@BL@false + +% \if@unique@BL@ is a Boolean flag, telling us whether unique names should be +% generated for the auxiliary files (XX.sh, XX.stdout, XX.stderr and +% XX.exitCode) in each invocation of the \bash command. +\newif\if@unique@BL@\@unique@BL@false +\def\unique@BL{\if@unique@BL@ @\the\inputlineno\fi} + +% This is the default name for a directory in which processing should +% take place if \@hide@BL@true. +\def\directory@BL{_00} + +% Use listing to display bash scripts. +\RequirePackage{listings}% + + % listings style for the script, can be redefined by client + \lstdefinestyle{bashfulScript}{ + basicstyle=\ttfamily, + keywords={}, + upquote=true, + showstringspaces=false}% + % listings style for the standard output file, can be redefined by client + \lstdefinestyle{bashfulStdout}{ + basicstyle=\sl\ttfamily, + keywords={}, + upquote=true, + showstringspaces=false + }% + % listings style for the standard error file, can be redefined by client + \lstdefinestyle{bashfulStderr}{ + basicstyle=\sl\ttfamily\color{red}, + keywords={}, + upquote=true, + showstringspaces=false + }% + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Keys generating file names in alphabetical order: +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% dir: String = \directory@BL: Name of directory in which execution is going +% to take place +\define@cmdkey{bashful}[BL@]{dir}{\def\directory@BL{#1}}% + +% exitCodeFile: String = \BL@exitCodeFile: In which file should the exit code +% be stored if it is not zero. +\def\BL@exitCodeFile{\jobname\unique@BL.exitCode}% +\define@cmdkey{bashful}[BL@]{exitCodeFile}{}% + +% scriptFile: String = \BL@scriptFile: In which file should the script be +% saved? +\def\BL@scriptFile{\jobname\unique@BL.sh}% +\define@cmdkey{bashful}[BL@]{scriptFile}{}% + +% stderrFile: String = \BL@stderrFile: In which file should the standard +% error stream be saved? +\def\BL@stderrFile{\jobname\unique@BL.stderr}% +\define@cmdkey{bashful}[BL@]{stderrFile}{}% + +% stdoutFile: String = \BL@stdoutFile: In which file should the standard +% output stream be saved? +\def\BL@stdoutFile{\jobname\unique@BL.stdout}% +\define@cmdkey{bashful}[BL@]{stdoutFile}{}% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% List configuration boolean keys +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% list: Boolean = \ifBL@script: Should we list the script we generate? +\define@boolkey{bashful}[BL@]{script}[true]{}% + +% stdout: Boolean = \ifBL@stderr: Should we list the standard error? +\define@boolkey{bashful}[BL@]{stderr}[true]{}% + +% stdout: Boolean = \ifBL@stdout: Should we list the standard output? +\define@boolkey{bashful}[BL@]{stdout}[true]{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Error checking Boolean keys. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% stdout: Boolean = \ifBL@ignoreExitCode: Should we ignore the exit +% code? +\define@boolkey{bashful}[BL@]{ignoreExitCode}[true]{} + +% stdout: Boolean = \ifBL@ignoreStderr: Should we ignore the exit +% code? +\define@boolkey{bashful}[BL@]{ignoreStderr}[true]{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Miscelaneous keys +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% environment: String = \BL@environment: Which environment should we wrap +% the listings +\def\BL@environment{none@BL}% +\define@cmdkey{bashful}[BL@]{environment}{}% +\newenvironment{none@BL}{}{} % Default, empty environment for wrapping + % the listings + +% prefix: String = \BL@prefix: What prefix should be printed before a listing. +\def\BL@prefix{\@percentchar\space}% +\define@cmdkey{bashful}[BL@]{prefix}{}% + +% shell: String = \BL@shell: Which shell should be used for execution? +\def\BL@shell{bash}% +\define@cmdkey{bashful}[BL@]{shell}{}% + +% verbose: Boolean = \ifBL@verbose: Log every step we do +\define@boolkey{bashful}[BL@]{verbose}[true]{}% + +% The "unique" package flag that tells the package to generated unique names +% for the auxiliary files. If true the generated files (XX.sh, XX.stdout, +% XX.stderr and XX.exitCode) are given unique names in each invocation of the +% \bash command. Unique names are generated by the pattern JOB@LINE.EXTENSION, +% where JOB is the job's name, LINE is the number of the line in the input in +% which the \bash command was invoked, and EXTENSION is one of "sh", "stdout", +% "stderr" and "exitCode". +\DeclareOptionX{unique} {\@unique@BL@true} +\DeclareOptionX{hide} {\@hide@BL@true} +\DeclareOptionX{dir} {\@hide@BL@true\def\directory@BL{#1}} +\DeclareOptionX{verbose} {\BL@verbosetrue} + +\ExecuteOptionsX{} +\ProcessOptionsX\relax + +% \bash: the main command we define. It chains to \bashI which chains to +% \bashII, etc. +\begingroup + %\where@BL + \catcode`\^^M\active% + \gdef\bash{% + \logBL{Beginning a group so that all cat code changes are local}% + \begingroup% + \logBL{Making \^\^M a true newline}% + \catcode`\^^M\active% + \def^^M{^^J}% + \logBL{Checking for optional arguments}% + \@ifnextchar[{\bashI}{\bashI[]}% + }% +\endgroup + +% \bashI: Process the optional arguments and continue +\def\bashI[#1]{\setKeys@BL{#1}\bashII} + +% \bashII: Set category codes of all characters to special, and proceed. +\begingroup + \catcode`\^^M\active% + \gdef\bashII{% + \logBL{bashII: Making \^\^M a true new line}% + \catcode`\^^M\active% + \def^^M{^^J}% + \logBL{bashII: Making all characters other}% + \let\do\@makeother% + \dospecials% + \bashIII}% +\endgroup + +% \bashIII: Consume all tokens until \END (but ignoring the preceding and +% terminating newline), and proceed. +\begingroup + \catcode`\@=0\relax + \catcode`\^^M\active + @catcode`@\=12@relax% + @gdef@bashIII^^M#1^^M% + \END{@bashIV{#1}@bashV{#1}@logBL{bashV: Done!}@endgroup}@endgroup + +% \bashIV: Process the tokens by storing them in a script file, and executing +% this file, +\newcommand\bashIV[1]{% + \logBL{BashIV: begin}% + \makeDirectory@BL + \generateScriptFile@BL{#1}\relax + \executeScriptFile@BL + \logBL{BashIV: done}% +}% + +% \logBL: record a log message in verbose mode +\newcommand\logBL[1]{\ifBL@verbose\typeout{L\the\inputlineno: #1}\fi} + +% A macro to create a new directory +\def\makeDirectory@BL{% + \if@hide@BL@ + \logBL{Making directory \directory@BL}% + \immediate\write18{mkdir -p \directory@BL}% + \else + \logBL{Using current directory}% + \fi +} + +\newcommand\splice[1]{% + \bashIV{#1}% + \expandFileName@BL{\BL@stdoutFile}% + \CatchFileDef{\BL@file@contents}{\BL@stdoutFile}{\relax}% + \ignorespaces\BL@file@contents\unskip +} + +% listing the script file if required, and presenting the standard output and +% standard error files if required. +\newcommand\bashV[1]{% + \logBL{Wrapping up after execution}% + \storeToFile@BL{\BL@prefix#1}{\BL@scriptFile}% + \expandFileName@BL\BL@scriptFile + \expandFileName@BL\BL@stdoutFile + \expandFileName@BL\BL@stderrFile + \logBL{Files are: \BL@scriptFile, \BL@stdoutFile, and \BL@stderrFile}% + \checkScriptErrors@BL + \listEverything@BL + \defineMacros@BL + \logBL{Wrap up done}} + +\def\expandFileName@BL#1{% + \logBL{Setting, if necessary, correct path of \noexpand#1 }% + \if@hide@BL@ + \logBL{Prepending path (\directory@BL) to #1}% + \edef#1{\directory@BL/#1}% + \logBL{Obtained #1}% + \fi +} + +\def\setKeys@BL#1{% + \logBL{Processing key=val pairs in options string [#1]}\relax + \setkeys{bashful}{#1}% +}% + +% Store the list of tokens in the first argument into our script file +\newcommand\generateScriptFile@BL[1]{% + \logBL{Generating script file \BL@scriptFile} + \storeToFile@BL{#1}{\BL@scriptFile}% +}% + +\newwrite\writer@BL +% Store the list of tokens in the first argument into the file given +% in the second argument; prepend directory if necessary +\newcommand\storeToFile@BL[2]{% + \logBL{ #2 :=^^J#1^^J}% + \if@hide@BL@ + \logBL{File #2 will be created in \directory@BL}% + \storeToFileI@BL{#1}{\directory@BL/#2} + \else + \logBL{File #2 will be created in current directory}% + \storeToFileI@BL{#1}{#2}% + \fi + \logBL{Writing done!}% +}% + +% Store the list of tokens in the first argument into the file given +% in the second argument; the second argument could be qualified with +% a directory name. +\newcommand\storeToFileI@BL[2]{% + \logBL{Writing to file #2...}% + \immediate\openout\writer@BL#2% + \immediate\write\writer@BL{#1}% + \immediate\closeout\writer@BL +}% + +% Execute the content of our script file. +\newcommand\executeScriptFile@BL{% + \edef\command@BL{\BL@shell \space \BL@scriptFile}% + \if@hide@BL@ + \logBL{Adding a "cd command"}% + \edef\command@BL{cd \directory@BL;\command@BL} + \fi% + \edef\command@BL{\command@BL \space >\BL@stdoutFile \space 2>\BL@stderrFile}% + \edef\command@BL{\command@BL \space || echo $? >\BL@exitCodeFile}% + \edef\command@BL{\BL@shell\space -c "\command@BL"}% + \logBL{Executing:^^J \command@BL}% + \immediate\write18{\command@BL}% +}% + +\newread\reader@BL + +% Issue an error message if errors found during execution +\newcommand\checkScriptErrors@BL{% + \logBL{Checking for script errors}% +% \begingroup + \newif\ifErrorsFound@\ErrorsFound@false + \checkExitCodeFile@BL + \ifdefined\exitCode@BL + \logBL{Non zero exit code found (\exitCode@BL), and I was not instructed to + ignore it} + \ErrorsFound@true + \fi + \def\eoln{\par} + \def\firstErrorLine{\par} + \checkStderrFile@BL + \logBL{I will now print the contents of file \BL@stderrFile\space (if found)} + \ifx\firstErrorLine\eoln + \relax + \else + \logBL{Standard error was not empty, and I was not instructed to ignore it} + \message{Standard error not empty. Here is how + ^^Jfile \BL@stderrFile\space begins: + ^^J>>>>\firstErrorLine + ^^J>>>>\space + ^^Jbut, you really ought to examine this file yourself!} + \ErrorsFound@true + \fi + \ifErrorsFound@ + \logBL{Issuing an error message since \BL@stderrFile\space was not empty}% + \errmessage{Your shell script failed...}% + \BL@verbosetrue + \logBL{Switching to verbose mode}% + \else + \logBL{File \BL@stderrFile\space was empty}% + \logBL{Proceeding as usual}% + \fi +% \endgroup +}% + +\newcommand\checkExitCodeFile@BL{% + \logBL{Considering \BL@exitCodeFile}% + \ifBL@ignoreExitCode + \logBL{Ignoring \BL@exitCodeFile, as per command flag}% + \else + \logBL{Opening \BL@exitCodeFile}% + \openin\reader@BL=\BL@exitCodeFile + \ifeof\reader@BL + \logBL{File \BL@exitCodeFile\space is missing, exit code was probably 0} + \closein\reader@BL + \else + \logBL{File \BL@exitCodeFile\space exists, let's get the exit code}% + \logBL{Reading first line of \BL@exitCodeFile}% + \catcode`\^^M=5 + \read\reader@BL to \exitCode@BL + \closein\reader@BL + \fi + \fi +} + +\newcommand\checkStderrFile@BL{% + \ifBL@stderr + \logBL{Will be listing \BL@stderrFile, so erroneous content is ignored}% + \else + \ifBL@ignoreStderr + \logBL{Ignoring \BL@stderrFile, as per command flag}% + \else + \checkStderrFileI@BL + \fi + \fi +} + +\newcommand\checkStderrFileI@BL{% + \logBL{Opening \BL@stderrFile}% + \openin\reader@BL=\BL@stderrFile\relax + \ifeof\reader@BL + \logBL{Hmm... \BL@stderrFile\space does not exist (probably a package bug)}% + \logBL{Switching to verbose mode}% + \BL@verbosetrue + \else + \logBL{Reading first line of \BL@stderrFile}% + \catcode`\^^M=5 + \read\reader@BL to \firstErrorLine + \ifeof\reader@BL + \ifx\firstErrorLine\eoln + \logBL{File \BL@stderrFile\space is empty} + \else + \logBL{File \BL@stderrFile\space has one line [\firstErrorLine]}% + \ErrorsFound@true + \fi + \else + \logBL{File \BL@stderrFile\space has two lines or more}% + \ErrorsFound@true + \fi + \fi + \closein\reader@BL +} + +% List the contents of the script, stdout and stderr, as per the flags. +\newcommand\listEverything@BL{% + \logBL{Checking whether any listings are required}% + \newif\if@listSomething@BL@ + \ifBL@script\@listSomething@BL@true\fi + \ifBL@stdout\@listSomething@BL@true\fi + \ifBL@stderr\@listSomething@BL@true\fi + \if@listSomething@BL@ + \beginWrappingEnvironment@BL + \listEverythingWithinEnvironment@BL + \endWrappingEnvironment@BL + \else + \logBL{Nothing has to be listed}% + \fi +} + +% Auxiliary macro to list the contents of the script, stdout and stderr, as per +% the flags. +\newcommand\listEverythingWithinEnvironment@BL{% + \logBL{Laying out the correct \noexpand\lstinputlisting commands}%1 + \ifBL@script\listScript@BL\BL@scriptFile\fi + \ifBL@stdout\listStdout@BL\BL@stdoutFile\fi + \ifBL@stderr\listStderr@BL\BL@stderrFile\fi +}% + +\newcommand\listScript@BL[1]{% + \logBL{Listing script: #1} + \def\flags@BL{style=bashfulScript} + \logBL{Initial flags for listing #1 are \flags@BL} + \ifBL@stdout\edef\flags@BL{\flags@BL, belowskip=0pt}\fi + \ifBL@stderr\edef\flags@BL{\flags@BL, belowskip=0pt}\fi + \doList@BL#1\flags@BL +} + +\newcommand\listStdout@BL[1]{% + \logBL{Listing stdout: #1} + \edef\flags@BL{style=bashfulStdout} + \logBL{Initial flags for listing stdout file are \flags@BL} + \ifBL@script\edef\flags@BL{\flags@BL, aboveskip=0pt}\fi + \ifBL@stderr\edef\flags@BL{\flags@BL, belowskip=0pt}\fi + \doList@BL#1\flags@BL +}% + +\newcommand\listStderr@BL[1]{% + \logBL{Listing stderr: #1}% + \def\flags@BL{style=bashfulStderr}% + \logBL{Initial flags for listing stderr file are \flags@BL} + \ifBL@script\edef\flags@BL{\flags@BL, aboveskip=0pt}\fi + \ifBL@stdout\edef\flags@BL{\flags@BL, aboveskip=0pt}\fi + \doList@BL#1\flags@BL +}% + +\newcommand\doList@BL[2]{% + \logBL{Flags for listing #1 are #2}% + \expandafter\lstset\expandafter{#2}% + \lstinputlisting{#1}% + }% + +\def\beginWrappingEnvironment@BL{% + \logBL{Beginning environment \BL@environment}% + \expandafter\csname\BL@environment\endcsname + \forceLTR@BL + \fixPolyglossiaBug@BL +}% + +\def\endWrappingEnvironment@BL{% + \expandafter\csname end\BL@environment\endcsname +}% + +% Define the \bashStdout and \bashStderr macro. +\newcommand\defineMacros@BL{% + \logBL{Defining macro for the contents of the standard output file}% + \immediate\openin\reader@BL=\BL@stdoutFile + \logBL{Opened file \BL@stdoutFile}% + \begingroup + \endlinechar=-1% + \ifeof\reader@BL + \logBL{File \BL@stdoutFile was empty}% + \global\let\bashStdout\relax + \else + \logBL{Reading contents of \BL@stdoutFile}% + \immediate\read\reader@BL to \BL@temp + \global\let\bashStdout\BL@temp + \fi + \typeout{after EOF}% + \logBL{bashStdout :=^^J\bashStdout^^J}% + \endgroup + \logBL{Closing file \BL@stdoutFile}% + \immediate\closein\reader@BL + \logBL{Defining macro for the contents of the standard error file}% + \immediate\openin\reader@BL=\BL@stderrFile + \logBL{Opened file \BL@stderrFile}% + \begingroup + \endlinechar=-1% + \ifeof\reader@BL + \logBL{File \BL@stdoutFile was empty}% + \global\let\bashStdout\relax + \else + \logBL{Reading contents of \BL@stderrFile}% + \immediate\read\reader@BL to \BL@temp + \global\let\bashStderr\BL@temp + \fi + \logBL{bashStderr :=^^J\bashStderr^^J}% + \endgroup + \logBL{Closing file \BL@stderrFile}% + \immediate\closein\reader@BL +} + +\newcommand\fixPolyglossiaBug@BL{% + \logBL{Trying to fix a Polyglossia package bug}% + \ifdefined\ttfamilylatin + \logBL{Replacing \noexpand\ttfamily with \noexpand\ttfamilylatin}% + \let\ttfamily=\ttfamilylatin + \logBL{Replacing \noexpand\rmfamily with \noexpand\rmfamilylatin}% + \let\rmfamily=\rmfamilylatin + \logBL{Replacing \noexpand\sffamily with \noexpand\sffamilylatin}% + \let\sffamily=\sffamilylatin + \logBL{Replacing \noexpand\normalfont with \noexpand\normalfontlatin}% + \let\normalfont=\normalfontlatin + \else + \logBL{Polyglossia package probably not loaded}% + \relax + \fi +}% + +\newcommand\forceLTR@BL{% + \logBL{Making sure we are not in right-to-left mode}% + \ifdefined\setLTR + \logBL{Command \noexpand\setLTR is defined, invoking it}% + \setLTR + \else + \logBL{Command \noexpand\setLTR is not defined, we are probably LTR}% + \relax + \fi +}% diff --git a/certificate/esim_workshop_template/bg60.png b/certificate/esim_workshop_template/bg60.png Binary files differnew file mode 100644 index 0000000..3bce084 --- /dev/null +++ b/certificate/esim_workshop_template/bg60.png diff --git a/certificate/esim_workshop_template/bottom_logo.png b/certificate/esim_workshop_template/bottom_logo.png Binary files differnew file mode 100644 index 0000000..94fe416 --- /dev/null +++ b/certificate/esim_workshop_template/bottom_logo.png diff --git a/certificate/esim_workshop_template/cer_logo.png b/certificate/esim_workshop_template/cer_logo.png Binary files differnew file mode 100644 index 0000000..8005670 --- /dev/null +++ b/certificate/esim_workshop_template/cer_logo.png diff --git a/certificate/esim_workshop_template/fossee-logo.png b/certificate/esim_workshop_template/fossee-logo.png Binary files differnew file mode 100755 index 0000000..6feda2d --- /dev/null +++ b/certificate/esim_workshop_template/fossee-logo.png diff --git a/certificate/esim_workshop_template/iitb-logo.png b/certificate/esim_workshop_template/iitb-logo.png Binary files differnew file mode 100755 index 0000000..2915da3 --- /dev/null +++ b/certificate/esim_workshop_template/iitb-logo.png diff --git a/certificate/esim_workshop_template/kannan-moudgalya-sign.png b/certificate/esim_workshop_template/kannan-moudgalya-sign.png Binary files differnew file mode 100755 index 0000000..6feda2d --- /dev/null +++ b/certificate/esim_workshop_template/kannan-moudgalya-sign.png diff --git a/certificate/esim_workshop_template/logo_cert.png b/certificate/esim_workshop_template/logo_cert.png Binary files differnew file mode 100644 index 0000000..e662d2b --- /dev/null +++ b/certificate/esim_workshop_template/logo_cert.png diff --git a/certificate/esim_workshop_template/missfont.log b/certificate/esim_workshop_template/missfont.log new file mode 100755 index 0000000..e69de29 --- /dev/null +++ b/certificate/esim_workshop_template/missfont.log diff --git a/certificate/esim_workshop_template/niceframe.sty b/certificate/esim_workshop_template/niceframe.sty new file mode 100755 index 0000000..20afd01 --- /dev/null +++ b/certificate/esim_workshop_template/niceframe.sty @@ -0,0 +1,140 @@ +%% +%% This is file `niceframe.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% niceframe.dtx (with options: `package') +%% +%% This file is distributed in the hope that it will be useful, +%% but WITHOUT ANY WARRANTY; without even the implied warranty of +%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Marcus Ohlhaut. +%% +%% This work consists of the files niceframe.dtx and niceframe.ins +%% and the derived file niceframe.sty. +%% +%% Copyright (C) 2009 Marcus Ohlhaut (marcus@ohlhaut.de). +%% All rights reserved. +%% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +\def\fileversion{1.1c} +\def\filedate{2009/31/08} +\NeedsTeXFormat{LaTeX2e}[1994/06/01] +\ProvidesPackage{niceframe}[\filedate\space v\fileversion\space niceframe package (MO)] +\typeout{Package: niceframe v\fileversion\space <\filedate> (Marcus Ohlhaut)} +\RequirePackage{calc} +\font\ding dingbat scaled 1200 +\newlength{\nicefr@mechar} +\settowidth{\nicefr@mechar}{\ding\char'141} +\newlength{\nicefr@mewidth} +\setlength{\nicefr@mewidth}{\hsize} +\newlength{\nicefr@meheight} +\setlength{\nicefr@meheight}{\vsize} +\newlength{\@ldhsize} +\setlength{\@ldhsize}{\hsize} +\newcommand{\upd@ublerulefill}{\xleaders\hbox to 10pt + {\hss\ding\char'142 \hss}\hfill} +\newcommand{\dnd@ublerulefill}{\xleaders\hbox to 10pt + {\hss\ding\char'147 \hss}\hfill} +\newcommand{\ltd@ublerulefill}{\xleaders\vbox to 10pt + {\vss\hbox{\ding\char'144}\vss}\vfill} +\newcommand{\rtd@ublerulefill}{\xleaders\vbox to 10pt + {\vss\hbox{\ding\char'145}\vss}\vfill} +\newcommand{\niceframe}[2][\textwidth]{{ + \setlength{\hsize}{#1 - 2\nicefr@mechar} + \setbox0=\vbox{#2} + \setlength{\nicefr@meheight}{\ht0 + \dp0} + \setlength{\nicefr@mewidth}{\wd0 + 2\nicefr@mechar} + \vbox{% + \hbox to\nicefr@mewidth{\ding\char'141\upd@ublerulefill\char'143} + \hbox to\nicefr@mewidth{\vbox to\nicefr@meheight{\ltd@ublerulefill} + \hss\raise\dp0\box0\hss + \vbox to\nicefr@meheight{\rtd@ublerulefill}} + \hbox to\nicefr@mewidth{\ding\char'146\dnd@ublerulefill\char'150} + } +}} +\newcommand{\curlyframe}[2][\textwidth]{{ + \setlength{\hsize}{#1 - 2\nicefr@mechar} + \setbox0=\vbox{#2} + \setlength{\nicefr@meheight}{\ht0 + \dp0} + \setlength{\nicefr@mewidth}{\wd0 + 2\nicefr@mechar} + \vbox{% + \hbox to\nicefr@mewidth{\ding\char'105\hfill\char'106} + \vskip-\baselineskip + \hbox to\nicefr@mewidth{\hss\raise\dp0\box0\hss} + \vskip-\baselineskip + \hbox to\nicefr@mewidth{\ding\char'110\hfill\char'107} + } +}} +\newcommand{\artdecoframe}[2][\textwidth]{{ + \setlength{\hsize}{#1 - 2\nicefr@mechar} + \setbox0=\vbox{#2} + \setlength{\nicefr@meheight}{\ht0 + \dp0} + \setlength{\nicefr@mewidth}{\wd0 + 2\nicefr@mechar} + \vbox{% + \hbox to\nicefr@mewidth{\ding\char'115\hfill\char'114} + \hbox to\nicefr@mewidth{\hss\raise\dp0\box0\hss} + \hbox to\nicefr@mewidth{\ding\char'112\hfill\char'113} + } +}} +\newcounter{times} +\newlength{\fr@mecharTT} +\newlength{\fr@mecharLL} +\newlength{\fr@mewidth} +\newlength{\fr@meheight} +\newcommand{\generalframe}[9]{{ + \settowidth{\fr@mecharTT}{#2} + \settoheight{\fr@mecharLL}{#4} + \setcounter{times}{1 * \ratio{\hsize}{\fr@mecharTT}} + \setlength{\fr@mewidth}{\fr@mecharTT * \value{times}} + \setlength{\hsize}{\fr@mewidth - 2\fr@mecharTT - 2\fboxsep} + \setbox0=\vbox{#9} + \setlength{\fr@meheight}{\ht0 + \dp0 + 2\fboxsep} + \setcounter{times}{1 * \ratio{\fr@meheight}{\fr@mecharLL}} + \setcounter{times}{\value{times} + 1} + \setlength{\fr@meheight}{\fr@mecharLL * \value{times}} + \newcommand{\up@fill}{\leaders\hbox{#2}\hfill} + \newcommand{\lt@fill}{\leaders\vbox{\hbox{#4}}\vfill} + \newcommand{\rt@fill}{\leaders\vbox{\hbox{#5}}\vfill} + \newcommand{\dn@fill}{\leaders\hbox{#7}\hfill} + \vbox{% + \hbox to\fr@mewidth{#1\up@fill#3}\nointerlineskip + \hbox to\fr@mewidth{\vbox to\fr@meheight{\lt@fill}% + \hfill% + \vbox to\fr@meheight{\vfill\box0\vfill}% + \hfill% + \vbox to\fr@meheight{\rt@fill}% + }\nointerlineskip + \hbox to\fr@mewidth{#6\dn@fill#8}\nointerlineskip + } +}} +\endinput +%% +%% End of file `niceframe.sty'. diff --git a/certificate/esim_workshop_template/template_EWS2016Pcertificate b/certificate/esim_workshop_template/template_EWS2016Pcertificate new file mode 100644 index 0000000..c040b96 --- /dev/null +++ b/certificate/esim_workshop_template/template_EWS2016Pcertificate @@ -0,0 +1,21 @@ +* certificate template + +** Usage + - To generate a PDF file type, + #+BEGIN_SRC sh + make $command + #+END_SRC sh + + - To clean the project + #+BEGIN_SRC sh + make clean + #+END_SRC sh + +** License + The tex file and all the images within this project are entirely + PRIVATE. It's usage outside the `Fossee Project` is an legal + offense and will be subject to suitable punishment by Indian law. + + +** Website + [[http://fossee.in]] diff --git a/certificate/esim_workshop_template/text.png b/certificate/esim_workshop_template/text.png Binary files differnew file mode 100755 index 0000000..2f181d6 --- /dev/null +++ b/certificate/esim_workshop_template/text.png diff --git a/certificate/esim_workshop_template/wallpaper.sty b/certificate/esim_workshop_template/wallpaper.sty new file mode 100755 index 0000000..c64e8c6 --- /dev/null +++ b/certificate/esim_workshop_template/wallpaper.sty @@ -0,0 +1,250 @@ +%% +%% This is file `wallpaper.sty' v 1.10 +%% +%% Author Michael H.F. Wilkinson +%% April 21, 2006 +%% +%% Create background, either centered, tiled, or in any corner +%% relies heavily on eso-pic.sty, corrects for changes in \hoffset +%% by classes such as sciposter.cls +%% Problems, bugs and comments to +%% michael@cs.rug.nl +%% version 1.10, 2006/04/21: +%% - Commands added for corner wallpapers +%% +%% version 1.01, 2005/01/18: +%% - \providecommand{\LenToUnit} included to be compatible +%% with earlier versions of eso-pic.sty +%% +%% version 1.00, 2004/12/22: +%% - first release +%% +%% +\ProvidesPackage{wallpaper}[2005/01/18, v1.01 easy wallpaper formatting (MHFW)] +\NeedsTeXFormat{LaTeX2e}[1995/06/01] + +\RequirePackage{ifthen} +\RequirePackage{calc} +\RequirePackage{eso-pic} +\RequirePackage{graphicx} + +\providecommand{\LenToUnit}[1]{#1\@gobble} + + +\newlength{\wpXoffset} +\setlength{\wpXoffset}{-\hoffset} +\newlength{\wpYoffset} +\setlength{\wpYoffset}{0pt} +\newlength{\tileXoffset} +\newlength{\tileYoffset} +\newlength{\tilewidth} +\newlength{\tileheight} +\newlength{\tileX} +\newlength{\tileY} + +\newcommand{\LLCornerWallPaper}[2]{% +\AddToShipoutPicture{% + \AtPageLowerLeft{% + \includegraphics[width=#1\paperwidth,height=#1\paperheight,% + keepaspectratio]{#2}% + } + } +} + +\newcommand{\ThisLLCornerWallPaper}[2]{% +\AddToShipoutPicture*{% + \AtPageLowerLeft{% + \includegraphics[width=#1\paperwidth,height=#1\paperheight,% + keepaspectratio]{#2}% + } + } +} + +\newcommand{\ULCornerWallPaper}[2]{% + \AddToShipoutPicture{% + \AtPageLowerLeft{% + \parbox[b][\paperheight]{#1\paperwidth}{% + \includegraphics[width=#1\paperwidth,height=#1\paperheight,% + keepaspectratio]{#2}% + \vfill% + } + } + } +} + +\newcommand{\ThisULCornerWallPaper}[2]{% + \AddToShipoutPicture*{% + \AtPageLowerLeft{% + \parbox[b][\paperheight]{#1\paperwidth}{% + \includegraphics[width=#1\paperwidth,height=#1\paperheight,% + keepaspectratio]{#2}% + \vfill% + } + } + } +} + +\newcommand{\LRCornerWallPaper}[2]{% + \AddToShipoutPicture{% + \AtPageLowerLeft{% + \parbox[b]{\paperwidth}{% + \hfill \includegraphics[width=#1\paperwidth,height=#1\paperheight,% + keepaspectratio]{#2}% + } + } + } +} + +\newcommand{\ThisLRCornerWallPaper}[2]{% + \AddToShipoutPicture*{% + \AtPageLowerLeft{% + \parbox[b]{\paperwidth}{% + \hfill \includegraphics[width=#1\paperwidth,height=#1\paperheight,% + keepaspectratio]{#2}% + } + } + } +} + +\newcommand{\URCornerWallPaper}[2]{% + \AddToShipoutPicture{% + \AtPageLowerLeft{% + \parbox[b][\paperheight]{\paperwidth}{% + \hfill \includegraphics[width=#1\paperwidth,height=#1\paperheight,% + keepaspectratio]{#2}% + \vfill% + } + } + } +} +\newcommand{\ThisURCornerWallPaper}[2]{% + \AddToShipoutPicture*{% + \AtPageLowerLeft{% + \parbox[b][\paperheight]{\paperwidth}{% + \hfill \includegraphics[width=#1\paperwidth,height=#1\paperheight,% + keepaspectratio]{#2}% + \vfill% + } + } + } +} + +\newcommand{\CenterWallPaper}[2]{% +\AddToShipoutPicture{\put(\LenToUnit{\wpXoffset},\LenToUnit{\wpYoffset}){% + \parbox[b][\paperheight]{\paperwidth}{% + \vfill + \centering + \includegraphics[width=#1\paperwidth,height=#1\paperheight,% + keepaspectratio]{#2}% + \vfill + }} + } +} + +\newcommand{\ThisCenterWallPaper}[2]{% +\AddToShipoutPicture*{\put(\LenToUnit{\wpXoffset},\LenToUnit{\wpYoffset}){% + \parbox[b][\paperheight]{\paperwidth}{% + \vfill + \centering + \includegraphics[width=#1\paperwidth,height=#1\paperheight,% + keepaspectratio]{#2}% + \vfill + }}} +} + + + +\newcommand{\TileSquareWallPaper}[2]{% +\AddToShipoutPicture{% + \begingroup + \setlength{\tileYoffset}{\wpYoffset} + \setlength{\tilewidth}{\paperwidth/#1}% + \setlength{\tileheight}{\tilewidth}% + \setlength{\tileY}{0pt}% + \whiledo{\lengthtest{\tileY < \paperheight}}{% + \setlength{\tileX}{0pt}% + \setlength{\tileXoffset}{\wpXoffset}% + \whiledo{\lengthtest{\tileX < \paperwidth}}{% + \put(\LenToUnit{\tileXoffset},\LenToUnit{\tileYoffset}){% + \includegraphics[height=\tileheight,width=\tilewidth]{#2}}% + \addtolength{\tileX}{\tilewidth} + \addtolength{\tileXoffset}{\tilewidth} + }% + \addtolength{\tileY}{\tileheight} + \addtolength{\tileYoffset}{\tileheight} + }% + \endgroup +}% +} + +\newcommand{\ThisTileSquareWallPaper}[2]{% +\AddToShipoutPicture*{% + \begingroup + \setlength{\tileYoffset}{\wpYoffset} + \setlength{\tilewidth}{\paperwidth/#1}% + \setlength{\tileheight}{\tilewidth}% + \setlength{\tileY}{0pt}% + \whiledo{\lengthtest{\tileY < \paperheight}}{% + \setlength{\tileX}{0pt}% + \setlength{\tileXoffset}{\wpXoffset}% + \whiledo{\lengthtest{\tileX < \paperwidth}}{% + \put(\LenToUnit{\tileXoffset},\LenToUnit{\tileYoffset}){% + \includegraphics[height=\tileheight,width=\tilewidth]{#2}}% + \addtolength{\tileX}{\tilewidth} + \addtolength{\tileXoffset}{\tilewidth} + }% + \addtolength{\tileY}{\tileheight} + \addtolength{\tileYoffset}{\tileheight} + }% + \endgroup +}% +} + + +\newcommand{\TileWallPaper}[3]{% +\AddToShipoutPicture{% + \begingroup + \setlength{\tileYoffset}{\wpYoffset} + \setlength{\tilewidth}{#1}% + \setlength{\tileheight}{#2}% + \setlength{\tileY}{0pt}% + \whiledo{\lengthtest{\tileY < \paperheight}}{% + \setlength{\tileX}{0pt}% + \setlength{\tileXoffset}{\wpXoffset}% + \whiledo{\lengthtest{\tileX < \paperwidth}}{% + \put(\LenToUnit{\tileXoffset},\LenToUnit{\tileYoffset}){% + \includegraphics[height=\tileheight,width=\tilewidth]{#3}}% + \addtolength{\tileX}{\tilewidth} + \addtolength{\tileXoffset}{\tilewidth} + }% + \addtolength{\tileY}{\tileheight} + \addtolength{\tileYoffset}{\tileheight} + }% + \endgroup +}% +} + +\newcommand{\ThisTileWallPaper}[3]{% +\AddToShipoutPicture*{% + \begingroup + \setlength{\tileYoffset}{\wpYoffset} + \setlength{\tilewidth}{#1}% + \setlength{\tileheight}{#2}% + \setlength{\tileY}{0pt}% + \whiledo{\lengthtest{\tileY < \paperheight}}{% + \setlength{\tileX}{0pt}% + \setlength{\tileXoffset}{\wpXoffset}% + \whiledo{\lengthtest{\tileX < \paperwidth}}{% + \put(\LenToUnit{\tileXoffset},\LenToUnit{\tileYoffset}){% + \includegraphics[height=\tileheight,width=\tilewidth]{#3}}% + \addtolength{\tileX}{\tilewidth} + \addtolength{\tileXoffset}{\tilewidth} + }% + \addtolength{\tileY}{\tileheight} + \addtolength{\tileYoffset}{\tileheight} + }% + \endgroup +}% +} + +\newcommand{\ClearWallPaper}{\ClearShipoutPicture}
\ No newline at end of file diff --git a/certificate/models.py b/certificate/models.py index 667d4b9..55a8979 100755 --- a/certificate/models.py +++ b/certificate/models.py @@ -11,7 +11,8 @@ events = ( ('FET', 'FreeEda Textbook Companion'), ('OFC', 'OpenFOAM Symposium'), ('FIC', 'Fossee Internship'), - ('OWS', 'Osdag Workshop') + ('OWS', 'Osdag Workshop'), + ('EWS', 'eSim Workshop') ) class Profile(models.Model): @@ -157,6 +158,11 @@ class Osdag_WS(models.Model): email = models.EmailField() purpose = models.CharField(max_length=10, default='OWS') +class eSim_WS(models.Model): + name = models.CharField(max_length=200) + email = models.EmailField() + purpose = models.CharField(max_length=10, default='EWS') + class Scipy_participant_2015(models.Model): name = models.CharField(max_length=50, null=True, blank=True) email = models.CharField(max_length=50, null=True, blank=True) diff --git a/certificate/templates/esim_workshop_download.html b/certificate/templates/esim_workshop_download.html new file mode 100644 index 0000000..47b2674 --- /dev/null +++ b/certificate/templates/esim_workshop_download.html @@ -0,0 +1,60 @@ +{% extends 'base.html' %} +{% block header%} + <h1> eSim Workshop 2016</h1> +{% endblock %} +{% block content %} + <div class="modal fade" id="invalidModal" tabindex="-1" role="dialog" aria-labelledby="invalidModalLabel" aria-hidden="true"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button> + <h4 class="modal-title" id="invalidModalLabel">Invalid User/Email</h4> + </div> + <div class="modal-body"> + {% if notregistered == 1 %} + Please enter a proper email address. + {% endif %} + </div> + </div> + </div> + </div> + <form class="col-lg-12" action="{% url 'certificate:esim_workshop_download' %}" method="post"> + {% csrf_token %} + {{ message }} + <hr> + <div class="input-group" style="width:340px;text-align:center;margin:0 auto;"> + <input style="width:450;" class="form-control input-lg" placeholder="Enter the email address you used for registration" type="text" id="email" name=email> + <span class="input-group-btn"><button class="btn btn-lg btn-primary" type="submit">Download Certificate</button></span> + </div> + </form> + <center><h4>Problem in downloading the certificate? Write to us at <a href="mailto:certificates@fossee.in">certificates[at]fossee[dot]in</a></h4> + + <div class="modal fade" id="errorModal" tabindex="-1" role="dialog" aria-labelledby="errorModalLabel" aria-hidden="true"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button> + <h4 class="modal-title" id="invalidModalLabel">Problem in downloading</h4> + </div> + <div class="modal-body"> + Sorry could not process your certificate. Kindly contact the FOSSEE team. + </div> + </div> + </div> + </div> +{% endblock %} + +{% block javascript %} +<script> + $(document).ready(function(){ + error = "{{ error }}" + if(error == "True"){ + $("#errorModal").modal(); + } + notreg = "{{ notregistered }}"; + if(notreg == "1"){ + $("#invalidModal").modal(); + } + }); +</script> +{% endblock %} diff --git a/certificate/templates/esim_workshop_feedback.html b/certificate/templates/esim_workshop_feedback.html new file mode 100644 index 0000000..416d0e1 --- /dev/null +++ b/certificate/templates/esim_workshop_feedback.html @@ -0,0 +1,26 @@ +{% extends 'base.html' %} + +{% block header%} + <h1> eSim Workshop 2016 </h1> +{% endblock %} +{% block content %} + <div style="width:50%; margin: 0 auto" > +<form action="{% url 'certificate:esim_workshop_feedback' %}" method="post"> + + <h1> Feedback </h1> + <p>Your feedback will help us improve our services. Thank you for your time.</p> + + {{ detail }} + {% csrf_token %} + <table class="table"> + {{ form }} + </table> + {% for question in questions %} + <label style="float:left">{{ forloop.counter }}. {{ question.question }} </label><br> + <textarea cols="80" class="form-control" id="{{ question.id }}" name="{{ question.id }}"></textarea><br> + {% endfor %} + <button style="float:left" class="btn btn-primary" type="submit">Submit</button> + <a style="float:right" href="{% url 'certificate:esim_workshop_download' %}" >Skip feedback and download</a> + </form> + </div> +{% endblock %} diff --git a/certificate/templates/index.html b/certificate/templates/index.html index 51f5bd1..cb9c716 100755 --- a/certificate/templates/index.html +++ b/certificate/templates/index.html @@ -7,6 +7,7 @@ <div style="margin:auto; width:45%"> <p>Below links will take you to a feedback form.<br> Please fill the feedback form and download your <b>e-certificate</b>.</h5></p> <ul class="nav nav-list"> + <li><a href="{% url 'certificate:esim_workshop_feedback' %}" >eSim Workshop 2016</a></li> <li><a href="{% url 'certificate:osdag_workshop_feedback' %}" >Osdag Workshop 2016</a></li> <li><a href="{% url 'certificate:openfoam_symposium_feedback_2016' %}" >OpenFOAM Symposium 2016</a></li> <li><a href="{% url 'certificate:fossee_internship_cerificate_download' %}" >Internship Certificate 2016</a></li> diff --git a/certificate/templates/osdag_workshop_feedback.html b/certificate/templates/osdag_workshop_feedback.html index 6696ad1..b1924f0 100755 --- a/certificate/templates/osdag_workshop_feedback.html +++ b/certificate/templates/osdag_workshop_feedback.html @@ -1,20 +1,26 @@ - {% extends 'base.html' %} +{% extends 'base.html' %} -{% block header %} - <h1> Osdag Workshop </h1> +{% block header%} + <h1> OSDAG Workshop 2016 </h1> {% endblock %} - {% block content %} -<p> Your feedback will help us improve our services. Thank you for your time. </p> - <div style = "width:50%; margin:auto"> - <ul class = "nav nav-list"> - <li><a href = "https://docs.google.com/forms/d/1X7TXaEhwUCpkZWXZMxoF4aywv1XUXNaKhfLpd1BC3w8/viewform?c=0&w=1&usp=mail_form_link" target = "popup" >Feedback on Osdag Workshop 2016</a></li> - </ul> - <br> - <a class="btn btn-primary" style="float:right" href = "{% url 'certificate:osdag_workshop_download' %}">Skip feedback and download</a> - </div> -{% endblock %} - - + <div style="width:50%; margin: 0 auto" > +<form action="{% url 'certificate:osdag_workshop_feedback' %}" method="post"> + <h1> Feedback </h1> + <p>Your feedback will help us improve our services. Thank you for your time.</p> + {{ detail }} + {% csrf_token %} + <table class="table"> + {{ form }} + </table> + {% for question in questions %} + <label style="float:left">{{ forloop.counter }}. {{ question.question }} </label><br> + <textarea cols="80" class="form-control" id="{{ question.id }}" name="{{ question.id }}"></textarea><br> + {% endfor %} + <button style="float:left" class="btn btn-primary" type="submit">Submit</button> + <a style="float:right" href="{% url 'certificate:osdag_workshop_download' %}" >Skip feedback and download</a> + </form> + </div> +{% endblock %} diff --git a/certificate/urls.py b/certificate/urls.py index c82f472..7c12ff4 100755 --- a/certificate/urls.py +++ b/certificate/urls.py @@ -28,6 +28,8 @@ urlpatterns = patterns('certificate.views', url(r'^esim_google_feedback/$', 'esim_google_feedback', name='esim_google_feedback'), url(r'^osdag_workshop_download/$', 'osdag_workshop_download', name='osdag_workshop_download'), url(r'^osdag_workshop_feedback/$', 'osdag_workshop_feedback', name='osdag_workshop_feedback'), + url(r'^esim_workshop_download/$', 'esim_workshop_download', name='esim_workshop_download'), + url(r'^esim_workshop_feedback/$', 'esim_workshop_feedback', name='esim_workshop_feedback'), url(r'^scipy_download_2015/$', 'scipy_download_2015', name='scipy_download_2015'), url(r'^openfoam_symposium_download_2016/$', 'openfoam_symposium_download_2016', name='openfoam_symposium_download_2016'), url(r'^openfoam_symposium_feedback_2016/$', 'openfoam_symposium_feedback_2016', name='openfoam_symposium_feedback_2016'), diff --git a/certificate/views.py b/certificate/views.py index 4e5819f..b875e4c 100755 --- a/certificate/views.py +++ b/certificate/views.py @@ -2,7 +2,7 @@ from django.shortcuts import render from django.http import HttpResponse from django.shortcuts import render_to_response, redirect from django.template import RequestContext -from certificate.models import Osdag_WS, Internship_participant, Scilab_participant, Certificate, Event, Scilab_speaker, Scilab_workshop, Question, Answer, FeedBack, Scipy_participant, Scipy_speaker, Drupal_camp, Tbc_freeeda, Dwsim_participant, Scilab_arduino, Esim_faculty, Scipy_participant_2015, Scipy_speaker_2015, OpenFOAM_Symposium_participant_2016, OpenFOAM_Symposium_speaker_2016 +from certificate.models import Osdag_WS, eSim_WS, Internship_participant, Scilab_participant, Certificate, Event, Scilab_speaker, Scilab_workshop, Question, Answer, FeedBack, Scipy_participant, Scipy_speaker, Drupal_camp, Tbc_freeeda, Dwsim_participant, Scilab_arduino, Esim_faculty, Scipy_participant_2015, Scipy_speaker_2015, OpenFOAM_Symposium_participant_2016, OpenFOAM_Symposium_speaker_2016 import subprocess import os from string import Template @@ -126,6 +126,10 @@ def verification(serial, _type): faculty = Osdag_WS.objects.get(email=certificate.email) detail = OrderedDict([('Name', name), ('Event', purpose), ('Days', '4 June'), ('Year', year)]) + elif purpose == 'eSim Workshop': + faculty = eSim_WS.objects.get(email=certificate.email) + detail = OrderedDict([('Name', name), ('Event', purpose), + ('Days', '11 June'), ('Year', year)]) elif purpose == 'SciPy India': detail = OrderedDict([('Name', name), ('Event', purpose), ('Days', '14 - 16 December'), ('Year', year)]) @@ -244,6 +248,8 @@ def _get_detail(serial_no): purpose = 'eSim Faculty Meet' elif serial_no[0:3] == 'OWS': purpose = 'Osdag Workshop' + elif serial_no[0:3] == 'EWS': + purpose = 'eSim Workshop' elif serial_no[0:3] == 'OFC': purpose = 'OpenFOAM Symposium' elif serial_no[0:3] == 'FIC': @@ -1110,7 +1116,41 @@ def osdag_workshop_download(request): return render_to_response('osdag_workshop_download.html', context, ci) def osdag_workshop_feedback(request): - return render_to_response('osdag_workshop_feedback.html') + context = {} + ci = RequestContext(request) + form = FeedBackForm() + questions = Question.objects.filter(purpose='OWS') + if request.method == 'POST': + form = FeedBackForm(request.POST) + if form.is_valid(): + data = form.cleaned_data + try: + FeedBack.objects.get(email=data['email'].strip(), purpose='OWS') + context['message'] = 'You have already submitted the feedback. You can download your certificate.' + return render_to_response('osdag_workshop_download.html', context, ci) + except FeedBack.DoesNotExist: + feedback = FeedBack() + feedback.name = data['name'].strip() + feedback.email = data['email'].strip() + feedback.purpose = 'OWS' + feedback.submitted = True + feedback.save() + for question in questions: + answered = request.POST.get('{0}'.format(question.id), None) + answer = Answer() + answer.question = question + answer.answer = answered.strip() + answer.save() + feedback.answer.add(answer) + feedback.save() + context['message'] = '' + return render_to_response('osdag_workshop_download.html', context, ci) + + context['form'] = form + context['questions'] = questions + + return render_to_response('osdag_workshop_feedback.html', context, ci) + def create_osdag_workshop_certificate(certificate_path, name, qrcode, type, paper, workshop, file_name): error = False @@ -1146,6 +1186,144 @@ def create_osdag_workshop_certificate(certificate_path, name, qrcode, type, pape error = True return [None, error] +def esim_workshop_download(request): + context = {} + err = "" + ci = RequestContext(request) + cur_path = os.path.dirname(os.path.realpath(__file__)) + certificate_path = '{0}/esim_workshop_template/'.format(cur_path) + + if request.method == 'POST': + email = request.POST.get('email').strip() + type = request.POST.get('type', 'P') + paper = None + workshop = None + if type == 'P': + user = eSim_WS.objects.filter(email=email) + if not user: + context["notregistered"] = 1 + return render_to_response('esim_workshop_download.html', + context, context_instance=ci) + else: + user = user[0] + name = user.name + purpose = user.purpose + year = '16' + id = int(user.id) + hexa = hex(id).replace('0x','').zfill(6).upper() + serial_no = '{0}{1}{2}{3}'.format(purpose, year, hexa, type) + serial_key = (hashlib.sha1(serial_no)).hexdigest() + file_name = '{0}{1}'.format(email,id) + file_name = file_name.replace('.', '') + try: + old_user = Certificate.objects.get(email=email, serial_no=serial_no) + qrcode = 'Verify at: http://fossee.in/certificates/verify/{0} '.format(old_user.short_key) + details = {'name': name, 'serial_key': old_user.short_key} + certificate = create_esim_workshop_certificate(certificate_path, details, + qrcode, type, paper, workshop, file_name) + if not certificate[1]: + old_user.counter = old_user.counter + 1 + old_user.save() + return certificate[0] + except Certificate.DoesNotExist: + uniqueness = False + num = 5 + while not uniqueness: + present = Certificate.objects.filter(short_key__startswith=serial_key[0:num]) + if not present: + short_key = serial_key[0:num] + uniqueness = True + else: + num += 1 + qrcode = 'Verify at: http://fossee.in/certificates/verify/{0} '.format(short_key) + details = {'name': name, 'serial_key': short_key} + certificate = create_esim_workshop_certificate(certificate_path, details, + qrcode, type, paper, workshop, file_name) + if not certificate[1]: + certi_obj = Certificate(name=name, email=email, + serial_no=serial_no, counter=1, workshop=workshop, + paper=paper, serial_key=serial_key, short_key=short_key) + certi_obj.save() + return certificate[0] + + if certificate[1]: + _clean_certificate_certificate(certificate_path, file_name) + context['error'] = True + return render_to_response('esim_workshop_download.html', context, ci) + context['message'] = '' + return render_to_response('esim_workshop_download.html', context, ci) + +def esim_workshop_feedback(request): + context = {} + ci = RequestContext(request) + form = FeedBackForm() + questions = Question.objects.filter(purpose='EWS') + if request.method == 'POST': + form = FeedBackForm(request.POST) + if form.is_valid(): + data = form.cleaned_data + try: + FeedBack.objects.get(email=data['email'].strip(), purpose='EWS') + context['message'] = 'You have already submitted the feedback. You can download your certificate.' + return render_to_response('esim_workshop_download.html', context, ci) + except FeedBack.DoesNotExist: + feedback = FeedBack() + feedback.name = data['name'].strip() + feedback.email = data['email'].strip() + feedback.purpose = 'EWS' + feedback.submitted = True + feedback.save() + for question in questions: + answered = request.POST.get('{0}'.format(question.id), None) + answer = Answer() + answer.question = question + answer.answer = answered.strip() + answer.save() + feedback.answer.add(answer) + feedback.save() + context['message'] = '' + return render_to_response('esim_workshop_download.html', context, ci) + + context['form'] = form + context['questions'] = questions + + return render_to_response('esim_workshop_feedback.html', context, ci) + + +def create_esim_workshop_certificate(certificate_path, name, qrcode, type, paper, workshop, file_name): + error = False + try: + download_file_name = None + template = 'template_EWS2016Pcertificate' + download_file_name = 'EWS2016Pcertificate.pdf' + + template_file = open('{0}{1}'.format\ + (certificate_path, template), 'r') + content = Template(template_file.read()) + template_file.close() + + content_tex = content.safe_substitute(name=name['name'].title(), + serial_key = name['serial_key'], qr_code=qrcode) + create_tex = open('{0}{1}.tex'.format\ + (certificate_path, file_name), 'w') + create_tex.write(content_tex) + create_tex.close() + return_value, err = _make_certificate_certificate(certificate_path, + type, file_name) + if return_value == 0: + pdf = open('{0}{1}.pdf'.format(certificate_path, file_name) , 'r') + response = HttpResponse(content_type='application/pdf') + response['Content-Disposition'] = 'attachment; \ + filename=%s' % (download_file_name) + response.write(pdf.read()) + _clean_certificate_certificate(certificate_path, file_name) + return [response, False] + else: + error = True + except Exception, e: + error = True + return [None, error] + def esim_google_feedback(request): return render_to_response('esim_google_feedback.html') |